- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TCP套接字-副本剖析
TCP套接字采用套接字可以实现基于TCP/IP协议、面向连接通信模式。如ftp、rlogin等均采用这种方法。基本方法:TCP套接字实现过程实现TCP套接字基本步骤分为服务器端和客户端两部分服务器端步骤:创建套接字;绑定套接字;设置套接字为监听模式,进入被动接受连接请求状态;接受请求,建立连接;读/写数据;终止连接。客户端步骤创建套接字;与远程服务程序连接;读/写数据;终止连接。二、TCP服务器模板:1~3所需头文件8~12产生TCP套接字14 绑定套接字到指定地址16监听客户请求17~28反复接收客户连接请求,一旦接收到请求则产生子进程/线程并进行处理。三、TCP客户模板程序说明:1~3所需头文件8~12产生套接字13~14与服务器建立连接实现TCP套接字产生TCP套接字对于基于TCP的通信,无论是服务器还是客户,都必须首先产生其TCP通信传输端点,即TCP套接字。应用程序通过socket()产生套接字。该函数必须给出所使用的地址簇、套接字类型和协议标志。该函数返回一个套接字描述符。由于在unix系统中套接字也是一种文件因此套接字的描述符是一种文件描述符。其数据结构包含一个网络连接的5种信息:通信协议、本地协议地址、本机主机端口、远程主机地址和远程协议端口。socket函数原型#includesys/types.h#include sys/socket.hint socket(intdomain,inttype,int protocol);函数描述该函数用于创建一个套接字,并为套接字数据结构分配存储空间domain:协议簇和地址簇,确定socket使用的一组协议。与三个符号常数有关:PF_UNIX: Unix系统内部协议PF_INET: IP版本4PF_INET6: IP版本6type:通信类型,相关常数如下:SOCK_STREAM:以字节流形式通信,面向连接的协议使用这种形式SOCK_DGRAM:数据以独立的数据包形式流动,无连接协议使用这种形式。SOCK_RAW:是低于传输层的低级协议或物理网络提供的套接字类型。可以访问内部网络接口。Protocol:指明此socket请求所使用的协议,可以使用如下相关符号常数来表示。IPPROTO_TCP:表示tcp协议IPPROTO_UDP:表示udp协议返回值如调用成功,返回socket描述符,否则返回-1并不是所有协议簇和通信类型的组合都是合法的,其合法组合如下用法为了产生TCP套接字,damain取值为PF_INET,type取值为SOCK_STREAM,protocol取值为0.当protocol为0时,系统自动选择相应值。由于damain指为PF_INET,type为SOCK_STREAM,系统自动选择protocol值为IPPROTO_TCP。如下1~2所需头文件5 产生套接字7~9 处理异常二、绑定绑定就是将套接字和地址信息相关联,建立地址与套接字的对应关系。对于TCP套接字,地址信息包括IP地址及端口号。对于绑定操作,地址信息必须唯一,即将要绑定的地址不能用于其他连接通信。实际中,通过绑定端口号来保证地址信息的唯一性。bind函数原型描述该函数将套接字描述符与相应的套接字地址对应起来,以指明套接字将使用本地址的哪一个协议端口进行数据传送。S是套接字描述符,套接字函数返回的套接字描述符。Name是本地套接字地址,是指向特定套接字地址结构的指针。指定用于通信的本地协议端口。Namelen是本地套接字地址结构的长度返回值调用成功返回0,不成功返回-1,并将errno置为相应的错误号。注意:通常我们采用地址结构sockadd_in来提供地址信息,在进行bind函数调用时,再将sockaddr_in转换成sockaddr结构。最常见的错误是所绑定的地址已经被其他的进行使用,此时errno的值为EADDRINUSE。用法对于TCP服务器,绑定意味着该服务器只接收来自被绑定的协议端口(IP地址和TCP端口号)的数据。而对于客户,绑定意味着该客户将通过被绑定的协议端口发送数据非服务器。但通常TCP客户并不需要绑定操作,而由系统决定又哪个协议端口进行发送。在调用bind函数时,一般不要将端口号置为小于1024的值,因为1~1024是保留端口号,你可以选择大于1024的任何一个没有被占用的端口号。典型代码(服务器端):程序说明如下:1~3 所需头文件9~12设置套接字地址13~17绑定套接字到指定地址sockaddr_in结构更方便使用。并可以用bzero或memset函数将其置为0。指向sockaddr_in的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sock
您可能关注的文档
最近下载
- (2025秋)人教版二年级数学上册全册教案(新教材).pdf
- 第二单元大单元教学设计 高一语文必修上册.docx VIP
- 2025年燃气安全生产管理人员模拟考试题库及答案.docx VIP
- 高中音乐 人音版 必修《音乐鉴赏》《舞动心弦——舞蹈音乐》 第四课时.pptx VIP
- 住院医师临床思维培养ppt模板.pptx VIP
- 反渗透纳滤组合工艺高盐废水深度处理及零排放预浓缩.pdf VIP
- 超声成像系统数字扫描变换器(参考).pptx VIP
- JTG3441-2024 公路工程无机结合料稳定材料试验规程.pdf VIP
- 腹腔镜下卵巢囊肿剥除术配合.pptx VIP
- 2026届高三语文一轮复习教学计划.docx
文档评论(0)