欢迎来到天天文库
浏览记录
ID:41033275
大小:91.50 KB
页数:11页
时间:2019-08-14
《linux下的套接字编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、.Linux下TCP编程框架TCP网络编程的流程包含服务器和客户端两种模式。服务器模式创建一个服务程序,等待客户端用户的连接,接收到用户的连接请求后,根据用户的请求进行处理;客户端模式则根据目的服务器的地址和端口进行连接,向服务器发送请求并对服务器的响应进行数据处理。1.服务器端程序包括?建立套接字(socket())?套接字与端口的绑定(bind())?设置服务器的侦听连接(listen())?接收客户端连接(accept())?接收和发送数据(send(),recv())?关闭套接字(close())2.说明1>套接字初始
2、化过程中,根据用户对套接字的需求来确定套接字的选项。按照用户定义的网络类型,协议类型和具体的协议标号等参数来定以socket()函数。系统根据用户的需求生成一个套接字文件描述符供用户使用。2>套接字与端口的绑定过程中,将套接字与一个地址结构进行绑定。绑定之后,套接字所代表IP地址和端口地址及协议类型等参数按照绑定值进行操作。3>由于一个服务器需要满足多个客户端的连接请求,而服务器在某个时间仅能处理有限个数的客户端连接请求,所以服务器需要设置服务器端排队队列的长度。4>在客户端发送连接请求之后,服务器需要接收客户端的连接,然后才
3、能进行其他的处理。5>在服务器接收客户端请求之后,可以从套接字文件描述符中读取数据或者向文件描述符发送数据。接收数据后服务器按照定义的规则对数据进行处理,并将结果发送给客户端。6>当服务器处理完数据,要结束与客户端的通信过程的时候,需要关闭套接字连接2.客户端程序包括?建立套接字(socket())?连接服务器(connect())?读写网络数据(send(),recv())?关闭套接字(close())3.服务器端和客户端程序的区别客户端程序和服务器端程序不同之处是客户端在建立套接字之后可以不进行地址绑定,而是直接连接服务器
4、端。服务器端有listen()和accept()两个函数,而客户端不需要这两个函数。二.基于Linux的TCP套接字函数1.socket1>函数原型:intsocket(intdomain,inttype,intprotocol)2>函数功能:函数socket()用于创建一个套接字描述符。3>形参:?domain:用于指定创建套接字所使用的协议族,在头文件中定义。有时候程序中会使用PF_INET,在头文件中AF_INET和PF_INET的数值是一致的。常见的协议族如下:AF_UNIX:创建只在本
5、机内进行通信的套接字。AF_INET:使用IPv4TCP/IP协议AF_INET6:使用IPv6TCP/IP协议说明:AF_UNIX只能用于单一的UNIX系统进程间通信,而AF_INET是针对Interne的,因而可以允许在远程主机之间通信。一般把它赋为AF_INET。?type:指明套接子通信的类型,对应的参数如下SOCK_STREAM:创建TCP流套接字SOCK_DGRAM:创建UDP数据报套接字SOCK_RAW:创建原始套接字?protocol:指定某个协议的特定类型参数protocol通常设置为0,表示通过参数doma
6、in指定的协议族和参数type指定的套接字类型来确定使用的协议。当为原始套接字时,系统无法唯一的确定协议,此时就需要使用使用该参数指定所使用的协议。4>返回值:执行成功后返回一个新创建的套接字;若有错误发生则返回一个-1,错误代码存入errno中。5>举例:调用socket函数创建一个UDP套接字intsock_fd;sock_fd=socket(AF_INET,SOCK_DGRAM,0);if(sock_fd<0){perror(“socket”);exit(1);}2.bind1>函数原型:intbind(intsockf
7、d,structsockaddr*my_addr,socklen_taddrlen)2>函数功能函数bind()的作用是将一个套接字文件描述符与地址和端口绑定。3>形参:?sockfd:sockfd是调用socket函数返回的文件描述符;?addrlen是sockaddr结构的长度。?my_addr:是一个指向sockaddr结构的指针,它保存着本地套接字的地址(即端口和IP地址)信息。不过由于系统兼容性的问题,一般不使用这个结构,而使用另外一个结构(structsockaddr_in)来代替4>套接字地址结构:(1)stru
8、ctsockaddr:结构structsockaddr定义了一种通用的套接字地址,它在sys/socket.h中定义。structsockaddr{unsignedshortsa_family;/*地址类型,AF_XXX*/charsa_data[14];/*14字节的协议地
此文档下载收益归作者所有