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

在线预览结束,喜欢就下载吧,查找使用更方便

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

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

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

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

一、TCP/IP、UDP的基本概念 TCP/IP即传输控制协议,是一个工业标准协议集,为广域网设计的。涉及多个其他协议,主要以TCP和IP为代表。UDP即用户数据报协议。 TCP/IP进行数据传输主要分为两个过程:建立连接过程和数据传输过程。 TCP/IP协议通过三次握手建立一个可靠的连接,步骤: 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 数据传输过程: 发送端发送数据,然后进入等待ACK确定信号状态,随后接收端接收到数据,发送ACK确认信号,发送端接收到ACK后才发送下一组数据,同时发送端有一个定时器,定时时间到了没有接收到ACK,就认为发送失败了,进行重新发送。因为发送端发送完数据后处于等待状态,因此为了提高效率,引入“滑动窗口”的概念,就是发送的时候一次发送多组数据,相当于窗口的大小,然后当接收到第一个ACK后,就将窗口向后移动一个数据,就形成了滑动窗口的情况。 二、Socket编程 1创建套接口: Intsocket(intfamily,inttype,intptotocol) 功能:生成一个套接口描述 返回值:成功返回套接口描述符,失败返回-1. 参数1:family指明协议族 PF_UNIX----UNIX协议族 PF_INET-----IPV4协议 PF_INET6---IPV6协议 AF_ROUTE—路由套接口 参数2:type指明通信字节流,取值 SOCK_STREM----TCP方式 SOCK_DGRAM---UDP方式 SOCK_RAW------原始套接口 参数3:ptotocol一般设置为0 2绑定端口: Intbind(intsockfd,conststructsockaddr*my_addr,socklenaddrlen) 功能:调用socket创建一个套接口后,需要使用bind函数在这个套接口上绑定一个指定的端口号和IP地址。 返回:成功0,失败-1 参数1:sockfd已建立的socket编号(描述符) 参数2:my_addr是一个指向sockaddr结构体类型的指针 参数3:addrlen表示my_addr结构的长度,可以用sizeof获得 3等待监听函数 Intlisten(intsockfd,intbacklog) 功能:监听是指socket的端口一直处于等待的状态,监听网络中的所有客户机,耐心等待某一客户机的发送请求。如果客户端有连接请求,端口就会接受这个链接。 返回:成功0,失败-1 参数1:sockfd已建立的套接口描述符 参数2:backlog能同时处理的最大连接请求数,如果超过这个数目,客户端将接收到ECONNREFUSED拒绝连接的错误 4接受连接的函数 Intaccept(intsockfd,structsockaddr*addr,socketlen*addrlen) 功能:服务区处于监听状态,若某时获得客户机的连接请求,此时并不是立即处理这个请求,而是将这个请求放在等待队列中,当系统空闲时在处理客户机的连接请求,接受连接请求的函数式accept。 返回:成功返回新的套接口描述符,失败-1 参数1:sockfd表示处于监听状态的socket 参数2:addr是一个sockaddr结构体类型的指针,系统会把远程主机的信息保存到这个指针所指向的结构体中。 参数3:addrlen表示sockaddr的内存长度,可以用sizeof函数取得。 当accept函数接受一个连接时,会返回一个新的socket标示符,以后的数据传输与读取就是通过这个新的socket编号来处理,原来参数中的socket也可以继续使用。接受链接以后,远程主机的地址和端口信息将会保存到addr所指的结构体中。 5请求连接的函数 Intconnect(intsockfd,conststructsockaddr*serv_addr,intaddrlen) 功能:客户机向服务器发送信息之前,需要先发送一个链接请求,请求与服务器建立一个连接请求,请求与服务器建立TCP通信连接。Connect函数会将本地的socket连接到serv_addr所指定的服务器IP与端口号上去。 返回:成功0,失败-1 参数1:sockfd表示已建立的套接口标示符。 参数2:serv_addr是一个结构体指针,指向一个sockaddr结构