#只是记录一下实验作业
2.2 TCP程序
TCP,传输控制协议(有连接的协议)TCP通信编程是面向连接、可靠传输、面向字节流的传输层协议。面向连接,必须建立了连接且保证双方都具有数据收发的能力,才能开始通信。(UDP是无连接的,只要知道对端地址就可以直接发送消息)。可靠传输,传送的数据,无差错、不丢失、不重复、并且按序到达。面向字节流,通信方面也是分为客户端和服务端。其优点是可保证数据安全可靠。其缺点是消耗大,效率低。
一、服务端操作流程:
1.创建套接字端口:在内核中创建socket结构体,关联进程与网卡之间的联系。
2.为套接字绑定地址信息:网络通信中的数据都必须带有源端IP、源端端口、对端IP、对端端口、协议,这5个信息称为五元组。在内核创建的socket结构体中描述IP地址端口以及协议,(必须主动绑定,告诉客户端自己的地址信息,如果不绑定客户端就不知道该发往哪个服务端了)为了告诉操作系统发往哪个IP地址,哪个端口的数据是交给我来处理的。
3.开始监听:设置套接字的一个监听状态,只有处于监听状态的套接字才会接收客户端的连接请求。服务端会为每一个客户端的连接请求都创建一个新的socket结构体,通过这个新建的socket结构体与客户端进行通信。
4.获取一个新建立连接的socket的描述符:获取到socket的操作句柄,通过这个指定的socket的操作句柄与指定的客户端进行通信。
收发数据:每个新建的套接字包含了完整的五元组,知道自己与谁通信,因此收发数据的时候就不用设置地址信息了。
- 关闭套接字:释放资源。
二、客户端操作流程:
1.创建套接字:在内核中创建socket结构体,关联进程与网卡之间的联系。
2.为套接字绑定地址信息:描述在内核中创建的socket结构体的源端地址信息;发送的数据中源端地址信息就是绑定的地址信息(不推荐主动绑定地址,降低端口冲突的概率,从而确保数据发送的安全性)。
3.向服务端发起连接请求:当服务端处于监听状态时就可以进行连接;但是当服务端不处于监听状态,请求会丢失。
收发数据:被服务端特定套接字服务。
- 关闭套接字:释放资源。
三、服务端代码如下所示
运行结果如下:
四、客户端代码如下图所示:
运行结果如下图所示:
先运行服务端,后运行客户端之后就可以发信息,如下图所示: