ÄãµÄλÖãºÈí¼þÓë¹âÅÌ>
ÓÃWinsockʵÏÖÓïÒôȫ˫¹¤Í¨ÐÅʹÓÃ
2000-03-21 00:00:00¡¤ ÕÅÏþÃ÷ Ñ»ª Ç®Ãû¡¤Hedgehog Studio

P>Ò»¡¢ÒýÑÔ£¿
¡¡¡¡Windows 95×÷Ϊ΢»úµÄ²Ù×÷ϵͳ£¬ÒѾ­ÍêÈ«ÈÚÈëÁËÍøÂçÓëͨÐŹ¦ÄÜ£¬²»½ö¿ÉÒÔ½¨Á¢´¿Windows 95»·¾³Ïµġ°¶ÔµÈÍøÂ硱£¬¶øÇÒÖ§³Ö¶àÖÖЭÒ飬ÈçTCP/IP¡¢IPX/SPX¡¢NETBUIµÈ¡£ÔÚTCP/IPЭÒé×éÖУ¬TPCÊÇÒ»ÖÖÃæÏòÁ¬½ÓµÄЭÒ壬ΪÓû§Ìṩ¿É¿¿µÄ¡¢È«Ë«¹¤µÄ×Ö½ÚÁ÷·þÎñ£¬¾ßÓÐÈ·ÈÏ¡¢Á÷¿ØÖÆ¡¢¶à·¸´ÓúÍͬ²½µÈ¹¦ÄÜ£¬ÊÊÓÚÊý¾Ý´«Êä¡£UDPЭÒéÔòÊÇÎÞÁ¬½ÓµÄ£¬Ã¿¸ö·Ö×鶼Я´øÍêÕûµÄÄ¿µÄµØÖ·£¬¸÷·Ö×éÔÚϵͳÖжÀÁ¢´«ËÍ¡£Ëü²»Äܱ£Ö¤·Ö×éµÄÏȺó˳Ðò£¬²»½øÐзÖ×é³ö´íµÄ»Ö¸´ÓëÖØ´«£¬Òò´Ë²»±£Ö¤´«ÊäµÄ¿É¿¿ÐÔ£¬µ«ÊÇ£¬ËüÌṩ¸ß´«ÊäЧÂʵÄÊý¾Ý±¨·þÎñ£¬ÊÊÓÚʵʱµÄÓïÒô¡¢Í¼Ïñ´«Êä¡¢¹ã²¥ÏûÏ¢µÈÍøÂç´«Êä¡££¿
¡¡¡¡Winsock½Ó¿ÚΪ½ø³Ì¼äͨÐÅÌṩÁËÒ»ÖÖеÄÊֶΣ¬Ëü²»µ«ÄÜÓÃÓÚͬһ»úÆ÷ÖеĽø³ÌÖ®¼äͨÐÅ£¬¶øÇÒÖ§³ÖÍøÂçͨÐŹ¦ÄÜ¡£Ëæ×ÅWindows 95µÄÍÆ³ö¡£WinsockÒѾ­±»Õýʽ¼¯³Éµ½ÁËWindowsϵͳÖУ¬Í¬Ê±°üÀ¨ÁË16λºÍ32λµÄ±à³Ì½Ó¿Ú¡£¶øWinsockµÄ¿ª·¢¹¤¾ßÒ²¿ÉÒÔÔÚBorland C++4.0¡¢Visual C++2.0ÕâЩC±àÒëÆ÷ÖÐÕÒµ½£¬Ö÷ÒªÓÉÒ»¸öÃûΪwinsock.hµÄÍ·ÎļþºÍ¶¯Ì¬Á¬½Ó¿âwinsock.dll»òwsodk32.dll×é³É£¬ÕâÁ½ÖÖ¶¯Ì¬Á¬½Ó¿â·Ö±ðÓÃÓÚWin16ºÍWin32µÄÓ¦ÓóÌÐò¡££¿
¡¡¡¡±¾ÎÄÕë¶Ô»°ÒôµÄȫ˫¹¤´«ÊäÒªÇ󣬲ÉÓÃUDPЭÒéʵÏÖÁËÊµÊ±ÍøÂçͨÐÅ¡£Ê¹ÓÃVisualC++2.0±àÒë»·¾³£¬Æä¶¯Ì¬Á¬½Ó¿âÃûΪwsock32.dll¡££¿

¶þ¡¢Ö÷Òªº¯ÊýµÄʹÓÃÒªµã£¿
¡¡¡¡Í¨¹ý½¨Á¢Ë«Ì×½Ó×Ö£¬¿ÉÒԺܷ½±ãµØÊµÏÖȫ˫¹¤ÍøÂçͨÐÅ¡££¿
¡¡¡¡1.Ì×½Ó×Ö½¨Á¢º¯Êý£º£¿
SOCKET socket(int family,int type,int protocol)£¿
¶ÔÓÚUDPЭÒ飬дΪ£º£¿
SOCKRET s;£¿
s=socket(AF_INET,SOCK_DGRAM,0);£¿
»òs=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)£¿
ΪÁ˽¨Á¢Á½¸öÌ×½Ó×Ö£¬±ØÐëʵÏÖµØÖ·µÄÖØ¸´°ó¶¨£¬¼´£¬µ±Ò»¸öÌ×½Ó×ÖÒѾ­°ó¶¨µ½Ä³±¾µØµØÖ·ºó£¬ÎªÁËÈÃÁíÒ»¸öÌ×½Ó×ÖÖØ¸´Ê¹ÓøõØÖ·£¬±ØÐëΪµ÷ÓÃbind()º¯Êý°ó¶¨µÚ¶þ¸öÌ×½Ó×Ö֮ǰ£¬Í¨¹ýº¯Êýsetsockopt()Ϊ¸ÃÌ×½Ó×ÖÉèÖÃSO_REUSEADDRÌ×½Ó×ÖÑ¡Ïͨ¹ýº¯Êýgetsockopt()¿É»ñµÃÌ×½Ó×ÖÑ¡ÏîÉèÖÃ״̬¡£ÐèҪעÒâµÄÊÇ£¬Á½¸öÌ×½Ó×ÖËù¶ÔÓ¦µÄ¶Ë¿ÚºÅ²»ÄÜÏàͬ¡££¿
´ËÍ⣬»¹Éæ¼°µ½Ì×½Ó×Ö»º³åÇøµÄÉèÖÃÎÊÌ⣬°´¹æ¶¨£¬Ã¿¸öÇøµÄÉèÖ÷¶Î§ÊÇ£º²»Ð¡ÓÚ512¸ö×Ö½Ú£¬´ó´óÓÚ8k×Ö½Ú£¬¸ù¾ÝÐèÒª£¬ÎÄÖÐÑ¡ÓÃÁË4k×Ö½Ú¡££¿

