TCP
TCP Transmission Control Protocol 传输控制协议,意为对数据传输过程的控制。
TCP/IP 协议栈
TCP/IP 协议栈分四层:
- 应用层
- TCP层/UDP层
- IP层
- 链路层
根据2.的TCP套接字还是UDP套接字收发数据,他们的协议栈各不相同。
链路层
物理连接领域标准化的结果,是最基本的领域,定义LAN、WAN、MAN等网络标准。
IP层
IP本身是面向消息、不可靠的协议,每次传输数据他来选择路径,但并不一致,如若发生路径错误,则会选择其他路径;若数据丢失,则无法解决。
TCP层/UDP层
TCP保证可靠的数据传输,他发送数据时以IP层为基础。
UDP则不保证数据传输的可靠性。
根据应用性质选择使用TCP/UDP层。
应用层
根据程序特点性质决定服务器和客户端之间的数据传输规则。
基于TCP服务器端/客户端
socket() | bind() | listen() | accept() | read()/write() Linux recv()/send() Windows | close() |
创建套接字 | 分配套接字地址 | 等待连接请求状态 | 允许连接 | 数据交换 | 断开连接 |
listen()进入等待连接请求状态
SOCKET hServerSock;
//......
listen(hServerSock, 5);//Windows
第一个参数:套接字的句柄。
第二个参数,等待队列的长度,这里的5表示最多五个链接请求进入队列。
实现迭代服务器/客户端
第一章中,服务器处理了一次客户端的连接请求就结束了运行,listen()中第二个参数没有多大意义。
为了多次处理,需要编写迭代服务器端/客户端。
回声(echo)服务端/客户端
socket() | bind() | listen() | accept() | read()/write() Linux recv()/send() Windows | close() |
创建套接字 | 分配套接字地址 | 等待连接请求状态(回到这里) | 允许连接 | 数据交换 | 断开连接(回到listen()运行后状态) |
代码: