服务器端是如何利用套接字和端口号进行连接的

作者:     信息来源:     发布时间:2024-02-27     点击数:39    

        我们在这前的文章中介绍了服务器程序的大体结构,但是如果不深入挖掘调用Socket库的具体过程,我们还是无法理解服务器是如何使用套接字来完成通信的。因此,下面来看看服务器程序是如何调用Socket库的。

        首先,我们再来回忆一下客户端与服务器的区别。从数据收发的角度来看,区分“客户端”和“服务器”这两个固定的角色似乎不是一个好办法。现在大多数应用都是由客户端去访问服务器,但其实应用的形态不止这一种。为了能够支持各种形态的应用,最好是在数据收发层面不需要区分客户端和服务器,而是能够以左右对称的方式自由发送数据。TCP协议也正是在这样的背景下设计出来的。

        不过,这其中还是存在一个无法做到左右对称的部分,那就是连接操作。连接这个操作是在有一方等待连接的情况下,另一方才能发起连接。

        如果双方同时发起连接是不行的,因为在对方没有等待连接的状态下,无法单方面进行连接。因此,只有这个部分必须区分发起连接和等待连接这两个不同的角色。从数据收发的角度来看,这就是客户端与服务器的区别,也就是说,发起连接的一方是客户端,等待连接的一方是服务器。

        这个区别体现在如何调用Socket库上。首先,客户端的数据收发需要经过以下4个阶段:

(1)创建套接字(创建套接字阶段)

(2)用管道连接服务器端的套接字(连接阶段)

(3)收发数据(收发阶段)

(4)断开管道并删除套接字(断开阶段)

        相对地,服务器是将阶段(2)改成了等待连接,具体如下:

(1)创建套接字(创建套接字阶段)

(2-1)将套接字设置为等待连接状态(等待连接阶段)

(2-2)接受连接(接受连接阶段)

(3)收发数据(收发阶段)

(4)断开管道并删除套接字(断开阶段)