TCP通信会用到很多API函数,还有许多杂的知识点。
我们知道,TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该链接分配必要的内和资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,完成数据交换后,通信双方必须断开连接以释放系统资源。
TCP连接是一对一的,可靠的流式服务,这种服务方式体现在:当发送端应用程序连续执行多次写操作时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个TCP报文段发出。即TCP模块发送出的TCP报文段的个数和应用程序执行的写操作次数之间没有固定的数量关系。
在这里顺便提一句,UDP协议则是不可靠的数据报服务。UDP模块就将其封装成一个UDP数据报并发送之。接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包。如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。
下图为TCP字节流服务和UDP数据报服务的区别(省略传输层以下细节):
下面我将TCP通信的服务器、客户端大概所用函数API顺序展现如下:
下面是程序实例:其中涉及到部分API会在代码后方加以说明。
一、服务器端程序:ser.c