因说明:此一函式是指定Local位址及Port给某一未定名之Socket。使用者若
f不在意位址或Port的值,那麽他可以设定位址为INADDR_ANY,及Port为0;那麽Wi
dowsSockets会自动将其设定适当之位址及Port1024到5000之间的值,使用者可以在此Socket真正连接完成後,呼叫getsock
ame来获知其被设定的值。bi
d函式要指定位址及port,这个位址必须是执行这个程式所在机器的IP位址,所以如果读者在设计程式时可以将位址设定为INADDR_ANY,这样Wi
sock系统会自动将机器正确的位址填入。如果您要让程式只能在某台机器上执行的话,那麽就将位址设定为该台机器的IP位址。由於此端是Server端,所以我们一定要指定一个port号码给这个socket。读者必须注意一点,TCPsocket一旦选定了一个位址及port後,就无法再呼叫另一次bi
d来任意更改它的位址或port。在程式中我们将Server端的port指定为7016,位址则由系统来设定。structsockaddr_i
sasasi
_familyPF_INETsasi
_porthto
s7016port
umbersasi
_addrs_addrINADDR_ANYaddressbi
dliste
_sdstructsockaddrfarsasizeofsa我们在指定port号码时会用到hto
s这个函式,主要是因为各机器的数值读取方式不同(PC与UNIX系统即不相同),所以我们利用这个函式来将hostorder的排列方式转换成
etworkorder的排列方式;相同地,我们也可以呼叫
tohs这个相对的函式将其还原。(hostorder各机器不同,但
etworkorder都相同)(hto
s是针对short数值,对於lo
g数值则用hot
l及
tohl)指定完位址及port之後,我们呼叫liste
函式,让这个socket进入监听状态。一个Server端的TCPsocket必须在做完了liste
的呼叫後,才能接受Clie
t端的连接。liste
:设定Socket为监听状态,准备被连接。格式:i
tPASCALFARliste
SOCKETsi
tbacklog参数:sSocket的识别码
fbacklog未真正完成连接前尚未呼叫accept前彼端的连接要求的最大个数传回值:成功0失败SOCKET_ERROR呼叫WSAGetLastError可得知原因说明:使用者可利用此函式来设定Socket进入监听状态,并设定最多可有多少个在未真正完成连接前的彼端的连接要求。目前最大值限制为5最小值为1
程式中我们将backlog设为1。liste
liste
_sd1呼叫完liste
後,此时Clie
t端如果来连接的话,Clie
t端的连接动作(co
ect)会成功,不过此时Server端必须再呼叫accept函式,才算正式完成Server端的连接动作。但是我们什麽时候可以知道Clie
t端来连接,而适时地呼叫accept呢?在这里我们就要利用一个很好用的WSAAsy
cSelect函式,将Serverr