欢迎来到天天文库
浏览记录
ID:38711689
大小:56.50 KB
页数:14页
时间:2019-06-18
《基于TCP的Linux通讯》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于TCP的Linux通讯学院:电子信息与电气工程学院班级:13级网络工程一班学号:20131070131姓名:颜串怀一、需求分析现创建两个通讯端,服务器端和客户机端,实现基于TCP的端到端的socket通讯。当收到客户机的链接请求是,建立通讯会话,客户机发送消息,服务器把消息回显在终端上。二、建立流程服务器端的步骤如下:1.socket: 建立一个socket2.bind: 将这个socket绑定在某个文件上(AF_UNIX)或某个端口上(AF_INET),会分别介绍这两种。3.listen: 开始监听4.accept: 如果监听到客户端连接,则调用a
2、ccept接收这个连接并同时新建一个socket来和客户进行通信5.read/write:读取或发送数据到客户端6.close: 通信完成后关闭socket客户端的步骤如下:1.socket: 建立一个socket2.connect: 主动连接服务器端的某个文件(AF_UNIX)或某个端口(AF_INET)3.read/write:如果服务器同意连接(accept),则读取或发送数据到服务器端4.close: 通信完成后关闭socket三、相关函数简介1.intsocket(intdomain,inttype,intprotocol)domain:指定sock
3、et所属的域,常用的是AF_UNIX或AF_INETAF_UNIX表示以文件方式创建socket,AF_INET表示以端口方式创建sockettype:指定socket的类型,可以是SOCK_STREAM或SOCK_DGRAMSOCK_STREAM表示创建一个TCP链接,有序的,可靠的,面向连接的socketSOCK_DGRAM表示创建一个UDP,不可靠的,无连接的socketprotocol:指定socket的协议类型,一般指定为0表示由第一第二两个参数自动选择。socket()函数返回新创建的socket,出错则返回-12.地址格式:常用的有两种socket域:AF_UN
4、IX或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 */ stru
5、ct 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将其绑定:intbind(intsocket,conststructsockaddr*address,size_taddress_len)如果使用A
6、F_UNIX来创建socket,相应的地址格式是sockaddr_un,而如果使用AF_INET来创建socket,相应的地址格式是sockaddr_in,因此需要将其强制转换为sockaddr这一通用的地址格式类型,而sockaddr_un中的sun_family和sockaddr_in中的sin_family分别说明了它的地址格式类型,因此bind()函数就知道它的真实的地址格式。第三个参数address_len则指明了真实的地址格式的长度。bind()函数正确返回0,出错返回-14.接下来需要开始监听了:intlisten(intsocket,intbacklog)ba
7、cklog:等待连接的最大个数,如果超过了这个数值,则后续的请求连接将被拒绝listen()函数正确返回0,出错返回-15.接受连接:intaccept(intsocket,structsockaddr*address,size_t*address_len)同样,第二个参数也是一个通用地址格式类型,这意味着需要进行强制类型转化这里需要注意的是,address是一个传出参数,它保存着接受连接的客户端的地址,如果不需要,将address置为NULL即可。address_len:期望的地址结构的长度,注意,这
此文档下载收益归作者所有