TCP套接字-副本.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话: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

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档