2024年3月24日发(作者:)
相信各位读者现在对於 Winsock 的定义、系统环境,以及一些 Winsock Stack
及 Winsock 应用程式,都有基本的认识了。接下来笔者希望能分几期为各位读者
介绍一下简单的 Winsock 网路应用程式设计。
我们将以 Winsock 1.1 规格所定义的 46 个应用程式介面(API)为基础,逐
步来建立一对 TCP socket 主从架构(Client / Server)的程式。在这两个程式
中,Server 将使用 Winsock 提供的「非同步」(asynchronous)函式来建立 s
ocket 连结、关闭、及资料收送等等;而 Client 则采类似传统 UNIX 的「阻拦
式」(blocking)。由於我们的重点并不在於 MS Windows SDK 的程式设计,所
以我们将使用最简便的方式来显示讯息;有关 MS Windows 程式的技巧,请各位
读者自行研究相关的书籍及文章。
今天我们先要看一下主从架构 TCP socket 的建立连结(connect)及关闭
(close)。
以前笔者曾简单地介绍过主从架构的概念,现在我们再以生活上更浅显的例
子来说明一下,读者稍後也较容易能明白笔者的叙述。我们可以假设 Server 就
像是电信局所提供的一些服务,比如「104 查号台」或「112 障碍台」。
(1)电信局先建立好了一个电话总机,这就像是呼叫 socket() 函式开启了一
个 socket。
(2)接著电信局将这个总机的号码定为 104,就如同我们呼叫 bind() 函式,
将 Server 的这个 socket 指定(bind)在某一个 port。当然电信局必须让用户
知道这个号码;而我们的 Client 程式同样也要知道 Server 所用的 port,待会
才有办法与之连接。
(3)电信局的 104 查号台底下会有一些自动服务的分机,但是它的数量是有
限的,所以有时你会拨不通这个号码(忙线)。同样地,我们在建立一个 TCP 的
Server socket 时,也会呼叫 listen() 函式来监听等待;listen() 的第二个
参数即是 waiting queue 的数目,通常数值是由 1 到 5。(事实上这两者还是
有点不一


发布评论