第7章 TCP网络编程基础.ppt
《第7章 TCP网络编程基础.ppt》由会员分享,可在线阅读,更多相关《第7章 TCP网络编程基础.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7 7章章 TCPTCP网络编程基础网络编程基础TCP协议是协议是TCP/IP协议中很重要的一个协议,它由于协议中很重要的一个协议,它由于传输的稳定性,在很多程序中都在使用,例如传输的稳定性,在很多程序中都在使用,例如HTTP、FTP等协议都是在等协议都是在TCP的基础上进行构建的。本章介绍的基础上进行构建的。本章介绍TCP套接套接字的编程基础知识,主要包含如下内容:字的编程基础知识,主要包含如下内容:套接字编程的基础知识的部分,介绍套接字编程中经常套接字编程的基础知识的部分,介绍套接字编程中经常使用的套接字地址结构,对内核和应用层之间的内存数据传使用的套接字地址结构,对内核和应用层之间的
2、内存数据传递方式进行了简单的介绍。递方式进行了简单的介绍。TCP网络编程的流程部分,简单介绍网络编程的流程部分,简单介绍TCP套接字服务器、套接字服务器、客户端的编程框架,对函数客户端的编程框架,对函数socket()、bind()、listen()、accept()、connect()、close()函数进行了介绍,并提及如何使用函数进行了介绍,并提及如何使用read()和和write()函数进行数据的读取和发送。函数进行数据的读取和发送。7.1 7.1 套接字编程基础知识套接字编程基础知识在进行套接字编程之前需要对基本的数据结构有所了解。在进行套接字编程之前需要对基本的数据结构有所了解。本
3、节对套接字的地址结构定义的形式、如何使用套接字的地本节对套接字的地址结构定义的形式、如何使用套接字的地址结构进行详细的介绍,并且对址结构进行详细的介绍,并且对Linux操作系统中用户空间操作系统中用户空间和用户空间之间的交互过程进行简单的介绍,用户对网络程和用户空间之间的交互过程进行简单的介绍,用户对网络程序设计的方法有比较深入的了解。序设计的方法有比较深入的了解。7.1.1 7.1.1 套接字地址结构套接字地址结构进行套接字编程需要指定套接字的地址作为参数,不同进行套接字编程需要指定套接字的地址作为参数,不同的协议族有不同的地址结构定义方式。这些地址结构通常以的协议族有不同的地址结构定义方式
4、。这些地址结构通常以sockaddr_开头,每一个协议族有一个唯一的后缀,例如对开头,每一个协议族有一个唯一的后缀,例如对于以太网,其结构名称为于以太网,其结构名称为sockaddr_in。1通用套接字数据结构通用套接字数据结构2实际使用的套接字数据结构实际使用的套接字数据结构3结构结构sockaddr和结构和结构sockaddr_in的关系的关系7.1.1 7.1.1 套接字地址结构套接字地址结构7.1.2 7.1.2 用户层和内核层交互过程用户层和内核层交互过程套接字参数中有部分参数是需要用户传入的,这些参数套接字参数中有部分参数是需要用户传入的,这些参数用来与用来与Linux内核进行通信
5、,例如指向地址结构的指针。通内核进行通信,例如指向地址结构的指针。通常是采用内存复制的方法进行。例如常是采用内存复制的方法进行。例如bind()函数需要传入地函数需要传入地址结构址结构struct sockaddr*my_addr和和my_addr指向参数的长指向参数的长度。度。1向内核传入数据的交互过程向内核传入数据的交互过程2内核传出数据的交互过程内核传出数据的交互过程7.1.2 7.1.2 用户层和内核层交互过程用户层和内核层交互过程7.2 TCP7.2 TCP网络编程流程网络编程流程TCP网络编程是目前比较通用的方式,例如网络编程是目前比较通用的方式,例如HTTP协议、协议、FTP协议
6、等很多广泛应用的协议均基于协议等很多广泛应用的协议均基于TCP协议。协议。TCP编程编程主要为主要为C/S模式,即服务器(模式,即服务器(S)、客户端()、客户端(C)模式。)模式。TCP网络编程的流程包含服务器和客户端两种模式,这两种模式网络编程的流程包含服务器和客户端两种模式,这两种模式之间的程序设计的流程存在很大的差别。之间的程序设计的流程存在很大的差别。7.2.1 TCP7.2.1 TCP网络编程架构网络编程架构TCP网络编程有两种模式,一种是服务器模式,另一种网络编程有两种模式,一种是服务器模式,另一种是客户端模式。服务器模式创建一个服务程序,等待客户端是客户端模式。服务器模式创建一
7、个服务程序,等待客户端用户的连接,接收到用户的连接请求后,根据用户的请求进用户的连接,接收到用户的连接请求后,根据用户的请求进行处理;客户端模式则根据目的服务器的地址和端口进行连行处理;客户端模式则根据目的服务器的地址和端口进行连接,向服务器发送请求并对服务器的响应进行数据处理。接,向服务器发送请求并对服务器的响应进行数据处理。1服务器端的程序设计模式服务器端的程序设计模式2客户端的程序设计模式客户端的程序设计模式3客户端与服务器的交互过程客户端与服务器的交互过程7.2.1 TCP7.2.1 TCP网络编程架构网络编程架构7.2.2 7.2.2 创建网络插口函数创建网络插口函数socket()
8、socket()网络程序设计中的套接字系统调用函数网络程序设计中的套接字系统调用函数socket()用来获得文用来获得文件描述符。件描述符。1函数函数socket()介绍介绍2应用层函数应用层函数socket()和内核函数之间的关系和内核函数之间的关系名称含义PF_UNIX,PF_LOCAL本地通信PF_INETIPv4Internet协议PF_INET6IPv6Internet协议PF_IPXIPX-Novell协议PF_NETLINK内核用户界面设备PF_X25ITU-TX.25/ISO-8208协议PF_AX25AmateurradioAX.25协议PF_ATMPVC原始ATMPVC访问
9、PF_APPLETALKAppletalkPF_PACKET底层包访问7.2.2 7.2.2 创建网络插口函数创建网络插口函数socket()socket()7.2.3 7.2.3 绑定一个地址端口对绑定一个地址端口对bind()bind()在建立套接字文件描述符成功后,需要对套接字进行地址和端口在建立套接字文件描述符成功后,需要对套接字进行地址和端口的绑定,才能进行数据的接收和发送操作。的绑定,才能进行数据的接收和发送操作。1函数函数bind()介绍介绍2函数函数bind()的例子的例子3应用层应用层bind()函数和内核函数之间的关系函数和内核函数之间的关系值含义备注EADDRINUSE给
10、定地址已经使用EBADFsockfd不合法EINVALsockfd已经绑定到其他地址ENOTSOCKsockfd是一个文件描述符,不是socket描述符EACCES地址被保护,用户的权限不足EADDRNOTAVAIL接口不存在或者绑定地址不是本地UNIX协议族,AF_UNIXEFAULTmy_addr指针超出用户空间UNIX协议族,AF_UNIXEINVAL地址长度错误,或者socket不是AF_UNIX族UNIX协议族,AF_UNIXELOOP解析my_addr是符号链接过多UNIX协议族,AF_UNIXENAMETOOLONGmy_addr过长UNIX协议族,AF_UNIXENOENT文件
11、不存在UNIX协议族,AF_UNIXENOMEM内存内核不足UNIX协议族,AF_UNIXENOTDIR不是目录UNIX协议族,AF_UNIXEROFSsocket节点应该在只读文件系统上UNIX协议族,AF_UNIX7.2.3 7.2.3 绑定一个地址端口对绑定一个地址端口对bind()bind()7.2.4 7.2.4 监听本地端口监听本地端口listenlisten在在7.2.1小节中简单介绍了服务器模式的方式,服务器小节中简单介绍了服务器模式的方式,服务器模式中有模式中有listen()和和accept()两个函数,而客户端则不需要这两个函数,而客户端则不需要这两个函数。函数两个函数。
12、函数listen()用来初始化服务器可连接队列,服用来初始化服务器可连接队列,服务器处理客户端连接请求的时候是顺序处理的,同一时间仅务器处理客户端连接请求的时候是顺序处理的,同一时间仅能处理一个客户端连接。当多个客户端的连接请求同时到来能处理一个客户端连接。当多个客户端的连接请求同时到来的时候,服务器并不是同时处理,而是讲不能进行处理的客的时候,服务器并不是同时处理,而是讲不能进行处理的客户端连接请求放到等待队列中,这个队列的长度由户端连接请求放到等待队列中,这个队列的长度由listen()函数来定义。函数来定义。1函数函数listen()介绍介绍2函数函数listen()的例子的例子3应用层
13、应用层listen()函数和内核函数之间的关系函数和内核函数之间的关系7.2.4 7.2.4 监听本地端口监听本地端口listenlisten值含义EADDRINUSE另一个socket已经在同一端口侦听EBADF参数sockfd不是合法的描述符ENOTSOCK参数sockfd不是代表socket的文件描述符EOPNOTSUPPsocket不支持listen操作7.2.4 7.2.4 监听本地端口监听本地端口listenlisten7.2.5 7.2.5 接受一个网络请求接受一个网络请求accept()accept()当一个客户端的连接请求到达服务器主机侦听的端口时,当一个客户端的连接请求到达
14、服务器主机侦听的端口时,此时客户端的连接会在队列中等待,直到使用服务器处理接此时客户端的连接会在队列中等待,直到使用服务器处理接收请求。收请求。函数函数accept()成功执行后,会返回一个新的套接口文件成功执行后,会返回一个新的套接口文件描述符来表示客户端的连接,客户端连接的信息可以通过这描述符来表示客户端的连接,客户端连接的信息可以通过这个新描述符来获得。因此当服务器成功处理客户端的请求连个新描述符来获得。因此当服务器成功处理客户端的请求连接后,会有两个文件描述符,老的文件描述符表示正在监听接后,会有两个文件描述符,老的文件描述符表示正在监听的的socket,新产生的文件描述符表示客户端的
15、连接,函数,新产生的文件描述符表示客户端的连接,函数send()和和recv()通过新的文件描述符进行数据收发。通过新的文件描述符进行数据收发。1函数函数accept()介绍介绍2函数函数accept()的例子的例子3应用层应用层accept()函数和内核函数之间的关系函数和内核函数之间的关系7.2.5 7.2.5 接受一个网络请求接受一个网络请求accept()accept()7.2.6 7.2.6 连接目标网络服务器连接目标网络服务器connect()connect()客户端在建立套接字之后,不需要进行地址绑定,就可客户端在建立套接字之后,不需要进行地址绑定,就可以直接连接服务器。连接服务
16、器的函数为以直接连接服务器。连接服务器的函数为connect(),此函,此函数连接指定参数的服务器,例如数连接指定参数的服务器,例如IP地址,端口等。地址,端口等。1函数函数connet()介绍介绍2函数函数connect的例子的例子3应用层应用层connect()函数和内核函数之间的关系函数和内核函数之间的关系7.2.6 7.2.6 连接目标网络服务器连接目标网络服务器connect()connect()值含义EACCES在AF_UNIX族协议中,使用路径名作为标识。EACCES表示目录不可写或者不可访问。EACCES/EPERM用户没有设置广播标志而连接广播地址或者连接请求被防火墙限制。E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 TCP网络编程基础 TCP 网络 编程 基础
限制150内