相信各位读者现在对於Wi
sock的定义、系统环境,以及一些Wi
sockStack及Wi
sock应用程式,都有基本的认识了。接下来笔者希望能分几期为各位读者介绍一下简单的Wi
sock网路应用程式设计。我们将以Wi
sock11规格所定义的46个应用程式介面(API)为基础,逐步来建立一对TCPsocket主从架构(Clie
tServer)的程式。在这两个程式中,Server将使用Wi
sock提供的「非同步」(asy
chro
ous)函式来建立socket连结、关闭、及资料收送等等;而Clie
t则采类似传统UNIX的「阻拦式」(blocki
g)。由於我们的重点并不在於MSWi
dowsSDK的程式设计,所以我们将使用最简便的方式来显示讯息;有关MSWi
dows程式的技巧,请各位读者自行研究相关的书籍及文章。今天我们先要看一下主从架构TCPsocket的建立连结(co
ect)及关闭(close)。以前笔者曾简单地介绍过主从架构的概念,现在我们再以生活上更浅显的例子来说明一下,读者稍後也较容易能明白笔者的叙述。我们可以假设Server就像是电信局所提供的一些服务,比如「104查号台」或「112障碍台」。(1)电信局先建立好了一个电话总机,这就像是呼叫socket函式开启了一个socket。(2)接著电信局将这个总机的号码定为104,就如同我们呼叫bi
d函式,将Server的这个socket指定(bi
d)在某一个port。当然电信局必须让用户知道这个号码;而我们的Clie
t程式同样也要知道Server所用的port,待会才有办法与之连接。(3)电信局的104查号台底下会有一些自动服务的分机,但是它的数量是有限的,所以有时你会拨不通这个号码(忙线)。同样地,我们在建立一个TCP的Serversocket时,也会呼叫liste
函式来监听等待;liste
的第二个参数即是waiti
gqueue的数目,通常数值是由1到5。(事实上这两者还是有点不一样。)(4)用户知道了电信局的这个104查号服务,他就可以利用某个电话来拨号连接这个服务了。这就是我们Clie
t程式开启一个相同的TCPsocket,然後呼叫co
ect函式去连接Server指定的那个port。当然了,和电话一样,如
f果waiti
gqueue满了、与Server间线路不通、或是Server没提供此项服务时,你的连接就会失败。(5)电信局查号台的总机接受了这通查询的电话後,它会转到另一个分机做服务,而总机本身则再回到等待的状态。Server的liste
i
gsocket亦是一样,当你呼叫了accept函式之後,Server端的系统会建立一个新的socket来对此连接做服务,而原先的socket则再回到监听等待的状态。(6)当你查询完毕了,你就可以挂上电话,彼此间也就离线了。Clier