¡¡¡¡2.Ì×½Ó×ְ󶨺¯Êý£¿
¡¡¡¡int bind(SOCKET s,struct sockaddr_in*name,int namelen)£¿
sÊǸղŴ´½¨ºÃµÄÌ×½Ó×Ö£¬nameÖ¸ÏòÃèÊöͨѶ¶ÔÏóµÄ½ ÌåµÄÖ¸Õ룬namelenÊǸýṹÌåµÄ³¤¶È¡£¸Ã½á¹¹ÌåÖеķÖÁ¿°üÀ¨£ºIPµØÖ·(¶ÔÓ¦name.sin_addr.s_addr)¡¢¶Ë¿ÚºÅ(name.sin_port)¡¢µØÖ·ÀàÐÍ(name.sin_family£¬Ò»°ã¶¼¸³³ÉAF_INET£¬±íʾÊÇinternetµØÖ·)¡££¿
¡¡¡¡(1)IPµØÖ·µÄÌîд·½·¨£ºÔÚȫ˫¹¤Í¨ÐÅÖУ¬Òª°ÑÓû§Ãû¶ÔÓ¦µÄµã·Ö±íʾ·¨µØÖ·×ª»»³É32볤ÕûÊý¸ñʽµÄIPµØÖ·£¬Ê¹ÓÃinet_addr()º¯Êý¡££¿
(2)¶Ë¿ÚºÅÊÇÓÃÓÚ±íʾͬһ̨¼ÆËã»ú²»Í¬µÄ½ø³Ì(Ó¦ÓóÌÐò)£¬Æä·ÖÅä·½·¨ÓÐÁ½ÖÖ£º1)½ø³Ì¿ÉÒÔÈÃϵͳΪÌ×½Ó×Ö×Ô¶¯·ÖÅäÒ»¶Ë¿ÚºÅ£¬Ö»ÒªÔÚµ÷ÓÃbindǰ½«¶Ë¿ÚºÅÖ¸¶¨Îª0¼´¿É¡£ÓÉϵͳ×Ô¶¯·ÖÅäµÄ¶Ë¿ÚºÅλÓÚ1024~5000Ö®¼ä£¬¶ø1~1023Ö®¼äµÄÈÎÒ»TCP»òUDP¶Ë¿Ú¶¼ÊDZ£ÁôµÄ£¬ÏµÍ³²»ÔÊÐíÈÎÒ»½ø³ÌʹÓñ£Áô¶Ë¿Ú£¬³ý·ÇÆäÓÐЧÓû§IDÊÇÁã(³¬¼¶Óû§)¡££¿
¡¡¡¡(2)½ø³Ì¿ÉΪÌ×½Ó×ÖÖ¸¶¨Ò»Ìض¨¶Ë¿Ú¡£Õâ¶ÔÓÚÐèÒª¸øÌ×½Ó×Ö·ÖÅäÒ»ÖÚËù¶Ë¿ÚµÄ·þÎñÆ÷ÊǺÜÓÐÓõġ£Ö¸¶¨·¶Î§Îª1024ºÍ65536Ö®¼ä¡£¿ÉÈÎÒâÖ¸¶¨¡££¿
ÔÚ±¾³ÌÐòÖУ¬¶ÔÁ½¸öÌ×½Ó×ֵĶ˿ںŹ涨Ϊ2000ºÍ2001£¬Ç°Õß¶ÔÓ¦·¢ËÍÌ×½Ó×Ö£¬ºóÕß¶ÔÓ¦½ÓÊÕÌ×½Ó×Ö¡££¿
¶Ë¿ÚºÅÒª´ÓÒ»¸ö16λÎÞ·ûºÅÊý(u_shortÀàÐÍÊý)´ÓÖ÷»ú×Ö½Ú˳Ðòת»»³ÉÍøÂç×Ö½Ú˳Ðò£¬Ê¹ÓÃ
htons()º¯Êý¡££¿
¸ù¾ÝÒÔÉÏÁ½¸öº¯Êý£¬¿ÉÒÔ¸ø³öË«Ì×½Ó×Ö½¨Á¢Óë°ó¶¨µÄ³ÌÐòƬ¶Ï£»£¿
//ÉèÖÃÓйصÄÈ«¾Ö±äÁ¿£¿
SOCKET sr,ss;£¿
HPSTR sockBufferS,sockBufferR;£¿
HANDLE hSendData,hReceiveData;£¿
DWROD dwDataSize=1024*4;£¿
struct sockaddr_in therel.there2;£¿
#DEFINE LOCAL_HOST_ADDR 200.200.200.201£¿
#DEFINE REMOTE_HOST-ADDR 200.200.200.202£¿
#DEFINE LOCAL_HOST_PORT 2000£¿
#DEFINE LOCAL_HOST_PORT 2001£¿
//Ì×½Ó×Ö½¨Á¢º¯Êý£¿
BOOL make_skt(HWND hwnd)£¿
{£¿

struct sockaddr_in here,here1;£¿
ss=socket(AF_INET,SOCK_DGRAM,0);£¿
sr=socket(AF_INET,SOCK_DGRAM,0);£¿
if((ss==INVALID_SOCKET)||(sr==INVALID_SOCKET))£¿
{£¿

MessageBox(hwnd,¡°Ì×½Ó×Ö½¨Á¢Ê§°Ü!¡±£¬¡°¡±,MB_OK);£¿
return(FALSE);£¿

}£¿
here.sin_family=AF_INET;£¿
here.sin_addr.s_addr=inet_addr(LOCAL_HOST_ADDR);£¿
here.sin_port=htons(LICAL_HOST_PORT);£¿
//another socket£¿
herel.sin_family=AF_INET;£¿
herel.sin_addr.s_addr(LOCAL_HOST_ADDR);£¿
herel.sin_port=htons(LOCAL_HOST_PORT1);£¿
SocketBuffer();//Ì×½Ó×Ö»º³åÇøµÄËø¶¨ÉèÖã¿
setsockopt(ss,SOL_SOCKET,SO_SNDBUF,(char FAR*)sockBufferS,dwDataSize);
if(bind(ss,(LPSOCKADDR)&here,sizeof(here)))
{

MessageBox(hwnd,¡°·¢ËÍÌ×½Ó×Ö°ó¶¨Ê§°Ü!¡±£¬¡°¡±£¬MB_OK);
return(FALSE);

}
setsockopt(sr SQL_SOCKET,SO_RCVBUF|SO_REUSEADDR,(char FAR*)
sockBufferR,dwDataSize);
if(bind(sr,(LPSOCKADDR)&here1,sizeof(here1)))
{

MessageBox(hwnd,¡°½ÓÊÕÌ×½Ó×Ö°ó¶¨Ê§°Ü!¡±£¬¡°¡±£¬MB_OK);
return(FALSE);

}
return(TRUE);

}
//Ì×½Ó×Ö»º³åÇøÉèÖÃ
void sockBuffer(void)
{

hSendData=GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,dwDataSize);
if(!hSendData)
{

MessageBox(hwnd,¡°·¢ËÍÌ×½Ó×Ö»º³åÇø¶¨Î»Ê§°Ü!¡±£¬NULL,
MB_OK|MB_ICONEXCLAMATION);
return;

}
if((sockBufferS=GlobalLock(hSendData)==NULL)
{

MessageBox(hwnd,¡°·¢ËÍÌ×½Ó×Ö»º³åÇøËø¶¨Ê§°Ü!¡±£¬NULL,
MB_OK|MB_ICONEXCLAMATION);
GlobalFree(hRecordData[0];
return;

}
hReceiveData=globalAlloc(GMEM_MOVEABLE|GMEM_SHARE,dwDataSize);
if(!hReceiveData)
{

MessageBox(hwnd,"¡°½ÓÊÕÌ×½Ó×Ö»º³åÇø¶¨Î»°Ü!¡±£¬NULL
MB_OK|MB_ICONEXCLAMATION);
return;

}
if((sockBufferT=Globallock(hReceiveData))=NULL)
MessageBox(hwnd,"·¢ËÍÌ×½Ó×Ö»º³åÇøËø¶¨Ê§°Ü!¡±£¬NULL,
MB_OK|MB_ICONEXCLAMATION);
GlobalFree(hRecordData[0]);
return;

}

¡¡¡¡3.Êý¾Ý·¢ËÍÓë½ÓÊÕº¯Êý£»£¿

  • int sendto(SOCKET s.char*buf,int len,int flags,struct sockaddr_in to,int
    tolen);£¿

  • int recvfrom(SOCKET s.char*buf,int len,int flags,struct sockaddr_in
    fron,int*fromlen)ÆäÖУ¬²ÎÊýflagsÒ»°ãÈ¡0¡££¿

¡¡¡¡recvfrom()º¯Êýʵ¼ÊÉÏÊǶÁÈ¡sendto()º¯Êý·¢¹ýÀ´µÄÒ»¸öÊý¾Ý°ü£¬µ±¶Áµ½µÄÊý¾Ý×Ö½ÚÉÙÓڹ涨½ÓÊÕµÄÊýĿʱ£¬¾Í°ÑÊý¾ÝÈ«²¿½ÓÊÕ£¬²¢·µ»ØÊµ¼Ê½ÓÊÕµ½µÄ×Ö½ÚÊý£»µ±¶Áµ½µÄÊý¾Ý¶àÓڹ涨ֵʱ£¬ÔÚÊý¾Ý±¨ÎÄ·½Ê½Ï£¬¶àÓàµÄÊý¾Ý½«±»¶ªÆú¡£¶øÔÚÁ÷·½Ê½Ï£¬Ê£ÓàµÄÊý¾ÝÓÉÏÂrecvfrom()¶Á³ö¡£ÎªÁË·¢ËͺͽÓÊÕÊý¾Ý£¬±ØÐ뽨Á¢Êý¾Ý·¢ËÍ»º³åÇøºÍÊý¾Ý½ÓÊÕ»º³åÇø¡£¹æ¶¨£ºIP²ãµÄÒ»¸öÊý¾Ý±¨×î´ó²»³¬¹ý64K(º¬Êý¾Ý±¨Í·)¡£µ±»º³åÇøÉèÖõùý¶à¡¢¹ý´óʱ£¬³£ÒòÄÚ´æ²»¹»¶øµ¼ÖÂÌ×½Ó×Ö½¨Á¢Ê§°Ü¡£ÔÚ¼õС»º³åÇøºó£¬¸Ã´íÎóÏûʧ¡£¾­¹ýʵÑ飬ÎÄÖÐÑ¡ÓÃÁË4K×Ö½Ú¡££¿
´ËÍ⣬»¹Ó¦×¢ÒâÕâÁ½¸öº¯ÊýÖÐ×îºó²ÎÊýµÄд·¨£¬¸øsendto()µÄ×îºó²ÎÊýÊÇÒ»¸öÕûÊýÖµ£¬¶ørecvfrom()µÄÔòÊÇÖ¸ÏòÒ»ÕûÊýÖµµÄÖ¸Õë¡££¿
4.Ì×½Ó×ֹرպ¯Êý£ºclosesocket(SOCKET s)£¿
ͨѶ½áÊøÊ±£¬Ó¦¹Ø±ÕÖ¸¶¨µÄÌ×½Ó×Ö£¬ÒÔÊÍÓëÖ®Ïà¹ØµÄ×ÊÔ´¡££¿
ÔڹرÕÌ×½Ó×Öʱ£¬Ó¦ÏȶÔËø¶¨µÄ¸÷ÖÖ»º³åÇø¼ÓÒÔÊÍ·Å¡£Æä³ÌÐòƬ¶ÏΪ£º£¿
void CloseSocket(void)£¿
{£¿

GlobalUnlock(hSendData);£¿
GlobalFree(hSenddata);£¿
GlobalUnlock(hReceiveData);£¿
GlobalFree(hReceiveDava);£¿
if(WSAAysncSelect(ss,hwnd,0,0)=SOCKET_ERROR)£¿
{£¿

MessageBos(hwnd,¡°·¢ËÍÌ×½Ó×ֹرÕʧ°Ü!¡±£¬¡°¡±£¬MB_OK);£¿
return;£¿

}£¿
if(WSAAysncSelect(sr,hwnd,0,0)==SOCKET_ERROR)£¿
{£¿

MessageBox(hwnd,¡°½ÓÊÕÌ×½Ó×ֹرÕʧ°Ü!¡±£¬¡°¡±£¬MB_OK);£¿
return;£¿
}£¿
WSACleanup();£¿
closesockent(ss);£¿
closesockent(sr);£¿
return;£¿

}

£ý

¡¡¡¡Èý¡¢WinsockµÄ±à³ÌÌØµãÓëÒ첽ѡÔñ»úÖÆ£¿
¡¡¡¡1 ×èÈû¼°Æä´¦Àí·½Ê½£¿
¡¡¡¡ÔÚÍøÂçͨѶÖУ¬ÓÉÓÚÍøÂçÓµ¼·»òÒ»´Î·¢Ë͵ÄÊý¾ÝÁ¿¹ý´óµÈÔ­Òò£¬¾­³£»á·¢Éú½»»»µÄÊý¾ÝÔÚ¶Ìʱ¼äÄÚ²»ÄÜ´«ËÍÍ꣬ÊÕ·¢Êý¾ÝµÄº¯ÊýÒò´Ë²»ÄÜ·µ»Ø£¬ÕâÖÖÏÖÏó½Ð×ö×èÈû¡£Winsock¶ÔÓпÉÄÜ×èÈûµÄº¯ÊýÌṩÁËÁ½ÖÖ´¦Àí·½Ê½£º×èÈûºÍ·Ç×èÈû·½Ê½¡£ÔÚ×èÈû·½Ê½Ï£¬ÊÕ·¢Êý¾ÝµÄº¯ÊýÔÚ±»µ÷ÓúóÒ»Ö±Òªµ½´«ËÍÍê±Ï»òÕß³ö´í²ÅÄÜ·µ»Ø¡£ÔÚ×èÈûÆÚ¼ä£¬±»×èµÄº¯Êý²»»á¶Ïµ÷ÓÃϵͳº¯ÊýGetMessage()À´±£³ÖÏûϢѭ»·µÄÕý³£½øÐС£¶ÔÓÚ·Ç×èÈû·½Ê½£¬º¯Êý±»µ÷ÓúóÁ¢¼´·µ»Ø£¬µ±´«ËÍÍê³ÉºóÓÉWinsock¸ø³ÌÐò·¢Ò»¸öÊÂÏÈÔ¼¶¨ºÃµÄÏûÏ¢¡££¿
ÔÚ±à³Ìʱ£¬Ó¦¾¡Á¿Ê¹Ó÷Ç×èÈû·½Ê½¡£ÒòΪÔÚ×èÈû·½Ê½Ï£¬Óû§¿ÉÄ᳤ܻʱ¼äµÄµÈ´ý¹ý³ÌÖÐÊÔͼ¹Ø±Õ³ÌÐò£¬ÒòΪÏûϢѭ»·»¹ÔÚÆð×÷Óã¬ËùÒÔ³ÌÐòµÄ´°¿Ú¿ÉÄܱ»¹Ø±Õ£¬ÕâÑùµ±º¯Êý´ÓWinsockµÄ¶¯Ì¬Á¬½Ó¿âÖзµ»ØÊ±£¬Ö÷³ÌÐòÒѾ­´ÓÄÚ´æÖÐɾ³ý£¬ÕâÏÔÈ»ÊǼ«ÆäΣÏյġ££¿

¡¡¡¡2 Ò첽ѡÔñº¯ÊýWSAAsyncSelect()µÄʹÓã¿
¡¡¡¡Winsockͨ¹ýWSAAsyncSelect()×Ô¶¯µØÉèÖÃÌ×½Ó×Ö´¦ÓÚ·Ç×èÈû·½Ê½¡£Ê¹ÓÃWindows SocketsʵÏÖWindowsÍøÂç³ÌÐòÉè¼ÆµÄ¹Ø¼ü¾ÍÊÇËüÌṩÁ˶ÔÍøÂçʼþ»ùÓÚÏûÏ¢µÄÒì²½´æÈ¡£¬ÓÃÓÚ×¢²áÓ¦ÓóÌÐò¸ÐÐËȤµÄÍøÂçʼþ¡£ËüÇëÇóWindows Sockets DLLÔÚ¼ì²âµ½Ì×½Ó×ÖÉÏ·¢ÉúµÄÍøÂçʼþʱ£¬Ïò´°¿Ú·¢ËÍÒ»¸öÏûÏ¢¡£¶ÔUDPЭÒ飬ÕâÐ©ÍøÂçʼþÖ÷ҪΪ£º£¿

  • FD_READ ÆÚÍûÔÚÌ×½Ó×ÖÊÕµ½Êý¾Ý(¼´¶Á×¼±¸ºÃ)ʱ½ÓÊÕ֪ͨ£»£¿
  • FD_WRITE ÆÚÍûÔÚÌ×½Ó×Ö¿É·¢ËÍÊý(¼´Ð´×¼±¸ºÃ)ʱ½ÓÊÕ֪ͨ£»£¿
  • FD_CLOSE ÆÚÍûÔÚÌ×½Ó×ֹرÕʱ½Óµç֪ͨ£¿

¡¡¡¡ÏûÏ¢±äÁ¿wParamָʾ·¢ÉúÍøÂçʼþµÄÌ×½Ó×Ö£¬±äÁ¿1ParamµÄµÍ×Ö½ÚÃèÊö·¢ÉúµÄÍøÂçʼþ£¬¸ß×Ö°üº¬´íÎóÂë¡£ÈçÔÚ´°¿Úº¯ÊýµÄÏûϢѭ»·Öоù¼ÓÒ»¸ö·ÖÖ§£º£¿
int ok=sizeof(SOCKADDR);£¿
case wMsg;£¿
switch(1Param)£¿
{£¿

case FD_READ:£¿
//Ì×½Ó×ÖÉ϶ÁÊý¾Ý£¿
if(recvfrom(sr.lpPlayData[j],dwDataSize,0,(struct sockaddr FAR*)&there1,
£¿
(int FAR*)&ok)==SOCKET_ERROR0£¿
{£¿

MessageBox)hwnd,¡°Êý¾Ý½ÓÊÕʧ°Ü!¡±£¬¡°¡±£¬MB_OK);£¿
return(FALSE);£¿

}£¿
case FD_WRITE:£¿
//Ì×½Ó×ÖÉÏдÊý¾Ý£¿

}£¿
break£»£¿
¡¡¡¡ÔÚ³ÌÐòµÄ±àÖÆÖУ¬Ó¦¸ù¾ÝÐèÒªÁé»îµØ½«WSAAsyncSelect()º¯ÁéÃô·ÅÔÚÏàÓ¦µÄÏûϢѭ»·Ö®ÖУ¬ÆäËü˵Ã÷¿É²Î¼ûÎÄÏ×[1]¡£´ËÍ⣬Ӧ¸ÃÖ¸³öµÄÊÇ£¬ÒÔÉϳÌÐòƬ¶ÏÖеÄÏûÏ¢¿òÖ÷ÒªÊÇΪ³ÌÐòµ÷ÊÔ·½±ã¶øÉèÖõ쬶øÔÚÕýʽ²úÆ·Öв»ÔÙ³öÏÖ¡£Í¬Ê±£¬°´ÕÕ³ÌÐòÈÝ´íÎóÉè¼Æ£¬Ó¦½¨Á¢Ò»¸öרÃŵÄÈÝ´í´¦Àíº¯Êý¡£³ÌÐòÖпÉÄܳöÏֵĸ÷ÖÖ´íÎó¶¼½«Óɸú¯Êý½øÐд¦Àí£¬ÒÀ¾Ý´íÎóµÄΣº¦³Ì¶È²»Í¬£¬½¨Á¢¼¸ÖÖ²»Í¬µÄ´¦Àí´ëÊ©¡£ÕâÑù£¬²ÅÄܱ£Ö¤Ë«·½Í¨»°µÄ˳ÀûºÍ¿É¿¿¡££¿

