posts - 495,comments - 227,trackbacks - 0
说明 下一篇
由于我对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, 它有如下功能:

  1. 等待客户端建立连接(listen)
  2. 当客户端建立发送连接请求时,能接受请求,完成链路建立(accept)
  3. 关闭(close)

对于client socket,它有如下功能:

  1. 建立链路(connect)
  2. 发送数据(send)
  3. 接收数据(recv)
  4. 关闭(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++

只有注册用户登录后才能发表评论。


网站导航: