基于TCP的Linux通讯.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于TCP的Linux通讯

基于TCP的Linux通讯 学院:电子信息与电气工程学院 班级:13级网络工程一班 学号:20131070131 姓名:颜串怀 需求分析 现创建两个通讯端,服务器端和客户机端,实现基于TCP的端到端的socket通讯。当收到客户机的链接请求是,建立通讯会话,客户机发送消息,服务器把消息回显在终端上。 二、建立流程 服务器端的步骤如下:1. socket: ? ? ?建立一个socket 2. bind: ? ? ? ? ?将这个socket绑定在某个文件上(AF_UNIX)或某个端口上(AF_INET), 会分别介绍这两种。 3. listen: ? ? ? ?开始监听 4. accept: ? ? ?如果监听到客户端连接,则调用accept接收这个连接并同时新建一个socket来和客户进行通信 5. read/write:读取或发送数据到客户端 6. close: ? ? ? ?通信完成后关闭socket 客户端的步骤如下: 1. socket: ? ? ?建立一个socket 2. connect: ? 主动连接服务器端的某个文件(AF_UNIX)或某个端口(AF_INET) 3. read/write:如果服务器同意连接(accept),则读取或发送数据到服务器端 4. close: ? ? ? ?通信完成后关闭socket int socket(int domain, int type, int protocol) domain:指定socket所属的域,常用的是AF_UNIX或AF_INET AF_UNIX表示以文件方式创建socket,AF_INET表示以端口方式创建socket type:指定socket的类型,可以是SOCK_STREAM或SOCK_DGRAM SOCK_STREAM表示创建一个有序的,可靠的,面向连接的socket SOCK_DGRAM表示创建一不可靠的,无连接的socket protocol:指定socket的协议类型,一般指定为0表示由第一第二两个参数自动选择。 socket()函数返回新创建的socket,出错则返回-1 2.地址格式: 常用的有两种socket域:AF_UNIX或AF_INET,因此就有两种地址格式:sockaddr_un和sockaddr_in,分别定义如下: struct?sockaddr_un??{?? ??sa_family_t?sun_family;??/*?AF_UNIX?*/?? ??char?sun_path[];?????????/*?pathname?*/?? } struct?sockaddr_in?? {?? ??short?int?sin_family;??????????/*?AF_INET?*/?? ??unsigned?short?int?sin_port;???/*?port?number?*/?? ??struct?in_addr?sin_addr;???????/*?internet?address?*/?? }?? 其中in_addr正是用来描述一个ip地址的:struct?in_addr?? {?? ??unsigned?long?int?s_addr;?? }?? sun_path存放socket的本地文件名,sin_addr存放socket的ip地址,sin_port存放socket的端口号。 3.创建完一个socket后, 需要使用bind将其绑定: int bind(int socket, const struct sockaddr * address, size_t address_len) 如果 使用AF_UNIX来创建socket,相应的地址格式是sockaddr_un,而如果 使用AF_INET来创建socket,相应的地址格式是sockaddr_in,因此 需要将其强制转换为sockaddr这一通用的地址格式类型,而sockaddr_un中的sun_family和sockaddr_in中的sin_family分别说明了它的地址格式类型,因此bind()函数就知道它的真实的地址格式。第三个参数address_len则指明了真实的地址格式的长度。 bind()函数正确返回0,出错返回-1 4.接下来 需要开始监听了: int listen(int socket, int backlog) backlog:等待连接的最大个数,如果超过了这个数值,则后续的请求连接将被拒绝 listen()函数正确返回0,出错返回-1 5.接受连接: int accept(int socket, struct sockaddr * address, size_

文档评论(0)

yanpan1 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档