ËÄ¡¢½áÂÛ£¿
¡¡¡¡±¾ÎÄÊǶàýÌåÍøÂç´«ÊäÏîÄ¿µÄÖØÒªÄÚÈÝÖ®Ò»£¬Ä¿Ç°£¬½áºÏÓ²¼þȫ˫¹¤ÓïÒô¿¨µÈÉ豸£¬ÒѾ­³É¹¦µØÊµÏÖÁË»°ÒôµÄȫ˫¹¤µÄͨÐÅ¡£ÓйØÕû¸ö¶àýÌå´«ÊäϵͳÉè¼ÆµÄÄÚÈÝ£¬½«ÓÐÁíÎÄÐðÊö¡£
£¿
²Î¿¼ÎÄÏ×£¿
1 ½¯¶«ÐË£¬ÁÖ¶õ»ªWindows SocketsÍøÂç³ÌÐòÉè¼ÆÖ¸ÄÏ¡£Ç廪´óѧ³ö°æÉç¡£1995,12
2 ףСº² Winsock±à³Ì³õ²½£¬Î¢µçÄÔÊÀ½ç£¬1996,(8):54~60



¡¾·¢±íÆÀÂÛ¡¿¡¾¹Ø±Õ´°¿Ú¡¿


.ÖйúÆô¶¯µÚÈý´úÒÆ¶¯Í¨ÐÅÍø