套接字(socket)是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行。
套接字应用程序是如何通过套接字来维持一个连接的?
首先,服务器应用程序用系统调用socket来创建一个套接字,它是系统分配给该服务器进程的类似文件描述符的资源,它不能与其它进程共享。
接下来,服务器进程会给套接字起个名字。本地套接字的名字是Linux文件系统中的文件名,一般放在/temp或/user/tmp目录中。对于网络套接字,它的名字是与客户连接的
特定网络有关的服务标识符(端口号或访问点)。这个标识符允许Linux将进入的针对特定端口号的连接转到正确的服务器进程。
例如,Web服务器一般在80端口上创建一个套接字,这是一个专门用于次目的的标识符。Web浏览器知道对于用户想要访问的Web站点,应该使用端口80来建立HTTP连接。
我们用系统调用bind来给套接字命令。然后服务器进程就开始等待客户连接到这个命名套接字。系统调用listen的作用是,创建一个队列并将其用于存放来自客户的进入连接。
服务器通过系统调用accept来接受客户的连接。
服务器调用accept时,它会创建一个与原有的命名套接字不同的新的套接字。这个新套接字只用于与这个特定的客户进行通信,而命名套接字则被保留下来继续处理来自其他客户的连接。
如果服务器编写的当,它就可以充分利用多个连接带来的好处。Web服务器就会这么做以同时服务来自许多客户的页面请求。对一个简单的服务器来说,后续的客户将在监听队列中等待,
直到服务器再次准备就绪。
而基于套接字系统的客户端更简单。客户首先调动socket创建一个未命名套接字,然后将服务器的命名套接字作为一个地址来调用connect与服务器建立连接。
一旦连接建立,我们就可以像使用底层的文件描述符那样用套接字来实现双向的数据通信。
原文:http://www.cnblogs.com/xiaodeyao/p/6505441.html