一个上午都在调试一个服务器端监听程序,测试的客户端怎么都连不上,然后疯狂在网上搜寻答案无果,最后无意中发现竟是系统没有联网。唉,顿时就像是在debug过程中发现某处少了一个逗号是一个样的郁闷!不过这个纠结的过程却让我把TCP套接字编程的整个过程又有了重新的认识。
TCP是一种可靠的面向连接的通信协议,因此在通信之前需要确认通信的双方,称之为客户端和服务器端。一般由客户端向服务器端发送连接请求,然后服务器端确认请求,最后客户端再确认连接,即为三次握手。在TCP套接字网络编程中,存在更多的细节,大致的流程如下图所示:
通俗地说,由TCP数据报首部结构我们知道,唯一标识一个TCP连接的结构是一个插口对,也就是客户端ip、客户端端口、服务器端ip、服务器端端口四元组。这个四元组结构就是一个套接字。在客户端中,我们知道自己的ip、端口(用户定义或者内核分配),也知道目的服务器的插口地址,而在服务器端的套接字只有服务器本身的插口地址,在有客户端来连接的时候配成一个新的已连接的套