说明 下一篇
由于我对TCP稍微熟悉,所以本系列文章只描述socket(套接字)接口的TCP编程
在IT领域中,大家经常听说Client/Server的概念,这个概念是描述了提供服务的一方(服务器)和接受服务的一方(客户端)之间的拓扑结构。举例来说,http://www.vckbase.com这个网站提供大家交流和娱乐的服务,他们的计算机对于我们而言就是服务器,而我们的计算机则是客户端。一般而言,服务器功能比较强大,一个服务器能提供服务给多个客户端。
对于socket设计而言,我们往往也提到一个服务器端和客户端的概念,但是它的概念和前面而言基本是不一样的。这里的概念其实是指在开始通讯时谁先发起连接的过程。
对于通讯的双方而言,存在一个建立对话通道的过程,该过程的建立必然是一方主动发起的。我们称呼主动建立链路的一方为客户端,而另外一方为服务器端。(至少我个人这么称呼,不知道业界是不是都这么说)
在通讯过程中,服务器端必须在某个预先约定的端口等待其他主机建立链路,这个过程称为侦听(Listen)。客户端主动建立链路的过程成为连接
(Connect)。当服务器端套接字接到一个连接请求后,会生成一个新的套接字。服务器端主机就通过这个套接字和客户端主机通讯。
在整个过程中,涉及到三个套接字,他们分别是服务器端套接字(我一般称呼它为server
socket)、客户端套接字(一般我称呼它为client
socket)和服务器端套接字创建出来的套接字。在编程过程中,第三种套接字除了不会主动建立链路外,功能和client
socket完全一致,因此我也把它称为client socket。为了区别,对于客户端的client
socket,大家可以称呼它为主动client socket(Active Client Socket,
ACS),而对服务器端的那个客户端套接字,则称为被动client socket(Passive Client Socket,
PCS)。一般情况下,我们没有必要区分ACS和PCS,因为PCS的功能是ACS的一个部分,ACS只多一项功能而已。在后文中,我将不区分这两种
client socket
对于server socket, 它有如下功能:
- 等待客户端建立连接(listen)
- 当客户端建立发送连接请求时,能接受请求,完成链路建立(accept)
- 关闭(close)
对于client socket,它有如下功能:
- 建立链路(connect)
- 发送数据(send)
- 接收数据(recv)
- 关闭(close)
一个简单的通讯过程应该这样:
- server socket开始侦听(listen)
- client socket开始连接(connect)
- server socket接受连接(accept)
- ACS和PCS开始互相发送数据(send/recv)
- ACS或PCS关闭链路(close)
- server socket关闭(close)
本系列将根据以上过程介绍socket编程的方方面面。由于阻塞套接字相对简单,我会先从阻塞套接字(也就是伯可力套接字)编程开始,之间会穿插一些多线程的知识。很多方面我也没用过,所以有些东西只能边试边写,和大家探讨。
posted on 2008-07-03 15:15
SIMONE 阅读(550)
评论(0) 编辑 收藏 所属分类:
C++