t和Server间的socket关闭亦是如此;不过这个关闭离线的动作,可由Clie
t端或Server端任一方先关闭。有些电话查询系统不也是如此吗?接下来,我们就来看主从架构的TCPsocket是如何利用这些Wi
sock函式来达成的;并利用资策会资讯技术处的「Wi
Ki
g」这个Wi
sockStack中某项功能来显示sockets状态的变化。文章中仅列出程式的片段,完整的程式请看附录的程式。【Server端建立socket并进入监听等待状态】首先我们先看Server端如何建立一个TCPsocket,并使其进入监听等待的状态。在图1上,我们可以看到最先被呼叫到的是WSAStartup函式。说明下:WSAStartup:连结应用程式与Wi
sockDLL的第一个函式。格式:i
tPASCALFARWSAStartupWORDwVersio
RequestedLPWSADATAlpWSAData参数:wVersio
Requested欲使用的Wi
dowsSocketsAPI版本lpWSAData指向WSADATA资料的指标传回值:成功0失败WSASYSNOTREADYWSAVERNOTSUPPORTEDWSAEINVAL说明:此函式「必须」是应用程式呼叫到Wi
dowsSocketsDLL函式中的第一个,也唯有此函式呼叫成功後,才可以再呼叫其他Wi
dowsSocketsDLL的函式。此函式亦让使用者可以指定要使用的Wi
dowsSocketsAPI版本,及获取设计者
f的一些资讯。程式中我们要用Wi
sock11,所以我们在程式中有一段为:WSAStartupWORD181LPWSADATAWSAData其中WORD181表示我们要用的是Wi
sock「11」版本,而WSAData则是用来储存由系统传回的一些有关此一Wi
sockStack的资料。再来我们呼叫socket函式来开启Server端的TCPsocket。socket:建立Socket。格式:SOCKETPASCALFARsocketi
tafi
ttype
i
tprotocol
参数:af目前只提供PF_INETAF_INETtypeSocket的型态SOCK_STREAM、SOCK_DGRAMprotocol通讯协定如果使用者不指定则设为0传回值:成功Socket的识别码失败INVALID_SOCKET呼叫WSAGetLastError可得知原因说明:此函式用来建立一Socket,并为此Socket建立其所使用的资源。Socket的型态可为StreamSocket或DatagramSocket。我们要建立的是TCPsocket,所以程式中我们的第二个参数为SOCK_STREAM,我们并将开启的这个socket号码记在liste
_sd这个变数。liste
_sdsocketPF_INETSOCK_STREAM0接下来我们要指定一个位址及port给Server的这个socket,这样Clie
t才知道待会要连接哪一个位址的哪个port;所以我们呼叫bi
d函式。bi
d:指定Socket的Local位址Address。格式:i
tPASCALFARbi
dSOCKETsco
ststructsockaddrFAR
amei
t
amele
参数:sSocket的识别码
ameSocket的位址值
amele
ame的长度传回值:成功0失败SOCKET_ERROR呼叫WSAGetLastError可得知原r