预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

.Linux下TCP编程框架 TCP网络编程的流程包含服务器和客户端两种模式。服务器模式创建一个服务程序,等待客户端用户的连接,接收到用户的连接请求后,根据用户的请求进行处理;客户端模式则根据目的服务器的地址和端口进行连接,向服务器发送请求并对服务器的响应进行数据处理。 1.服务器端程序包括 ?建立套接字(socket()) ?套接字与端口的绑定(bind()) ?设置服务器的侦听连接(listen()) ?接收客户端连接(accept()) ?接收和发送数据(send(),recv()) ?关闭套接字(close()) 2.说明 1>套接字初始化过程中,根据用户对套接字的需求来确定套接字的选项。按照用户定义的网络类型,协议类型和具体的协议标号等参数来定以socket()函数。系统根据用户的需求生成一个套接字文件描述符供用户使用。 2>套接字与端口的绑定过程中,将套接字与一个地址结构进行绑定。绑定之后,套接字所代表IP地址和端口地址及协议类型等参数按照绑定值进行操作。 3>由于一个服务器需要满足多个客户端的连接请求,而服务器在某个时间仅能处理有限个数的客户端连接请求,所以服务器需要设置服务器端排队队列的长度。 4>在客户端发送连接请求之后,服务器需要接收客户端的连接,然后才能进行其他的处理。 5>在服务器接收客户端请求之后,可以从套接字文件描述符中读取数据或者向文件描述符发送数据。接收数据后服务器按照定义的规则对数据进行处理,并将结果发送给客户端。 6>当服务器处理完数据,要结束与客户端的通信过程的时候,需要关闭套接字连接 2.客户端程序包括 ?建立套接字(socket()) ?连接服务器(connect()) ?读写网络数据(send(),recv()) ?关闭套接字(close()) 3.服务器端和客户端程序的区别 客户端程序和服务器端程序不同之处是客户端在建立套接字之后可以不进行地址绑定,而是直接连接服务器端。 服务器端有listen()和accept()两个函数,而客户端不需要这两个函数。 二.基于Linux的TCP套接字函数 1.socket 1>函数原型: intsocket(intdomain,inttype,intprotocol) 2>函数功能: 函数socket()用于创建一个套接字描述符。 3>形参: ?domain:用于指定创建套接字所使用的协议族,在头文件 <linux/socket.h>中定义。有时候程序中会使用PF_INET,在头文件中AF_INET和PF_INET的数值是一致的。 常见的协议族如下: AF_UNIX:创建只在本机内进行通信的套接字。 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,表示通过参数domain指定的协议族和参数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.bind 1>函数原型: intbind(intsockfd,structsockaddr*my_addr,socklen_taddrlen) 2>函数功能 函数bind()的作用是将一个套接字文件描述符与地址和端口绑定。 3>形参: ?sockfd:sockfd是调用socket函数返回的文件描述符; ?addrlen是sockaddr结构的长度。 ?my_addr:是一个指向sockaddr结构的指针,它保存着本地套接字的地址(即端口和IP地址)信息。不过由于系统兼容性的问题,一般不使用这个结构,而使用另外一个结构(structsockaddr_in)来代替 4>套接字地址结构: (1)structsockad