锘??xml version="1.0" encoding="utf-8" standalone="yes"?>女女同性精品视频,国产一区二区三区日韩,国产日韩精品在线http://www.shnenglu.com/mmdengwo/category/16586.htmlzh-cnThu, 19 May 2011 23:53:33 GMTThu, 19 May 2011 23:53:33 GMT60灝佸寘鍜屾媶鍖?http://www.shnenglu.com/mmdengwo/archive/2011/05/13/146310.html娌涙矝娌涙矝Fri, 13 May 2011 05:26:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2011/05/13/146310.htmlhttp://www.shnenglu.com/mmdengwo/comments/146310.htmlhttp://www.shnenglu.com/mmdengwo/archive/2011/05/13/146310.html#Feedback1http://www.shnenglu.com/mmdengwo/comments/commentRss/146310.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/146310.html闃呰鍏ㄦ枃

娌涙矝 2011-05-13 13:26 鍙戣〃璇勮
]]>
WinSock瀛︿範(fàn)絎旇 http://www.shnenglu.com/mmdengwo/archive/2011/05/03/145571.html娌涙矝娌涙矝Tue, 03 May 2011 07:44:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2011/05/03/145571.htmlhttp://www.shnenglu.com/mmdengwo/comments/145571.htmlhttp://www.shnenglu.com/mmdengwo/archive/2011/05/03/145571.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/145571.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/145571.html int WSAGetLastError(void ); #define h_errno WSAGetLastError() 閿欒鍊艱鑷繁闃呰Winsock2.h銆?br>
2銆佸皢涓繪満鐨剈nsigned long鍊艱漿鎹負(fù)緗戠粶瀛楄妭欏哄簭(32浣?錛氫負(fù)浠涔堣榪欐牱鍋氬憿錛熷洜涓轟笉鍚岀殑璁$畻鏈轟嬌鐢ㄤ笉鍚岀殑瀛楄妭欏哄簭瀛樺偍鏁版嵁銆傚洜姝や換浣曚粠Winsock鍑芥暟瀵笽P鍦板潃鍜岀鍙e彿鐨勫紩鐢ㄥ拰浼犵粰Winsock鍑芥暟鐨処P鍦板潃鍜岀鍙e彿鍧囨椂鎸夌収緗戠粶欏哄簭緇勭粐鐨勩?br>
      u_long  htonl(u_long hostlong);
涓句緥錛歨tonl(0)=0
htonl(80)= 1342177280
3銆佸皢unsigned long鏁頒粠緗戠粶瀛楄妭欏哄簭杞崲浣嶄富鏈哄瓧鑺傞『搴忥紝鏄笂闈㈠嚱鏁扮殑閫嗗嚱鏁般?
      u_long  ntohl(u_long netlong);
涓句緥錛歯tohl(0)=0
ntohl(1342177280)= 80
4銆佸皢涓繪満鐨剈nsigned short鍊艱漿鎹負(fù)緗戠粶瀛楄妭欏哄簭(16浣?錛氬師鍥犲悓2錛?
      u_short  htons(u_short hostshort);
涓句緥錛歨tonl(0)=0
htonl(80)= 20480
5銆佸皢unsigned short鏁頒粠緗戠粶瀛楄妭欏哄簭杞崲浣嶄富鏈哄瓧鑺傞『搴忥紝鏄笂闈㈠嚱鏁扮殑閫嗗嚱鏁般?
      u_short  ntohs(u_short netshort);
涓句緥錛歯tohs(0)=0
ntohsl(20480)= 80
6銆佸皢鐢ㄧ偣鍒嗗壊鐨処P鍦板潃杞崲浣嶄竴涓猧n_addr緇撴瀯鐨勫湴鍧錛岃繖涓粨鏋勭殑瀹氫箟瑙佺瑪璁?涓)錛屽疄闄呬笂灝辨槸涓涓猽nsigned long鍊箋傝綆楁満鍐呴儴澶勭悊IP鍦板潃鍙槸涓嶈璇嗗192.1.8.84涔嬬被鐨勬暟鎹?
      unsigned long  inet_addr( const char FAR * cp );
涓句緥錛歩net_addr("192.1.8.84")=1409810880
inet_addr("127.0.0.1")= 16777343
濡傛灉鍙戠敓閿欒錛屽嚱鏁拌繑鍥濱NADDR_NONE鍊箋?br>
7銆佸皢緗戠粶鍦板潃杞崲浣嶇敤鐐瑰垎鍓茬殑IP鍦板潃錛屾槸涓婇潰鍑芥暟鐨勯嗗嚱鏁般?
      char FAR *  inet_ntoa( struct in_addr in );
涓句緥錛歝har * ipaddr=NULL;
char addr[20];
in_addr inaddr;
inaddr. s_addr=16777343;
ipaddr= inet_ntoa(inaddr);
strcpy(addr,ipaddr); 
榪欐牱addr鐨勫煎氨鍙樹(shù)負(fù)127.0.0.1銆?br>娉ㄦ剰鎰忎笉瑕佷慨鏀硅繑鍥炲兼垨鑰呰繘琛岄噴鏀懼姩浣溿傚鏋滃嚱鏁板け璐ュ氨浼?xì)杩斿洖NULL鍊箋?br>
8銆佽幏鍙栧鎺ュ瓧鐨勬湰鍦板湴鍧緇撴瀯錛?
      int  getsockname(SOCKET s, struct sockaddr FAR * name, int FAR * namelen );
s涓哄鎺ュ瓧
name涓哄嚱鏁拌皟鐢ㄥ悗鑾峰緱鐨勫湴鍧鍊?
namelen涓虹紦鍐插尯鐨勫ぇ灝忋?
9銆佽幏鍙栦笌濂楁帴瀛楃浉榪炵殑绔湴鍧緇撴瀯錛?br>
      int  getpeername(SOCKET s, struct sockaddr FAR * name, int FAR * namelen );
s涓哄鎺ュ瓧
name涓哄嚱鏁拌皟鐢ㄥ悗鑾峰緱鐨勭鍦板潃鍊?
namelen涓虹紦鍐插尯鐨勫ぇ灝忋?
10銆佽幏鍙栬綆楁満鍚嶏細(xì)
      int  gethostname( char FAR * name, int namelen );
name鏄瓨鏀捐綆楁満鍚嶇殑緙撳啿鍖?
namelen鏄紦鍐插尯鐨勫ぇ灝?
鐢ㄦ硶錛?
char szName[255];
memset(szName,0,255);
if(gethostname(szName,255)==SOCKET_ERROR)
{
//閿欒澶勭悊
}
榪斿洖鍊間負(fù)錛歴zNmae="xiaojin"
11銆佹牴鎹綆楁満鍚嶈幏鍙栦富鏈哄湴鍧錛?
      struct hostent FAR *  gethostbyname( const char FAR * name );
name涓鴻綆楁満鍚嶃?
鐢ㄦ硶錛?
hostent * host;
char* ip;
host= gethostbyname("xiaojin");
if(host->h_addr_list[0])
{
struct in_addr addr;
memmove(&addr, host->h_addr_list[0]錛?);
//鑾峰緱鏍囧噯IP鍦板潃
ip=inet_ ntoa (addr);
}
榪斿洖鍊間負(fù)錛歨ostent->h_name="xiaojin"
hostent->h_addrtype=2    //AF_INET
hostent->length=4
ip="127.0.0.1"
Winsock 鐨処/O鎿嶄綔錛?/strong>

1銆?涓ょI/O妯″紡
  • 闃誨妯″紡錛氭墽琛孖/O鎿嶄綔瀹屾垚鍓嶄細(xì)涓鐩磋繘琛岀瓑寰咃紝涓嶄細(xì)灝嗘帶鍒舵潈浜ょ粰紼嬪簭銆傚鎺ュ瓧 榛樿涓洪樆濉炴ā寮忋傚彲浠ラ氳繃澶氱嚎紼嬫妧鏈繘琛屽鐞嗐?
  • 闈為樆濉炴ā寮忥細(xì)鎵цI/O鎿嶄綔鏃訛紝W(xué)insock鍑芥暟浼?xì)杩斿洖迤堜氦鍑烘帶鍒舵潈銆傝繖縐嶆ā寮忎嬌鐢?璧鋒潵姣旇緝澶嶆潅錛屽洜涓哄嚱鏁板湪娌℃湁榪愯瀹屾垚灝辮繘琛岃繑鍥烇紝浼?xì)涓嶆柇鍦皹q斿洖 WSAEWOULDBLOCK閿欒銆備絾鍔熻兘寮哄ぇ銆?
涓轟簡(jiǎn)瑙e喅榪欎釜闂錛屾彁鍑轟簡(jiǎn)榪涜I/O鎿嶄綔鐨勪竴浜汭/O妯″瀷,涓嬮潰浠嬬粛鏈甯歌鐨勪笁縐嶏細(xì)

2銆乻elect妯″瀷錛?br>
銆銆閫氳繃璋冪敤select鍑芥暟鍙互紜畾涓涓垨澶氫釜濂楁帴瀛楃殑鐘舵侊紝鍒ゆ柇濂楁帴瀛椾笂鏄惁鏈夋暟鎹紝鎴?br>鑰呰兘鍚﹀悜涓涓鎺ュ瓧鍐欏叆鏁版嵁銆?
      int  select( int nfds, fd_set FAR * readfds, fd_set FAR * writefds, 
fd_set FAR *exceptfds, const struct timeval FAR * timeout );
鈼嗗厛鏉ョ湅鐪嬫秹鍙?qiáng)鍒扮殑缁撴瀯鐨勫畾涔夊Q?br>a銆?d_set緇撴瀯錛?br>
#define FD_SETSIZE 64?
typedef struct fd_set {
u_int fd_count; /* how many are SET? */
SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
} fd_set;      
fd_count涓哄凡璁懼畾socket鐨勬暟閲?br>fd_array涓簊ocket鍒楄〃錛孎D_SETSIZE涓烘渶澶ocket鏁伴噺錛屽緩璁笉灝忎簬64銆傝繖鏄井杞緩
璁殑銆?br>
B銆乼imeval緇撴瀯錛?
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
tv_sec涓烘椂闂寸殑縐掑箋?br>tv_usec涓烘椂闂寸殑姣鍊箋?br>榪欎釜緇撴瀯涓昏鏄緗畇elect()鍑芥暟鐨勭瓑寰呭鹼紝濡傛灉灝嗚緇撴瀯璁劇疆涓?0,0)錛屽垯select()鍑芥暟
浼?xì)绔嬪崒櫩斿洖銆?br>
鈼嗗啀鏉ョ湅鐪媠elect鍑芥暟鍚勫弬鏁扮殑浣滅敤錛?
  1. nfds錛氭病鏈変換浣曠敤澶勶紝涓昏鐢ㄦ潵榪涜緋葷粺鍏煎鐢紝涓鑸緗負(fù)0銆?br>
  2. readfds錛氱瓑寰呭彲璇繪ф鏌ョ殑濂楁帴瀛楃粍銆?br>
  3. writefds錛涚瓑寰呭彲鍐欐ф鏌ョ殑濂楁帴瀛楃粍銆?br>
  4. exceptfds錛氱瓑寰呴敊璇鏌ョ殑濂楁帴瀛楃粍銆?br>
  5. timeout錛氳秴鏃舵椂闂淬?br>
  6. 鍑芥暟澶辮觸鐨勮繑鍥炲鹼細(xì)璋冪敤澶辮觸榪斿洖SOCKET_ERROR,瓚呮椂榪斿洖0銆?
readfds銆亀ritefds銆乪xceptfds涓変釜鍙橀噺鑷沖皯鏈変竴涓笉涓虹┖錛屽悓鏃惰繖涓笉涓虹┖鐨勫鎺ュ瓧緇?br>縐嶈嚦灝戞湁涓涓猻ocket錛岄亾鐞嗗緢綆鍗曪紝鍚﹀垯瑕乻elect騫蹭粈涔堝憿銆?涓句緥錛氭祴璇曚竴涓鎺ュ瓧鏄惁鍙錛?
fd_set fdread;
//FD_ZERO瀹氫箟
// #define FD_ZERO(set) (((fd_set FAR *)(set))->fd_count=0)
FD_ZERO(&fdread);
FD_SET(s,&fdread)錛?//鍔犲叆濂楁帴瀛楋紝璇︾粏瀹氫箟璇風(fēng)湅winsock2.h
if(select(0,%fdread,NULL,NULL,NULL)>0
{
//鎴愬姛
if(FD_ISSET(s,&fread) //鏄惁瀛樺湪fread涓紝璇︾粏瀹氫箟璇風(fēng)湅winsock2.h
{
//鏄彲璇葷殑
}
}

鈼咺/O鎿嶄綔鍑芥暟錛氫富瑕佺敤浜庤幏鍙栦笌濂楁帴瀛楃浉鍏崇殑鎿嶄綔鍙傛暟銆?

 int  ioctlsocket(SOCKET s, long cmd, u_long FAR * argp );     
s涓篒/O鎿嶄綔鐨勫鎺ュ瓧銆?br>cmd涓哄濂楁帴瀛楃殑鎿嶄綔鍛戒護(hù)銆?br>argp涓哄懡浠ゆ墍甯﹀弬鏁扮殑鎸囬拡銆?br>
甯歌鐨勫懡浠わ細(xì)
//紜畾濂楁帴瀛楄嚜鍔ㄨ鍏ョ殑鏁版嵁閲?
#define FIONREAD _IOR(''''f'''', 127, u_long) /* get # bytes to read */
//鍏佽鎴栫姝㈠鎺ュ瓧鐨勯潪闃誨妯″紡錛屽厑璁鎬負(fù)闈?錛岀姝負(fù)0
#define FIONBIO _IOW(''''f'''', 126, u_long) /* set/clear non-blocking i/o */
//紜畾鏄惁鎵鏈夊甫澶栨暟鎹兘宸茶璇誨叆
#define SIOCATMARK _IOR(''''s'''', 7, u_long) /* at oob mark? */
3銆乄SAAsynSelect妯″瀷錛?br>WSAAsynSelect妯″瀷涔熸槸涓涓父鐢ㄧ殑寮傛I/O妯″瀷銆傚簲鐢ㄧ▼搴忓彲浠ュ湪涓涓鎺ュ瓧涓婃帴鏀朵互
WINDOWS娑堟伅涓哄熀紜鐨勭綉緇滀簨浠墮氱煡銆傝妯″瀷鐨勫疄鐜版柟娉曟槸閫氳繃璋冪敤WSAAsynSelect鍑?br>鏁?鑷姩灝嗗鎺ュ瓧璁劇疆涓洪潪闃誨妯″紡錛屽茍鍚慦INDOWS娉ㄥ唽涓涓垨澶氫釜緗戠粶鏃墮棿錛屽茍鎻愪緵涓
涓氱煡鏃朵嬌鐢ㄧ殑紿楀彛鍙ユ焺銆傚綋娉ㄥ唽鐨勪簨浠跺彂鐢熸椂錛屽搴旂殑紿楀彛灝嗘敹鍒頒竴涓熀浜庢秷鎭殑閫氱煡銆?br>
      int  WSAAsyncSelect( SOCKET s, HWND hWnd, u_int wMsg, long lEvent);       
s涓洪渶瑕佷簨浠墮氱煡鐨勫鎺ュ瓧
hWnd涓烘帴鏀舵秷鎭殑紿楀彛鍙ユ焺
wMsg涓鴻鎺ユ敹鐨勬秷鎭?br>lEvent涓烘帺鐮侊紝鎸囧畾搴旂敤紼嬪簭鎰熷叴瓚g殑緗戠粶浜嬩歡緇勫悎錛屼富瑕佸涓嬶細(xì)
#define FD_READ_BIT 0
#define FD_READ (1 << FD_READ_BIT)
#define FD_WRITE_BIT 1
#define FD_WRITE (1 << FD_WRITE_BIT)
#define FD_OOB_BIT 2
#define FD_OOB (1 << FD_OOB_BIT)
#define FD_ACCEPT_BIT 3
#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
#define FD_CONNECT_BIT 4
#define FD_CONNECT (1 << FD_CONNECT_BIT)
#define FD_CLOSE_BIT 5
#define FD_CLOSE (1 << FD_CLOSE_BIT)
鐢ㄦ硶錛氳鎺ユ敹璇誨啓閫氱煡錛?
int nResult= WSAAsyncSelect(s,hWnd,wMsg,FD_READ|FD_WRITE)錛?
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}
鍙栨秷閫氱煡錛?br>
      int nResult= WSAAsyncSelect(s,hWnd,0錛?)錛?
褰撳簲鐢ㄧ▼搴忕獥鍙Wnd鏀跺埌娑堟伅鏃訛紝wMsg.wParam鍙傛暟鏍囪瘑浜?jiǎn)濂楁帴瀛楀Q宭Param鐨勪綆瀛楁爣鏄?br>浜?jiǎn)缃懢l滀簨浠訛紝楂樺瓧鍒欏寘鍚敊璇唬鐮併?br>
4銆乄SAEventSelect妯″瀷
WSAEventSelect妯″瀷綾諱技WSAAsynSelect妯″瀷錛屼絾鏈涓昏鐨勫尯鍒槸緗戠粶浜嬩歡鍙戠敓鏃朵細(xì)琚彂
閫佸埌涓涓簨浠跺璞″彞鏌勶紝鑰屼笉鏄彂閫佸埌涓涓獥鍙c?br>
浣跨敤姝ラ濡備笅錛?br>a銆?鍒涘緩浜嬩歡瀵硅薄鏉ユ帴鏀剁綉緇滀簨浠訛細(xì)
#define WSAEVENT HANDLE
#define LPWSAEVENT LPHANDLE
WSAEVENT WSACreateEvent( void );
璇ュ嚱鏁扮殑榪斿洖鍊間負(fù)涓涓簨浠跺璞″彞鏌勶紝瀹冨叿鏈変袱縐嶅伐浣滅姸鎬侊細(xì)宸蹭紶淇?signaled)鍜屾湭浼犱俊
(nonsignaled)浠ュ強(qiáng)涓ょ宸ヤ綔妯″紡錛氫漢宸ラ噸璁?manual reset)鍜岃嚜鍔ㄩ噸璁?auto reset)銆傞粯璁ゆ湭
鏈紶淇$殑宸ヤ綔鐘舵佸拰浜哄伐閲嶈妯″紡銆?br>
b銆佸皢浜嬩歡瀵硅薄涓庡鎺ュ瓧鍏寵仈錛屽悓鏃舵敞鍐屼簨浠訛紝浣夸簨浠跺璞$殑宸ヤ綔鐘舵佷粠鏈紶淇¤漿鍙樻湭
宸蹭紶淇°?br>
      int  WSAEventSelect( SOCKET s,WSAEVENT hEventObject,long lNetworkEvents );  
s涓哄鎺ュ瓧
hEventObject涓哄垰鎵嶅垱寤虹殑浜嬩歡瀵硅薄鍙ユ焺
lNetworkEvents涓烘帺鐮侊紝瀹氫箟濡備笂闈㈡墍榪?br>
c銆両/O澶勭悊鍚庯紝璁劇疆浜嬩歡瀵硅薄涓烘湭浼犱俊
BOOL WSAResetEvent( WSAEVENT hEvent );

Hevent涓轟簨浠跺璞?br>
鎴愬姛榪斿洖TRUE錛屽け璐ヨ繑鍥濬ALSE銆?br>
d銆佺瓑寰呯綉緇滀簨浠舵潵瑙﹀彂浜嬩歡鍙ユ焺鐨勫伐浣滅姸鎬侊細(xì)

DWORD WSAWaitForMultipleEvents( DWORD cEvents,
const WSAEVENT FAR * lphEvents, BOOL fWaitAll,
DWORD dwTimeout, BOOL fAlertable );

lpEvent涓轟簨浠跺彞鏌勬暟緇勭殑鎸囬拡
cEvent涓轟負(fù)浜嬩歡鍙ユ焺鐨勬暟鐩紝鍏舵渶澶у間負(fù)WSA_MAXIMUM_WAIT_EVENTS 
fWaitAll鎸囧畾絳夊緟綾誨瀷錛歍RUE錛氬綋lphEvent鏁扮粍閲嶆墍鏈変簨浠跺璞″悓鏃舵湁淇″彿鏃惰繑鍥烇紱
FALSE錛氫換涓浜嬩歡鏈変俊鍙峰氨榪斿洖銆?br>dwTimeout涓虹瓑寰呰秴鏃訛紙姣錛?br>fAlertable涓烘寚瀹氬嚱鏁拌繑鍥炴椂鏄惁鎵ц瀹屾垚渚嬬▼

瀵逛簨浠舵暟緇勪腑鐨勪簨浠惰繘琛屽紩鐢ㄦ椂錛屽簲璇ョ敤WSAWaitForMultipleEvents鐨勮繑鍥炲鹼紝鍑忓幓
棰勫0鏄庡糤SA_WAIT_EVENT_0錛屽緱鍒板叿浣撶殑寮曠敤鍊箋備緥濡傦細(xì)

nIndex=WSAWaitForMultipleEvents(…);
MyEvent=EventArray[Index- WSA_WAIT_EVENT_0];

e銆佸垽鏂綉緇滀簨浠剁被鍨嬶細(xì)

int WSAEnumNetworkEvents( SOCKET s,
WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents );

s涓哄鎺ュ瓧
hEventObject涓洪渶瑕侀噸璁劇殑浜嬩歡瀵硅薄
lpNetworkEvents涓鴻褰曠綉緇滀簨浠跺拰閿欒浠g爜錛屽叾緇撴瀯瀹氫箟濡備笅錛?/p>

typedef struct _WSANETWORKEVENTS {
long lNetworkEvents;
int iErrorCode[FD_MAX_EVENTS];
} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;

f銆佸叧闂簨浠跺璞″彞鏌勶細(xì)

BOOL WSACloseEvent(WSAEVENT hEvent);

璋冪敤鎴愬姛榪斿洖TRUE錛屽惁鍒欒繑鍥濬ALSE銆?br>



娌涙矝 2011-05-03 15:44 鍙戣〃璇勮
]]>
Socket 緙栫▼http://www.shnenglu.com/mmdengwo/archive/2011/04/29/145307.html娌涙矝娌涙矝Fri, 29 Apr 2011 03:18:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2011/04/29/145307.htmlhttp://www.shnenglu.com/mmdengwo/comments/145307.htmlhttp://www.shnenglu.com/mmdengwo/archive/2011/04/29/145307.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/145307.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/145307.htmlSocket錛堝鎺ュ瓧錛?/p>

鈼嗗厛鐪嬪畾涔夛細(xì)
typedef unsigned int u_int;
typedef u_int SOCKET;鈼哠ocket鐩稿綋浜庤繘琛岀綉緇滈氫俊涓ょ鐨勬彃搴э紝鍙瀵規(guī)柟鐨凷ocket鍜岃嚜宸辯殑Socket鏈夐氫俊鑱旀帴錛屽弻鏂瑰氨鍙互鍙戦佸拰鎺ユ敹鏁版嵁浜?jiǎn)銆傚叾瀹氫箟綾諱技浜庢枃浠跺彞鏌勭殑瀹氫箟銆?/p>

鈼哠ocket鏈変簲縐嶄笉鍚岀殑綾誨瀷錛?/p>

1銆佹祦寮忓鎺ュ瓧(stream socket)
瀹氫箟錛?/p>

#define SOCK_STREAM 1 嫻佸紡濂楁帴瀛楁彁渚涗簡(jiǎn)鍙屽悜銆佹湁搴忕殑銆佹棤閲嶅鐨勪互鍙?qiáng)鏃犺褰曡竟鐣岀殑鏁版嵁娴佹湇鍔″Q岄傚悎澶勭悊澶ч噺鏁版嵁銆傚畠鏄潰鍚戣仈緇撶殑錛屽繀欏誨緩绔嬫暟鎹紶杈撻摼璺紝鍚屾椂榪樺繀欏誨浼犺緭鐨勬暟鎹繘琛岄獙璇侊紝紜繚鏁版嵁鐨勫噯紜с傚洜姝わ紝緋葷粺寮閿杈冨ぇ銆?/p>

2銆?鏁版嵁鎶ュ鎺ュ瓧(datagram socket)

瀹氫箟錛?/p>

#define SOCK_DGRAM 2 鏁版嵁鎶ュ鎺ュ瓧涔熸敮鎸佸弻鍚戠殑鏁版嵁?huà)箒锛屼絾涓嶄繚璇佷紶杈撴暟鎹殑鍑喖嫯鎬э紝浣嗕繚鐣欎簡(jiǎn)璁板綍杈圭晫銆傜敱浜庢暟鎹姤濂楁帴瀛楁槸鏃犺仈鎺ョ殑錛屼緥濡傚箍鎾椂鐨勮仈鎺ワ紝鎵浠ュ茍涓嶄繚璇佹帴鏀剁鏄惁姝e湪渚﹀惉銆傛暟鎹姤濂楁帴瀛椾紶杈撴晥鐜囨瘮杈冮珮銆?/p>

3銆佸師濮嬪鎺ュ瓧(raw-protocol interface)

瀹氫箟錛?/p>

#define SOCK_RAW 3 鍘熷濂楁帴瀛椾繚瀛樹(shù)簡(jiǎn)鏁版嵁鍖呬腑鐨勫畬鏁碔P澶達(dá)紝鍓嶉潰涓ょ濂楁帴瀛楀彧鑳芥敹鍒扮敤鎴鋒暟鎹傚洜姝ゅ彲浠ラ氳繃鍘熷濂楁帴瀛楀鏁版嵁榪涜鍒嗘瀽銆?br>鍏跺畠涓ょ濂楁帴瀛椾笉甯哥敤錛岃繖閲屽氨涓嶄粙緇嶄簡(jiǎn)銆?/p>

鈼哠ocket寮鍙戞墍蹇呴』闇瑕佺殑鏂囦歡(浠inSock V2.0涓轟緥)錛?/p>

澶存枃浠訛細(xì)Winsock2.h

搴撴枃浠訛細(xì)WS2_32.LIB

鍔ㄦ佸簱錛歐32_32.DLL

 涓浜涢噸瑕佺殑瀹氫箟

1銆佹暟鎹被鍨嬬殑鍩烘湰瀹氫箟錛氳繖涓ぇ瀹朵竴鐪嬪氨鎳傘?/p>

typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;2銆?緗戠粶鍦板潃鐨勬暟鎹粨鏋勶紝鏈変竴涓佺殑鍜屼竴涓柊鐨勭殑錛岃澶у鐣欐剰錛屽鏋滄兂鐭ラ亾涓轟粈涔堬紝
璇峰彂閭歡緇橞ill Gate銆傚叾瀹炲氨鏄綆楁満鐨処P鍦板潃錛屼笉榪囦竴鑸笉鐢ㄧ敤鐐瑰垎寮鐨処P鍦?br>鍧錛屽綋鐒朵篃鎻愪緵涓浜涜漿鎹㈠嚱鏁般?/p>

鈼?鏃х殑緗戠粶鍦板潃緇撴瀯鐨勫畾涔夛紝涓轟竴涓?瀛楄妭鐨勮仈鍚堬細(xì)

struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
#define s_addr S_un.S_addr /* can be used for most tcp & ip code */
//涓嬮潰鍑犺鐪佺暐,鍙嶆娌′粈涔堢敤澶勩?br>};鍏跺疄瀹屽叏涓嶇敤榪欎箞楹葷儲(chǔ)錛岃鐪嬩笅闈?

鈼?鏂扮殑緗戠粶鍦板潃緇撴瀯鐨勫畾涔夛細(xì)
闈炲父綆鍗曪紝灝辨槸涓涓棤絎﹀彿闀挎暣鏁?unsigned long銆備婦涓緥瀛愶細(xì)IP鍦板潃涓?27.0.0.1鐨勭綉緇滃湴鍧鏄粈涔堝憿錛熻鐪嬪畾涔夛細(xì)

#define INADDR_LOOPBACK 0x7f0000013銆?濂楁帴瀛楀湴鍧緇撴瀯

(1)銆乻ockaddr緇撴瀯錛?/p>

struct sockaddr {
u_short sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};sa_family涓虹綉緇滃湴鍧綾誨瀷錛屼竴鑸負(fù)AF_INET錛岃〃紺鴻socket鍦↖nternet鍩熶腑榪涜閫氫俊錛岃鍦板潃緇撴瀯闅忛夋嫨鐨勫崗璁殑涓嶅悓鑰屽彉鍖栵紝鍥犳涓鑸儏鍐典笅鍙︿竴涓笌璇ュ湴鍧緇撴瀯澶у皬鐩稿悓鐨剆ockaddr_in緇撴瀯鏇翠負(fù)甯哥敤錛宻ockaddr_in緇撴瀯鐢ㄦ潵鏍囪瘑TCP/IP鍗忚涓嬬殑鍦板潃銆傛崲鍙ヨ瘽璇達(dá)紝榪欎釜緇撴瀯鏄氱敤socket鍦板潃緇撴瀯錛岃屼笅闈㈢殑sockaddr_in鏄笓闂ㄩ拡瀵笽nternet鍩熺殑socket鍦板潃緇撴瀯銆?/p>

(2)銆乻ockaddr_in緇撴瀯

struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};sin _family涓虹綉緇滃湴鍧綾誨瀷錛屽繀欏昏瀹氫負(fù)AF_INET銆俿in_port涓烘湇鍔$鍙o紝娉ㄦ剰涓嶈浣跨敤宸插浐瀹氱殑鏈嶅姟绔彛錛屽HTTP鐨勭鍙?0絳夈傚鏋滅鍙h緗負(fù)0錛屽垯緋葷粺浼?xì)鑷姩鍒嗛厤涓涓敮涓绔彛銆俿in_addr涓轟竴涓猽nsigned long鐨処P鍦板潃銆俿in_zero涓哄~鍏呭瓧孌碉紝綰補(bǔ)鐢ㄦ潵淇濊瘉緇撴瀯鐨勫ぇ灝忋?/p>

鈼?灝嗗父鐢ㄧ殑鐢ㄧ偣鍒嗗紑鐨処P鍦板潃杞崲涓簎nsigned long綾誨瀷鐨処P鍦板潃鐨勫嚱鏁幫細(xì)

unsigned long inet_addr(const char FAR * cp )鐢ㄦ硶錛?/p>

unsigned long addr=inet_addr("192.1.8.84")鈼?濡傛灉灝唖in_addr璁劇疆涓篒NADDR_ANY錛屽垯琛ㄧず鎵鏈夌殑IP鍦板潃錛屼篃鍗蟲(chóng)墍鏈夌殑璁$畻鏈恒?/p>

#define INADDR_ANY (u_long)0x000000004銆?涓繪満鍦板潃錛?/p>

鍏堢湅瀹氫箟錛?/p>

struct hostent {
char FAR * h_name; /* official name of host */
char FAR * FAR * h_aliases; /* alias list */
short h_addrtype; /* host address type */
short h_length; /* length of address */
char FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr h_addr_list[0] /* address, for backward compat */
};
h_name涓轟富鏈哄悕瀛椼?br>h_aliases涓轟富鏈哄埆鍚嶅垪琛ㄣ?br>h_addrtype涓哄湴鍧綾誨瀷銆?br>h_length涓哄湴鍧綾誨瀷銆?br>h_addr_list涓篒P鍦板潃錛屽鏋滆涓繪満鏈夊涓綉鍗★紝灝卞寘鎷湴鍧鐨勫垪琛ㄣ傚彟澶栬繕鏈夊嚑涓被浼肩殑緇撴瀯錛岃繖閲屽氨涓嶄竴涓浠嬬粛浜?jiǎn)銆?/p>

5銆?甯歌TCP/IP鍗忚鐨勫畾涔夛細(xì)

#define IPPROTO_IP 0
#define IPPROTO_ICMP 1
#define IPPROTO_IGMP 2
#define IPPROTO_TCP 6
#define IPPROTO_UDP 17
#define IPPROTO_RAW 255 鍏蜂綋鏄粈涔堝崗璁紝澶у涓鐪嬪氨鐭ラ亾浜?jiǎn)銆?/p>

 濂楁帴瀛楃殑灞炴?/p>

涓轟簡(jiǎn)鐏墊椿浣跨敤濂楁帴瀛楋紝鎴戜滑鍙互瀵瑰畠鐨勫睘鎬ц繘琛岃瀹氥?/p>

1銆?灞炴у唴瀹癸細(xì)

//鍏佽璋冭瘯杈撳嚭
#define SO_DEBUG 0x0001 /* turn on debugging info recording */
//鏄惁鐩戝惉妯″紡
#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
//濂楁帴瀛椾笌鍏朵粬濂楁帴瀛楃殑鍦板潃緇戝畾
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
//淇濇寔榪炴帴
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
//涓嶈璺敱鍑哄幓
#define SO_DONTROUTE 0x0010 /* just use interface addresses */
//璁劇疆涓哄箍鎾?br>#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
//浣跨敤鐜洖涓嶉氳繃紜歡
#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
//褰撳墠鎷栧歡鍊?br>#define SO_LINGER 0x0080 /* linger on close if data present */
//鏄惁鍔犲叆甯﹀鏁版嵁
#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
//紱佺敤LINGER閫夐」
#define SO_DONTLINGER (int)(~SO_LINGER)
//鍙戦佺紦鍐插尯闀垮害
#define SO_SNDBUF 0x1001 /* send buffer size */
//鎺ユ敹緙撳啿鍖洪暱搴?br>#define SO_RCVBUF 0x1002 /* receive buffer size */
//鍙戦佽秴鏃舵椂闂?br>#define SO_SNDTIMEO 0x1005 /* send timeout */
//鎺ユ敹瓚呮椂鏃墮棿
#define SO_RCVTIMEO 0x1006 /* receive timeout */
//閿欒鐘舵?br>#define SO_ERROR 0x1007 /* get error status and clear */
//濂楁帴瀛楃被鍨?br>#define SO_TYPE 0x1008 /* get socket type */2銆?璇誨彇socket灞炴э細(xì)

int getsockopt(SOCKET s, int level, int optname, char FAR * optval, int FAR * optlen)s涓烘璇誨彇灞炴х殑濂楁帴瀛椼俵evel涓哄鎺ュ瓧閫夐」鐨勭駭鍒紝澶у鏁版槸鐗瑰畾鍗忚鍜屽鎺ュ瓧涓撴湁鐨勩傚IP鍗忚搴斾負(fù) IPPROTO_IP銆?/p>

optname涓鴻鍙栭夐」鐨勫悕縐?br>optval涓哄瓨鏀鵑夐」鍊肩殑緙撳啿鍖烘寚閽堛?br>optlen涓虹紦鍐插尯鐨勯暱搴︾敤娉曪細(xì)

int ttl=0; //璇誨彇TTL鍊?br>int rc = getsockopt( s, IPPROTO_IP, IP_TTL, (char *)&ttl, sizeof(ttl));
//鏉ヨ嚜MS platform SDK 20033銆?璁劇疆socket灞炴э細(xì)

int setsockopt(SOCKET s,int level, int optname,const char FAR * optval, int optlen)s涓烘璁劇疆灞炴х殑濂楁帴瀛椼?br>level涓哄鎺ュ瓧閫夐」鐨勭駭鍒紝鐢ㄦ硶鍚屼笂銆?br>optname涓鴻緗夐」鐨勫悕縐?br>optval涓哄瓨鏀鵑夐」鍊肩殑緙撳啿鍖烘寚閽堛?br>optlen涓虹紦鍐插尯鐨勯暱搴?/p>

鐢ㄦ硶錛?/p>

int ttl=32; //璁劇疆TTL鍊?br>int rc = setsockopt( s, IPPROTO_IP, IP_TTL, (char *)&ttl, sizeof(ttl)); 濂楁帴瀛楃殑浣跨敤姝ラ

1銆佸惎鍔╓insock錛氬Winsock DLL榪涜鍒濆鍖栵紝鍗忓晢Winsock鐨勭増鏈敮鎸佸茍鍒嗛厤蹇呰鐨?br>璧勬簮銆傦紙鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)錛?/p>

int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData )

wVersionRequested涓烘墦綆楀姞杞絎insock鐨勭増鏈紝涓鑸涓嬭緗細(xì)
wVersionRequested=MAKEWORD(2,0)
鎴栬呯洿鎺ヨ祴鍊鹼細(xì)wVersionRequested=2

LPWSADATA涓哄垵濮嬪寲Socket鍚庡姞杞界殑鐗堟湰鐨勪俊鎭?瀹氫箟濡備笅錛?br>typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
} WSADATA, FAR * LPWSADATA;濡傛灉鍔犺澆鎴愬姛鍚庢暟鎹負(fù)錛?/p>

wVersion錛?琛ㄧず鍔犺澆鐗堟湰涓?.0銆?br>wHighVersion錛?14琛ㄧず褰撳墠緋葷粺鏀寔socket鏈楂樼増鏈負(fù)2.2銆?br>szDescription="WinSock 2.0"
szSystemStatus="Running"琛ㄧず姝e湪榪愯銆?br>iMaxSockets錛?琛ㄧず鍚屾椂鎵撳紑鐨剆ocket鏈澶ф暟錛屼負(fù)0琛ㄧず娌℃湁闄愬埗銆?br>iMaxUdpDg錛?琛ㄧず鍚屾椂鎵撳紑鐨勬暟鎹姤鏈澶ф暟錛屼負(fù)0琛ㄧず娌℃湁闄愬埗銆?br>lpVendorInfo娌℃湁浣跨敤錛屼負(fù)鍘傚晢鎸囧畾淇℃伅棰勭暀銆傝鍑芥暟浣跨敤鏂規(guī)硶錛?/p>

WORD wVersion=MAKEWORD(2,0);
WSADATA wsData;
int nResult= WSAStartup(wVersion,&wsData);
if(nResult !=0)
{
//閿欒澶勭悊
}2銆佸垱寤哄鎺ュ瓧錛氾紙鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)錛?/p>

SOCKET socket( int af, int type, int protocol );
af涓虹綉緇滃湴鍧綾誨瀷錛屼竴鑸負(fù)AF_INET錛岃〃紺哄湪Internet鍩熶腑浣跨敤銆?br>type涓哄鎺ュ瓧綾誨瀷錛屽墠闈㈠凡緇忎粙緇嶄簡(jiǎn)銆?br>protocol涓烘寚瀹氱綉緇滃崗璁紝涓鑸負(fù)IPPROTO_IP銆傜敤娉曪細(xì)

SOCKET sock=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(sock==INVALID_SOCKET)
{
//閿欒澶勭悊
}3銆佸鎺ュ瓧鐨勭粦瀹氾細(xì)灝嗘湰鍦板湴鍧緇戝畾鍒版墍鍒涘緩鐨勫鎺ュ瓧涓娿傦紙鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)錛?/p>

int bind( SOCKET s, const struct sockaddr FAR * name, int namelen )
s涓哄凡緇忓垱寤虹殑濂楁帴瀛椼?br>name涓簊ocket鍦板潃緇撴瀯錛屼負(fù)sockaddr緇撴瀯錛屽鍓嶉潰璁ㄨ鐨勶紝鎴戜滑涓鑸嬌鐢╯ockaddr_in
緇撴瀯錛屽湪浣跨敤鍐嶅己鍒惰漿鎹負(fù)sockaddr緇撴瀯銆?br>namelen涓哄湴鍧緇撴瀯鐨勯暱搴︺?br>鐢ㄦ硶錛?/p>

sockaddr_in addr;
addr. sin_family=AF_INET;
addr. sin_port= htons(0); //淇濊瘉瀛楄妭欏哄簭
addr. sin_addr.s_addr= inet_addr("192.1.8.84")
int nResult=bind(s,(sockaddr*)&addr,sizeof(sockaddr));
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}4銆?濂楁帴瀛楃殑鐩戝惉錛氾紙鏈嶅姟鍣ㄧ錛?/p>

int listen(SOCKET s, int backlog )s涓轟竴涓凡緇戝畾浣嗘湭鑱旀帴鐨勫鎺ュ瓧銆?br>backlog涓烘寚瀹氭鍦ㄧ瓑寰呰仈鎺ョ殑鏈澶ч槦鍒楅暱搴︼紝榪欎釜鍙傛暟闈炲父閲嶈錛屽洜涓烘湇鍔″櫒涓鑸彲
浠ユ彁渚涘涓繛鎺ャ?br>鐢ㄦ硶錛?/p>

int nResult=listen(s,5) //鏈澶?涓繛鎺?br>if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}5銆佸鎺ュ瓧絳夊緟榪炴帴:錛氾紙鏈嶅姟鍣ㄧ錛?/p>

SOCKET accept( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen )s涓哄浜庣洃鍚ā寮忕殑濂楁帴瀛椼?br>sockaddr涓烘帴鏀舵垚鍔熷悗榪斿洖瀹㈡埛绔殑緗戠粶鍦板潃銆?br>addrlen涓虹綉緇滃湴鍧鐨勯暱搴︺?/p>

鐢ㄦ硶錛?/p>

sockaddr_in addr;
SOCKET s_d=accept(s,(sockaddr*)&addr,sizeof(sockaddr));
if(s==INVALID_SOCKET)
{
//閿欒澶勭悊
}6銆佸鎺ュ瓧鐨勮繛緇擄細(xì)灝嗕袱涓鎺ュ瓧榪炵粨璧鋒潵鍑嗗閫氫俊銆傦紙瀹㈡埛绔級(jí)

int connect(SOCKET s, const struct sockaddr FAR * name, int namelen )s涓烘榪炵粨鐨勫凡鍒涘緩鐨勫鎺ュ瓧銆?br>name涓烘榪炵粨鐨剆ocket鍦板潃銆?br>namelen涓簊ocket鍦板潃鐨勭粨鏋勭殑闀垮害銆?/p>

鐢ㄦ硶錛?/p>

sockaddr_in addr;
addr. sin_family=AF_INET;
addr. sin_port=htons(0); //淇濊瘉瀛楄妭欏哄簭
addr. sin_addr.s_addr= htonl(INADDR_ANY) //淇濊瘉瀛楄妭欏哄簭
int nResult=connect(s,(sockaddr*)&addr,sizeof(sockaddr));
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}7銆佸鎺ュ瓧鍙戦佹暟鎹細(xì)錛堟湇鍔″櫒绔拰瀹㈡埛绔級(jí)

int send(SOCKET s, const char FAR * buf, int len, int flags )s涓烘湇鍔″櫒绔洃鍚殑濂楁帴瀛椼?br>buf涓烘鍙戦佹暟鎹紦鍐插尯鐨勬寚閽堛?br>len涓哄彂閫佹暟鎹紦鍐插尯鐨勯暱搴︺?br>flags涓烘暟鎹彂閫佹爣璁般?br>榪斿洖鍊間負(fù)鍙戦佹暟鎹殑瀛楃鏁般?/p>

鈼嗚繖閲岃涓涓嬭繖涓彂閫佹爣璁幫紝涓嬮潰8涓璁虹殑鎺ユ敹鏍囪涔熶竴鏍鳳細(xì)

flag鍙栧煎繀欏諱負(fù)0鎴栬呭涓嬪畾涔夌殑緇勫悎錛?琛ㄧず娌℃湁鐗規(guī)畩琛屼負(fù)銆?/p>

#define MSG_OOB 0x1 /* process out-of-band data */
#define MSG_PEEK 0x2 /* peek at incoming message */
#define MSG_DONTROUTE 0x4 /* send without using routing tables */
MSG_OOB琛ㄧず鏁版嵁搴旇甯﹀鍙戦侊紝鎵璋撳甫澶栨暟鎹氨鏄疶CP绱фユ暟鎹?br>MSG_PEEK琛ㄧず浣挎湁鐢ㄧ殑鏁版嵁澶嶅埗鍒扮紦鍐插尯鍐咃紝浣嗗茍涓嶄粠緋葷粺緙撳啿鍖哄唴鍒犻櫎銆?br>MSG_DONTROUTE琛ㄧず涓嶈灝嗗寘璺敱鍑哄幓銆?/p>

鐢ㄦ硶錛?/p>

char buf[]="xiaojin";
int nResult=send(s,buf,strlen(buf));
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}8銆?濂楁帴瀛楃殑鏁版嵁鎺ユ敹錛氾紙瀹㈡埛绔級(jí)

int recv( SOCKET s, char FAR * buf, int len, int flags )s涓哄噯澶囨帴鏀舵暟鎹殑濂楁帴瀛椼?br>buf涓哄噯澶囨帴鏀舵暟鎹殑緙撳啿鍖恒?br>len涓哄噯澶囨帴鏀舵暟鎹紦鍐插尯鐨勫ぇ灝忋?br>flags涓烘暟鎹帴鏀舵爣璁般?br>榪斿洖鍊間負(fù)鎺ユ敹鐨勬暟鎹殑瀛楃鏁般?/p>

鐢ㄦ硶錛?/p>

char mess[1000];
int nResult =recv(s,mess,1000,0);
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}9銆佷腑鏂鎺ュ瓧榪炴帴錛氶氱煡鏈嶅姟鍣ㄧ鎴栧鎴風(fēng)鍋滄鎺ユ敹鍜屽彂閫佹暟鎹傦紙鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)錛?/p>

int shutdown(SOCKET s, int how)s涓烘涓柇榪炴帴鐨勫鎺ュ瓧銆?br>How涓烘弿榪扮姝㈠摢浜涙搷浣滐紝鍙栧間負(fù)錛歋D_RECEIVE銆丼D_SEND銆丼D_BOTH銆?/p>

#define SD_RECEIVE 0x00
#define SD_SEND 0x01
#define SD_BOTH 0x02鐢ㄦ硶錛?/p>

int nResult= shutdown(s,SD_BOTH);
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}10銆?鍏抽棴濂楁帴瀛楋細(xì)閲婃斁鎵鍗犳湁鐨勮祫婧愩傦紙鏈嶅姟鍣ㄧ鍜屽鎴風(fēng)錛?/p>

int closesocket( SOCKET s )s涓烘鍏抽棴鐨勫鎺ュ瓧銆?/p>

鐢ㄦ硶錛?/p>

int nResult=closesocket(s);
if(nResult==SOCKET_ERROR)
{
//閿欒澶勭悊
}
 

鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/coffeemay/archive/2006/08/05/1023149.aspx



娌涙矝 2011-04-29 11:18 鍙戣〃璇勮
]]>
鏈閫氫織嫻呮樉鐨勨淚O妯″紡鈥濊В鏋?/title><link>http://www.shnenglu.com/mmdengwo/archive/2011/04/14/144255.html</link><dc:creator>娌涙矝</dc:creator><author>娌涙矝</author><pubDate>Thu, 14 Apr 2011 14:33:00 GMT</pubDate><guid>http://www.shnenglu.com/mmdengwo/archive/2011/04/14/144255.html</guid><wfw:comment>http://www.shnenglu.com/mmdengwo/comments/144255.html</wfw:comment><comments>http://www.shnenglu.com/mmdengwo/archive/2011/04/14/144255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mmdengwo/comments/commentRss/144255.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mmdengwo/services/trackbacks/144255.html</trackback:ping><description><![CDATA[[婧怾 錛歨ttp://hi.baidu.com/firebird/blog/item/f592b3193a02814542a9adeb.html<br><br> <font size=2>    涓錛歴elect妯″瀷<br>    浜岋細(xì)WSAAsyncSelect妯″瀷<br>    涓夛細(xì)WSAEventSelect妯″瀷<br>    鍥涳細(xì)Overlapped I/O 浜嬩歡閫氱煡妯″瀷<br>    浜旓細(xì)Overlapped I/O 瀹屾垚渚嬬▼妯″瀷<br>    鍏細(xì)IOCP妯″瀷</font><br><br>鍘熸枃鍚嶏細(xì)銆婂熀浜嶥elphi鐨凷ocket I/O妯″瀷鍏ㄦ帴瑙?nbsp;銆?<br>鑰侀檲鏈変竴涓湪澶栧湴宸ヤ綔鐨勫コ鍎匡紝涓嶈兘緇忓父鍥炴潵錛岃侀檲鍜屽ス閫氳繃淇′歡鑱旂郴銆備粬浠殑淇′細(xì)琚偖閫掑憳鎶曢掑埌浠栦滑鐨勪俊綆遍噷銆?nbsp; <br><br>榪欏拰Socket妯″瀷闈炲父綾諱技銆備笅闈㈡垜灝變互鑰侀檲鎺ユ敹淇′歡涓轟緥璁茶ВSocket I/O妯″瀷銆?nbsp; <br><br>涓錛歴elect妯″瀷  <br><br>鑰侀檲闈炲父鎯崇湅鍒板コ鍎跨殑淇°備互鑷充簬浠栨瘡闅?0鍒嗛挓灝變笅妤兼鏌ヤ俊綆憋紝鐪嬫槸鍚︽湁濂沖効鐨勪俊錛屽湪榪欑鎯呭喌涓嬶紝“涓嬫ゼ媯(gè)鏌ヤ俊綆?#8221;鐒跺悗鍥炲埌妤間笂鑰借浜?jiǎn)鑰侀檲澶鐨勬椂闂達(dá)紝浠ヨ嚦浜庤侀檲鏃犳硶鍋氬叾浠栧伐浣溿?nbsp; <br><br>select妯″瀷鍜岃侀檲鐨勮繖縐嶆儏鍐甸潪甯哥浉浼鹼細(xì)鍛ㄨ屽濮嬪湴鍘繪鏌?.....濡傛灉鏈夋暟鎹?.....鎺ユ敹/鍙戦?......  <br><br>浣跨敤綰跨▼鏉elect搴旇鏄氱敤鐨勫仛娉曪細(xì)  <br><br>procedure TListenThread.Execute;  <br>var  <br>銆 addr : TSockAddrIn;  <br>銆 fd_read : TFDSet;  <br>銆 timeout : TTimeVal;  <br>銆 ASock,  <br>銆 MainSock : TSocket;  <br>銆 len, i : Integer;  <br>begin  <br>銆 MainSock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );  <br>銆 addr.sin_family := AF_INET;  <br>銆 addr.sin_port := htons(5678);  <br>銆 addr.sin_addr.S_addr := htonl(INADDR_ANY);  <br>銆 bind( MainSock, @addr, sizeof(addr) );  <br>銆 listen( MainSock, 5 );  <br><br>銆 while (not Terminated) do  <br>銆 begin  <br>銆銆 FD_ZERO( fd_read );  <br>銆銆 FD_SET( MainSock, fd_read );  <br>銆銆 timeout.tv_sec := 0;  <br>銆銆 timeout.tv_usec := 500;  <br>銆銆 if select( 0, @fd_read, nil, nil, @timeout ) > 0 then //鑷沖皯鏈?涓瓑寰匒ccept鐨刢onnection  <br>銆銆 begin  <br>銆銆銆 if FD_ISSET( MainSock, fd_read ) then  <br>銆銆銆 begin  <br>銆銆銆 for i:=0 to fd_read.fd_count-1 do //娉ㄦ剰錛宖d_count <= 64錛?<br>   涔熷氨鏄select鍙兘鍚屾椂綆$悊鏈澶?4涓繛鎺?nbsp; <br>銆銆銆 begin  <br>銆銆銆銆 len := sizeof(addr);  <br>銆銆銆銆 ASock := accept( MainSock, addr, len );  <br>銆銆銆銆 if ASock <> INVALID_SOCKET then  <br>銆銆銆銆銆 ....//涓篈Sock鍒涘緩涓涓柊鐨勭嚎紼嬶紝鍦ㄦ柊鐨勭嚎紼嬩腑鍐嶄笉鍋滃湴select  <br>銆銆銆銆 end;  <br>銆銆銆 end; 銆銆  <br>銆銆 end;  <br>銆 end; //while (not self.Terminated)  <br><br>銆 shutdown( MainSock, SD_BOTH );  <br>銆 closesocket( MainSock );  <br>end; <br>  <br><br><br>浜岋細(xì)WSAAsyncSelect妯″瀷  <br><br>鍚庢潵錛岃侀檲浣跨敤浜?jiǎn)寰蒋鍏徃鐨勬柊寮忎俊绠便傝繖縐嶄俊綆遍潪甯稿厛榪涳紝涓鏃︿俊綆遍噷鏈夋柊鐨勪俊浠訛紝鐩栬尐灝變細(xì)緇欒侀檲鎵撶數(shù)璇濓細(xì)鍠傦紝澶х埛錛屼綘鏈夋柊鐨勪俊浠朵簡(jiǎn)錛佷粠姝わ紝鑰侀檲鍐嶄篃涓嶅繀棰戠箒涓婁笅妤兼鏌ヤ俊綆變簡(jiǎn)錛岀墮涔熶笉鐤間簡(jiǎn)錛屼綘鐬呭噯浜?jiǎn)锛岃摑澶?.....涓嶆槸錛屽井杞?.....  <br><br>寰蔣鎻愪緵鐨刉SAAsyncSelect妯″瀷灝辨槸榪欎釜鎰忔濄?nbsp; <br><br>WSAAsyncSelect妯″瀷鏄疻indows涓嬫渶綆鍗曟槗鐢ㄧ殑涓縐峉ocket I/O妯″瀷銆備嬌鐢ㄨ繖縐嶆ā鍨嬫椂錛學(xué)indows浼?xì)鎶娋|戠粶浜嬩歡浠ユ秷鎭殑褰㈠娍閫氱煡搴旂敤紼嬪簭銆?nbsp; <br><br>棣栧厛瀹氫箟涓涓秷鎭爣紺哄父閲忥細(xì)  <br><br>const WM_SOCKET = WM_USER + 55; <br>  <br><br><br>鍐嶅湪涓籉orm鐨刾rivate鍩熸坊鍔犱竴涓鐞嗘娑堟伅鐨勫嚱鏁板0鏄庯細(xì)  <br><br>private  <br>procedure WMSocket(var Msg: TMessage); message WM_SOCKET; <br>  <br>銆  <br><br>鐒跺悗灝卞彲浠ヤ嬌鐢╓SAAsyncSelect浜?jiǎn)锛?xì)  <br><br>var  <br>銆 addr : TSockAddr;  <br>銆 sock : TSocket;  <br><br>銆 sock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );  <br>銆 addr.sin_family := AF_INET;  <br>銆 addr.sin_port := htons(5678);  <br>銆 addr.sin_addr.S_addr := htonl(INADDR_ANY);  <br>銆 bind( m_sock, @addr, sizeof(SOCKADDR) );  <br><br>銆 WSAAsyncSelect( m_sock, Handle, WM_SOCKET, FD_ACCEPT or FD_CLOSE );  <br><br>銆 listen( m_sock, 5 );  <br>銆 .... <br>  <br><br><br>搴旂敤紼嬪簭鍙互瀵規(guī)敹鍒癢M_SOCKET娑堟伅榪涜鍒嗘瀽錛屽垽鏂槸鍝竴涓猻ocket浜х敓浜?jiǎn)缃懢l滀簨浠朵互鍙?qiáng)浜嬩欢绫诲瀷锛?xì)  <br><br>procedure TfmMain.WMSocket(var Msg: TMessage);  <br>var  <br>銆 sock : TSocket;  <br>銆 addr : TSockAddrIn;  <br>銆 addrlen : Integer;  <br>銆 buf : Array [0..4095] of Char;  <br>begin  <br>銆 //Msg鐨刉Param鏄駭鐢熶簡(jiǎn)緗戠粶浜嬩歡鐨剆ocket鍙ユ焺錛孡Param鍒欏寘鍚簡(jiǎn)浜嬩歡綾誨瀷  <br>銆 case WSAGetSelectEvent( Msg.LParam ) of  <br>銆 FD_ACCEPT :  <br>銆銆 begin  <br>銆銆銆 addrlen := sizeof(addr);  <br>銆銆銆 sock := accept( Msg.WParam, addr, addrlen );  <br>銆銆銆 if sock <> INVALID_SOCKET then  <br>銆銆銆銆 WSAAsyncSelect( sock, Handle, WM_SOCKET, FD_READ or FD_WRITE or FD_CLOSE );  <br>銆銆 end;  <br><br>銆銆 FD_CLOSE : closesocket( Msg.WParam );  <br>銆銆 FD_READ : recv( Msg.WParam, buf[0], 4096, 0 );  <br>銆銆 FD_WRITE : ;  <br>銆 end;  <br>end; <br>  <br><br><br>涓夛細(xì)WSAEventSelect妯″瀷  <br><br>鍚庢潵錛屽井杞殑淇$闈炲父鐣呴攢錛岃喘涔板井杞俊綆辯殑浜轟互鐧句竾璁℃暟......浠ヨ嚦浜庣洊鑼ㄦ瘡澶?4灝忔椂緇欏鎴鋒墦鐢?shù)璇濆Q岀瘡寰楄叞閰歌儗鐥涳紝鍠濊殎鍔涚閮戒笉濂戒嬌銆傚井杞敼榪涗簡(jiǎn)浠栦滑鐨勪俊綆憋細(xì)鍦ㄥ鎴風(fēng)殑瀹朵腑娣誨姞涓涓檮鍔犺緗紝榪欎釜瑁呯疆浼?xì)鐩戣瀹㈡堬L(fēng)殑淇$錛屾瘡褰撴柊鐨勪俊浠舵潵涓達(dá)紝姝よ緗細(xì)鍙戝嚭“鏂頒俊浠跺埌杈?#8221;澹幫紝鎻愰啋鑰侀檲鍘繪敹淇°傜洊鑼ㄧ粓浜庡彲浠ョ潯瑙変簡(jiǎn)銆?nbsp; <br><br>鍚屾牱瑕佷嬌鐢ㄧ嚎紼嬶細(xì)  <br><br>procedure TListenThread.Execute;  <br>var  <br>銆 hEvent : WSAEvent;  <br>銆 ret : Integer;  <br>銆 ne : TWSANetworkEvents;  <br>銆 sock : TSocket;  <br>銆 adr : TSockAddrIn;  <br>銆 sMsg : String;  <br>銆 Index,  <br>銆 EventTotal : DWORD;  <br>銆 EventArray : Array [0..WSA_MAXIMUM_WAIT_EVENTS-1] of WSAEVENT;  <br>begin  <br>銆 ...socket...bind...  <br>銆 hEvent := WSACreateEvent();  <br>銆 WSAEventSelect( ListenSock, hEvent, FD_ACCEPT or FD_CLOSE );  <br>銆 ...listen...  <br><br>銆 while ( not Terminated ) do  <br>銆 begin  <br>銆銆 Index := WSAWaitForMultipleEvents( EventTotal, @EventArray[0], FALSE,  <br>  WSA_INFINITE, FALSE );  <br>銆銆 FillChar( ne, sizeof(ne), 0 );  <br>銆銆 WSAEnumNetworkEvents( SockArray[Index-WSA_WAIT_EVENT_0],  <br>    EventArray <br>  [Index-WSA_WAIT_EVENT_0], @ne );  <br><br>銆銆 if ( ne.lNetworkEvents and FD_ACCEPT ) > 0 then  <br>銆銆 begin  <br>銆銆銆 if ne.iErrorCode[FD_ACCEPT_BIT] <> 0 then  <br>銆銆銆銆 continue;  <br><br>銆銆銆 ret := sizeof(adr);  <br>銆銆銆 sock := accept( SockArray[Index-WSA_WAIT_EVENT_0], adr, ret );  <br>銆銆銆 if EventTotal > WSA_MAXIMUM_WAIT_EVENTS-1 then <br>      //榪欓噷W(xué)SA_MAXIMUM_WAIT_EVENTS鍚屾牱鏄?4  <br>銆銆銆 begin  <br>銆銆銆銆 closesocket( sock );  <br>銆銆銆銆 continue;  <br>銆銆銆 end;  <br><br>銆銆銆 hEvent := WSACreateEvent();  <br>銆銆銆 WSAEventSelect( sock, hEvent, FD_READ or FD_WRITE or FD_CLOSE );  <br>銆銆銆 SockArray[EventTotal] := sock;  <br>銆銆銆 EventArray[EventTotal] := hEvent;  <br>銆銆銆 Inc( EventTotal );  <br>銆銆 end;  <br><br>銆銆 if ( ne.lNetworkEvents and FD_READ ) > 0 then  <br>銆銆 begin  <br>銆銆銆 if ne.iErrorCode[FD_READ_BIT] <> 0 then  <br>銆銆銆銆 continue;  <br>銆銆銆銆 FillChar( RecvBuf[0], PACK_SIZE_RECEIVE, 0 );  <br>銆銆銆銆 ret := recv( SockArray[Index-WSA_WAIT_EVENT_0], RecvBuf[0],  <br>    PACK_SIZE_RECEIVE, 0 );  <br>銆銆銆銆 ......  <br>銆銆銆 end;  <br>銆銆 end;  <br>end; <br>  <br><br><br><br>鍥涳細(xì)Overlapped I/O 浜嬩歡閫氱煡妯″瀷  <br><br>鍚庢潵錛屽井杞氳繃璋冩煡鍙戠幇錛岃侀檲涓嶅枩嬈笂涓嬫ゼ鏀跺彂淇′歡錛屽洜涓轟笂涓嬫ゼ鍏跺疄寰堟氮璐規(guī)椂闂淬備簬鏄井杞啀嬈℃敼榪涗粬浠殑淇$銆傛柊寮忕殑淇$閲囩敤浜?jiǎn)鏇翠负鍏垬q涚殑鎶鏈紝鍙鐢ㄦ埛鍛婅瘔寰蔣鑷繁鐨勫鍦ㄥ嚑妤煎嚑鍙鳳紝鏂板紡淇$浼?xì)鎶婁俊錃g鐩存帴浼犻佸埌鐢ㄦ埛鐨勫涓紝鐒跺悗鍛婅瘔鐢ㄦ埛錛屼綘鐨勪俊浠跺凡緇忔斁鍒頒綘鐨勫涓簡(jiǎn)錛佽侀檲寰堥珮鍏達(dá)紝鍥犱負(fù)浠栦笉蹇呭啀浜茶嚜鏀跺彂淇′歡浜?jiǎn)锛?nbsp; <br><br>Overlapped I/O 浜嬩歡閫氱煡妯″瀷鍜學(xué)SAEventSelect妯″瀷鍦ㄥ疄鐜頒笂闈炲父鐩鎬技錛屼富瑕佸尯鍒湪"Overlapped”錛孫verlapped妯″瀷鏄搴旂敤紼嬪簭浣跨敤閲嶅彔鏁版嵁緇撴瀯(WSAOVERLAPPED)錛屼竴嬈℃姇閫掍竴涓垨澶氫釜Winsock I/O璇鋒眰銆傝繖浜涙彁浜ょ殑璇鋒眰瀹屾垚鍚庯紝搴旂敤紼嬪簭浼?xì)鏀跺埌閫氱煡銆備粈涔堟剰鎬濆憿錛熷氨鏄錛屽鏋滀綘鎯充粠socket涓婃帴鏀舵暟鎹紝鍙渶瑕佸憡璇夌郴緇燂紝鐢辯郴緇熶負(fù)浣犳帴鏀舵暟鎹紝鑰屼綘闇瑕佸仛鐨勫彧鏄負(fù)緋葷粺鎻愪緵涓涓紦鍐插尯~~~~~  <br><br>Listen綰跨▼鍜學(xué)SAEventSelect妯″瀷涓妯′竴鏍鳳紝Recv/Send綰跨▼鍒欏畬鍏ㄤ笉鍚岋細(xì)  <br><br>procedure TOverlapThread.Execute;  <br>var  <br>銆 dwTemp : DWORD;  <br>銆 ret : Integer;  <br>銆 Index : DWORD;  <br>begin  <br>銆 ......  <br><br>銆 while ( not Terminated ) do  <br>銆 begin  <br>銆銆 Index := WSAWaitForMultipleEvents <br>   ( FLinks.Count, @FLinks.Events[0], FALSE,  <br>    RECV_TIME_OUT, FALSE );  <br>銆銆 Dec( Index, WSA_WAIT_EVENT_0 );  <br>銆銆 if Index > WSA_MAXIMUM_WAIT_EVENTS-1 then  <br>    //瓚呮椂鎴栬呭叾浠栭敊璇?nbsp; <br>銆銆銆 continue;  <br><br>銆銆 WSAResetEvent <br>   ( FLinks.Events[Index] );  <br>銆銆 WSAGetOverlappedResult( FLinks.Sockets[Index],  <br>      FLinks.pOverlaps[Index], @dwTemp, FALSE,FLinks. <br>     pdwFlags[Index]^ );  <br><br>銆銆 if dwTemp = 0 then //榪炴帴宸茬粡鍏抽棴  <br>銆銆 begin  <br>銆銆銆 ......  <br>銆銆銆 continue;  <br>銆銆 end else  <br>銆 begin  <br>銆銆 fmMain.ListBox1.Items.Add( FLinks.pBufs[Index]^.buf );  <br>銆 end;  <br><br>銆 //鍒濆鍖栫紦鍐插尯  <br>銆 FLinks.pdwFlags[Index]^ := 0;  <br>銆 FillChar( FLinks.pOverlaps[Index]^,  <br>    sizeof(WSAOVERLAPPED), 0 );  <br>銆 FLinks.pOverlaps[Index]^. <br>   hEvent := FLinks.Events[Index];  <br>銆 FillChar( FLinks.pBufs[Index]^.buf^,  <br>   BUFFER_SIZE, 0 );  <br><br>銆 //閫掍竴涓帴鏀舵暟鎹姹?nbsp; <br>銆 WSARecv( FLinks.Sockets[Index], FLinks.pBufs[Index], 1, <br>       FLinks.pdwRecvd[Index]^, FLinks.pdwFlags[Index]^,  <br>      FLinks.pOverlaps[Index], nil );  <br>end;  <br>end; <br>  <br><br><br>浜旓細(xì)Overlapped I/O 瀹屾垚渚嬬▼妯″瀷  <br><br>鑰侀檲鎺ユ敹鍒版柊鐨勪俊浠跺悗錛屼竴鑸殑紼嬪簭鏄細(xì)鎵撳紑淇″皝----鎺忓嚭淇$焊----闃呰淇′歡----鍥炲淇′歡......涓轟簡(jiǎn)榪涗竴姝ュ噺杞葷敤鎴瘋礋鎷咃紝寰蔣鍙堝紑鍙戜簡(jiǎn)涓縐嶆柊鐨勬妧鏈細(xì)鐢ㄦ埛鍙鍛婅瘔寰蔣瀵逛俊浠剁殑鎿嶄綔姝ラ錛屽井杞俊綆卞皢鎸夌収榪欎簺姝ラ鍘誨鐞嗕俊浠訛紝涓嶅啀闇瑕佺敤鎴蜂翰鑷媶淇?闃呰/鍥炲浜?jiǎn)锛佽侀檲緇堜簬榪囦笂浜?jiǎn)灏忚祫鐢煁z伙紒  <br><br>Overlapped I/O 瀹屾垚渚嬬▼瑕佹眰鐢ㄦ埛鎻愪緵涓涓洖璋冨嚱鏁幫紝鍙戠敓鏂扮殑緗戠粶浜嬩歡鐨勬椂鍊欑郴緇熷皢鎵ц榪欎釜鍑芥暟錛?nbsp; <br><br>procedure WorkerRoutine( const dwError, cbTransferred : DWORD;  <br>const  <br>lpOverlapped : LPWSAOVERLAPPED; const dwFlags : DWORD ); stdcall; <br>  <br><br><br>鐒跺悗鍛婅瘔緋葷粺鐢╓orkerRoutine鍑芥暟澶勭悊鎺ユ敹鍒扮殑鏁版嵁錛?nbsp; <br><br>WSARecv( m_socket, @FBuf, 1, dwTemp, dwFlag, @m_overlap, WorkerRoutine );  <br>銆銆 鐒跺悗......娌℃湁浠涔堢劧鍚庝簡(jiǎn)錛岀郴緇熶粈涔堥兘緇欎綘鍋氫簡(jiǎn)錛佸井杞湡瀹炰綋璐達(dá)紒  <br><br>while ( not Terminated ) do//榪欏氨鏄竴涓猂ecv/Send綰跨▼瑕佸仛鐨勪簨鎯?.....浠涔堥兘涓嶇敤鍋氬晩錛侊紒錛?nbsp; <br>begin  <br>銆 if SleepEx( RECV_TIME_OUT, True ) = WAIT_IO_COMPLETION then //  <br>銆 begin  <br>銆銆 ;  <br>銆 end else  <br>銆 begin  <br>銆銆 continue;  <br>銆 end;  <br>end; <br>  <br><br><br>鍏細(xì)IOCP妯″瀷  <br><br>寰蔣淇$浼間箮寰堝畬緹庯紝鑰侀檲涔熷緢婊℃剰銆備絾鏄湪涓浜涘ぇ鍏徃鎯呭喌鍗村畬鍏ㄤ笉鍚岋紒榪欎簺澶у叕鍙告湁鏁頒互涓囪鐨勪俊綆憋紝姣忕閽熼兘鏈夋暟浠ョ櫨璁$殑淇′歡闇瑕佸鐞嗭紝浠ヨ嚦浜庡井杞俊綆辯粡甯稿洜瓚呰礋鑽瘋繍杞屽穿婧冿紒闇瑕侀噸鏂板惎鍔紒寰蔣涓嶅緱涓嶄嬌鍑烘潃鎵嬮攺......  <br><br>寰蔣緇欐瘡涓ぇ鍏徃媧句簡(jiǎn)涓鍚嶅悕鍙?#8220;Completion Port”鐨勮秴綰ф満鍣ㄤ漢錛岃榪欎釜鏈哄櫒浜哄幓澶勭悊閭d簺淇′歡錛?nbsp; <br><br>“Windows NT灝忕粍娉ㄦ剰鍒拌繖浜涘簲鐢ㄧ▼搴忕殑鎬ц兘娌℃湁棰勬枡鐨勯偅涔堥珮銆傜壒鍒殑錛屽鐞嗗緢澶氬悓鏃剁殑瀹㈡埛璇鋒眰鎰忓懗鐫寰堝綰跨▼騫跺彂鍦拌繍琛屽湪緋葷粺涓傚洜涓烘墍鏈夎繖浜涚嚎紼嬮兘鏄彲榪愯鐨刐娌℃湁琚寕璧峰拰絳夊緟鍙戠敓浠涔堜簨]錛孧icrosoft鎰忚瘑鍒癗T鍐呮牳鑺辮垂浜?jiǎn)澶鐨勬棄櫁存潵铦{鎹㈣繍琛岀嚎紼嬬殑涓婁笅鏂嘯Context]錛岀嚎紼嬪氨娌℃湁寰楀埌寰堝CPU鏃墮棿鏉ュ仛瀹冧滑鐨勫伐浣溿傚ぇ瀹跺彲鑳戒篃閮芥劅瑙夊埌騫惰妯″瀷鐨勭摱棰堝湪浜庡畠涓烘瘡涓涓鎴瘋姹傞兘鍒涘緩浜?jiǎn)涓涓柊綰跨▼銆傚垱寤虹嚎紼嬫瘮璧峰垱寤鴻繘紼嬪紑閿瑕佸皬錛屼絾涔熻繙涓嶆槸娌℃湁寮閿鐨勩傛垜浠笉濡ㄨ鎯充竴涓嬶細(xì)濡傛灉浜嬪厛寮濂絅涓嚎紼嬶紝璁╁畠浠湪閭old[鍫靛]錛岀劧鍚庡彲浠ュ皢鎵鏈夌敤鎴風(fēng)殑璇鋒眰閮芥姇閫掑埌涓涓秷鎭槦鍒椾腑鍘匯傜劧鍚庨偅N涓嚎紼嬮愪竴浠庢秷鎭槦鍒椾腑鍘誨彇鍑烘秷鎭茍鍔犱互澶勭悊銆傚氨鍙互閬垮厤閽堝姣忎竴涓敤鎴瘋姹傞兘寮綰跨▼銆備笉浠呭噺灝戜簡(jiǎn)綰跨▼鐨勮祫婧愶紝涔熸彁楂樹(shù)簡(jiǎn)綰跨▼鐨勫埄鐢ㄧ巼銆傜悊璁轟笂寰堜笉閿欙紝浣犳兂鎴戠瓑娉涙硾涔嬭緢閮借兘鎯沖嚭鏉ョ殑闂錛孧icrosoft鍙堟庝細(xì)娌℃湁鑰冭檻鍒板憿?”-----鎽樿嚜nonocast鐨勩婄悊瑙/O Completion Port銆?nbsp; <br><br>鍏堢湅涓涓婭OCP妯″瀷鐨勫疄鐜幫細(xì)  <br><br>//鍒涘緩涓涓畬鎴愮鍙?nbsp; <br>FCompletPort := CreateIoCompletionPort( INVALID_HANDLE_VALUE, 0,0,0 );  <br><br>//鎺ュ彈榪滅▼榪炴帴錛屽茍鎶婅繖涓繛鎺ョ殑socket鍙ユ焺緇戝畾鍒板垰鎵嶅垱寤虹殑IOCP涓?nbsp; <br>AConnect := accept( FListenSock, addr, len);  <br>CreateIoCompletionPort( AConnect, FCompletPort, nil, 0 );  <br><br>//鍒涘緩CPU鏁?2 + 2涓嚎紼?nbsp; <br>for i:=1 to si.dwNumberOfProcessors*2+2 do  <br>begin  <br>銆 AThread := TRecvSendThread.Create( false );  <br>銆 AThread.CompletPort := FCompletPort;//鍛婅瘔榪欎釜綰跨▼錛屼綘瑕佸幓榪欎釜IOCP鍘昏闂暟鎹?nbsp; <br>end; <br>  <br><br><br>灝辮繖涔堢畝鍗曪紝鎴戜滑瑕佸仛鐨勫氨鏄緩绔嬩竴涓狪OCP錛屾妸榪滅▼榪炴帴鐨剆ocket鍙ユ焺緇戝畾鍒板垰鎵嶅垱寤虹殑IOCP涓婏紝鏈鍚庡垱寤簄涓嚎紼嬶紝騫跺憡璇夎繖n涓嚎紼嬪埌榪欎釜IOCP涓婂幓璁塊棶鏁版嵁灝卞彲浠ヤ簡(jiǎn)銆?nbsp; <br><br>鍐嶇湅涓涓婽RecvSendThread綰跨▼閮藉共浜涗粈涔堬細(xì)  <br><br>procedure TRecvSendThread.Execute;  <br>var  <br>銆 ......  <br>begin  <br>銆 while (not self.Terminated) do  <br>銆 begin  <br>銆銆 //鏌ヨIOCP鐘舵侊紙鏁版嵁璇誨啓鎿嶄綔鏄惁瀹屾垚錛?nbsp; <br>銆銆 GetQueuedCompletionStatus( CompletPort, BytesTransd,  <br>    CompletKey, POVERLAPPED(pPerIoDat), TIME_OUT );  <br><br>銆銆 if BytesTransd <> 0 then  <br>銆銆銆 ....;//鏁版嵁璇誨啓鎿嶄綔瀹屾垚  <br>銆銆  <br>銆銆銆 //鍐嶆姇閫掍竴涓鏁版嵁璇鋒眰  <br>銆銆銆 WSARecv( CompletKey, @(pPerIoDat^.BufData), 1,  <br>    BytesRecv, Flags, @(pPerIoDat^.Overlap), nil );  <br>銆銆 end;  <br>end; <br>  <br><br><br>璇誨啓綰跨▼鍙槸綆鍗曞湴媯(gè)鏌OCP鏄惁瀹屾垚浜?jiǎn)鎴戜滑鎶曢掔殑璇誨啓鎿嶄綔錛屽鏋滃畬鎴愪簡(jiǎn)鍒欏啀鎶曢掍竴涓柊鐨勮鍐欒姹傘?nbsp; <br><br>搴旇娉ㄦ剰鍒幫紝鎴戜滑鍒涘緩鐨勬墍鏈塗RecvSendThread閮藉湪璁塊棶鍚屼竴涓狪OCP錛堝洜涓烘垜浠彧鍒涘緩浜?jiǎn)涓涓狪OCP錛夛紝騫朵笖鎴戜滑娌℃湁浣跨敤涓寸晫鍖猴紒闅鵑亾涓嶄細(xì)浜х敓鍐茬獊鍚楋紵涓嶇敤鑰冭檻鍚屾闂鍚楋紵  <br><br>榪欐鏄疘OCP鐨勫ゥ濡欐墍鍦ㄣ侷OCP涓嶆槸涓涓櫘閫氱殑瀵硅薄錛屼笉闇瑕佽冭檻綰跨▼瀹夊叏闂銆傚畠浼?xì)鑷姩璋冮厤璁块棶瀹冪殑绾拷E嬶細(xì)濡傛灉鏌愪釜socket涓婃湁涓涓嚎紼婣姝e湪璁塊棶錛岄偅涔堢嚎紼婤鐨勮闂姹備細(xì)琚垎閰嶅埌鍙﹀涓涓猻ocket銆傝繖涓鍒囬兘鏄敱緋葷粺鑷姩璋冮厤鐨勶紝鎴戜滑鏃犻渶榪囬棶銆? <img src ="http://www.shnenglu.com/mmdengwo/aggbug/144255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mmdengwo/" target="_blank">娌涙矝</a> 2011-04-14 22:33 <a href="http://www.shnenglu.com/mmdengwo/archive/2011/04/14/144255.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://y8e8.com" target="_blank">亚洲欧美春色</a>| <a href="http://syruili.com" target="_blank">国产精品国色综合久久</a>| <a href="http://alio-ai.com" target="_blank">国产亚洲aⅴaaaaaa毛片</a>| <a href="http://036762.com" target="_blank">亚洲欧美日韩国产</a>| <a href="http://writeingo.com" target="_blank">免费精品视频</a>| <a href="http://by4433.com" target="_blank">亚洲精品国精品久久99热</a>| <a href="http://88488848.com" target="_blank">一区二区国产精品</a>| <a href="http://3315588.com" target="_blank">国产精品伊人日日</a>| <a href="http://iotbzw.com" target="_blank">老妇喷水一区二区三区</a>| <a href="http://979695.com" target="_blank">美女日韩欧美</a>| <a href="http://97caoporm.com" target="_blank">一区二区三区日韩欧美精品</a>| <a href="http://xxx444vip.com" target="_blank">av不卡在线观看</a>| <a href="http://979695.com" target="_blank">国产亚洲免费的视频看</a>| <a href="http://86868o.com" target="_blank">欧美aⅴ99久久黑人专区</a>| <a href="http://8880850.com" target="_blank">欧美大片91</a>| <a href="http://hdsywang.com" target="_blank">亚洲在线成人精品</a>| <a href="http://ayxchc.com" target="_blank">久久av在线看</a>| <a href="http://2111952.com" target="_blank">99热这里只有精品8</a>| <a href="http://227c7.com" target="_blank">亚洲一区二区在线播放</a>| <a href="http://heshundadi.com" target="_blank">黄色在线一区</a>| <a href="http://whrcjy.com" target="_blank">亚洲欧洲另类</a>| <a href="http://122332.com" target="_blank">黄色精品免费</a>| <a href="http://scratbag.com" target="_blank">日韩一区二区电影网</a>| <a href="http://avtt0.com" target="_blank">国产亚洲欧洲一区高清在线观看</a>| <a href="http://cabenn.com" target="_blank">亚洲第一中文字幕</a>| <a href="http://phdy999.com" target="_blank">国产欧美丝祙</a>| <a href="http://033530.com" target="_blank">国内精品国产成人</a>| <a href="http://456316.com" target="_blank">亚洲一区激情</a>| <a href="http://y65c.com" target="_blank">欧美日韩aaaaa</a>| <a href="http://4915w.com" target="_blank">黄色av成人</a>| <a href="http://youminwang.com" target="_blank">麻豆91精品</a>| <a href="http://eastasp.com" target="_blank">亚洲精品视频一区</a>| <a href="http://alio-ai.com" target="_blank">欧美一区二区三区视频免费播放</a>| <a href="http://tjpzgs.com" target="_blank">国产性猛交xxxx免费看久久</a>| <a href="http://www993997.com" target="_blank">欧美一区=区</a>| <a href="http://dgxinshidai.com" target="_blank">久久一二三四</a>| <a href="http://72966t.com" target="_blank">99日韩精品</a>| <a href="http://o10669.com" target="_blank">国产伦精品一区二区三区照片91 </a>| <a href="http://04781900.com" target="_blank">久久综合网hezyo</a>| <a href="http://4388x3.com" target="_blank">亚洲精品专区</a>| <a href="http://sg-lxs.com" target="_blank">欧美性一二三区</a>| <a href="http://378682.com" target="_blank">欧美不卡高清</a>| <a href="http://rljyy.com" target="_blank">国产三级欧美三级日产三级99</a>| <a href="http://52sougou.com" target="_blank">亚洲电影免费观看高清完整版在线观看 </a>| <a href="http://www24699.com" target="_blank">久久精品91久久久久久再现</a>| <a href="http://lcqrsj.com" target="_blank">一区二区三区高清视频在线观看</a>| <a href="http://csjtzn.com" target="_blank">欧美一区二区性</a>| <a href="http://1188188.com" target="_blank">中文欧美日韩</a>| <a href="http://dy25777.com" target="_blank">欧美福利电影网</a>| <a href="http://zqx186.com" target="_blank">免费看成人av</a>| <a href="http://jnhrjixie.com" target="_blank">国产欧美一区二区三区久久</a>| <a href="http://40346c.com" target="_blank">亚洲美女性视频</a>| <a href="http://www-36900.com" target="_blank">亚洲精品乱码视频</a>| <a href="http://tcgo903.com" target="_blank">久久婷婷国产麻豆91天堂</a>| <a href="http://www-833898.com" target="_blank">欧美一区二区三区在线看</a>| <a href="http://caobenfan1891.com" target="_blank">欧美日韩岛国</a>| <a href="http://www47777.com" target="_blank">亚洲精品免费一二三区</a>| <a href="http://www62265.com" target="_blank">亚洲高清123</a>| <a href="http://www8888803.com" target="_blank">久久久久综合网</a>| <a href="http://qqqtrip.com" target="_blank">久久另类ts人妖一区二区</a>| <a href="http://yyypdq.com" target="_blank">国产精品一区二区黑丝</a>| <a href="http://luobu520.com" target="_blank">亚洲午夜成aⅴ人片</a>| <a href="http://qiruiwangluo.com" target="_blank">亚洲午夜电影</a>| <a href="http://chinashixin.com" target="_blank">欧美日韩精品三区</a>| <a href="http://my777752.com" target="_blank">99国产一区二区三精品乱码</a>| <a href="http://7749137.com" target="_blank">日韩图片一区</a>| <a href="http://110488.com" target="_blank">欧美三日本三级三级在线播放</a>| <a href="http://asanny.com" target="_blank">最新中文字幕亚洲</a>| <a href="http://shenshijuesheying.com" target="_blank">日韩视频一区二区在线观看 </a>| <a href="http://yys4.com" target="_blank">国产一区 二区 三区一级</a>| <a href="http://72avav.com" target="_blank">午夜伦欧美伦电影理论片</a>| <a href="http://dkmcjc.com" target="_blank">欧美在线影院在线视频</a>| <a href="http://ywy99.com" target="_blank">国产性天天综合网</a>| <a href="http://ywy99.com" target="_blank">久久美女艺术照精彩视频福利播放</a>| <a href="http://www49966.com" target="_blank">久久久亚洲国产天美传媒修理工 </a>| <a href="http://yjsp8888.com" target="_blank">欧美日韩和欧美的一区二区</a>| <a href="http://9a5x.com" target="_blank">99日韩精品</a>| <a href="http://www17bxbx.com" target="_blank">香蕉国产精品偷在线观看不卡</a>| <a href="http://bkf23.com" target="_blank">国产美女精品一区二区三区</a>| <a href="http://epiegame.com" target="_blank">欧美一区二区精品</a>| <a href="http://wwwen41.com" target="_blank">免费看av成人</a>| <a href="http://9lunli.com" target="_blank">亚洲视频免费观看</a>| <a href="http://域名" target="_blank">国产婷婷色一区二区三区</a>| <a href="http://yujiaosanye.com" target="_blank">久久精品欧美日韩</a>| <a href="http://592xyy.com" target="_blank">亚洲国产精品第一区二区</a>| <a href="http://roujizz.com" target="_blank">一区二区三区四区五区视频</a>| <a href="http://dddd30.com" target="_blank">国产精品欧美日韩久久</a>| <a href="http://neudlac.com" target="_blank">欧美在线观看你懂的</a>| <a href="http://ganmabook.com" target="_blank">欧美高清不卡在线</a>| <a href="http://556995.com" target="_blank">亚洲一区二区三区在线看</a>| <a href="http://www57669.com" target="_blank">国产情侣一区</a>| <a href="http://77777gao.com" target="_blank">男女激情久久</a>| <a href="http://ridenimbus.com" target="_blank">亚洲视频网站在线观看</a>| <a href="http://hhbz518.com" target="_blank">久久中文欧美</a>| <a href="http://jyboke.com" target="_blank">中文高清一区</a>| <a href="http://myasker.com" target="_blank">精品成人乱色一区二区</a>| <a href="http://simextec.com" target="_blank">欧美人成在线</a>| <a href="http://zisxks.com" target="_blank">久久精品99久久香蕉国产色戒</a>| <a href="http://0855dyw.com" target="_blank">亚洲电影下载</a>| <a href="http://126film.com" target="_blank">久久国产精彩视频</a>| <a href="http://tzhsdy.com" target="_blank">亚洲毛片在线看</a>| <a href="http://kk8586.com" target="_blank">国产亚洲永久域名</a>| <a href="http://kasimcoal.com" target="_blank">欧美日韩精品免费观看</a>| <a href="http://saobitv.com" target="_blank">久久国产综合精品</a>| <a href="http://7m08.com" target="_blank">99精品欧美</a>| <a href="http://xmjhyey.com" target="_blank">欧美成人亚洲成人</a>| <a href="http://805185.com" target="_blank">欧美一级在线亚洲天堂</a>| <a href="http://yjizz08.com" target="_blank">亚洲欧洲日产国产网站</a>| <a href="http://www8xoy.com" target="_blank">国产欧美三级</a>| <a href="http://580078.com" target="_blank">欧美中文字幕在线播放</a>| <a href="http://haohetour.com" target="_blank">美女国产精品</a>| <a href="http://678255.com" target="_blank">中文一区二区</a>| <a href="http://430390.com" target="_blank">亚洲电影免费在线观看</a>| <a href="http://gzw33.com" target="_blank">久久精品国产一区二区三</a>| <a href="http://86868o.com" target="_blank">99国产精品国产精品久久</a>| <a href="http://1x118.com" target="_blank">国产一区二区激情</a>| <a href="http://nebnb89.com" target="_blank">国产精品a级</a>| <a href="http://yh5557.com" target="_blank">欧美国产欧美亚洲国产日韩mv天天看完整</a>| <a href="http://xiaofan123.com" target="_blank">亚洲视频精品</a>| <a href="http://p35cc.com" target="_blank">亚洲精品一区二区网址</a>| <a href="http://sygxjt.com" target="_blank">嫩草影视亚洲</a>| <a href="http://gztcm01.com" target="_blank">久久精品一二三</a>| <a href="http://8eeeccc.com" target="_blank">亚洲欧美在线另类</a>| <a href="http://tv-miya188.com" target="_blank">日韩视频一区二区三区在线播放免费观看</a>| <a href="http://8111357.com" target="_blank">国产日韩一级二级三级</a>| <a href="http://www068hs.com" target="_blank">欧美特黄一区</a>| <a href="http://nachang5117.com" target="_blank">欧美国产日韩视频</a>| <a href="http://85041960.com" target="_blank">麻豆国产精品va在线观看不卡</a>| <a href="http://yunyang0991.com" target="_blank">午夜精品视频网站</a>| <a href="http://04781900.com" target="_blank">中文一区二区</a>| <a href="http://9911444.com" target="_blank">一区二区欧美日韩</a>| <a href="http://xxxcalls.com" target="_blank">日韩一区二区高清</a>| <a href="http://www-442336.com" target="_blank">亚洲精品视频在线播放</a>| <a href="http://8111357.com" target="_blank">亚洲国产日韩欧美在线动漫</a>| <a href="http://wzxjzx.com" target="_blank">农夫在线精品视频免费观看</a>| <a href="http://099idc.com" target="_blank">久久久久久精</a>| <a href="http://fdgkinetic.com" target="_blank">久久精品人人做人人综合</a>| <a href="http://3597777.com" target="_blank">欧美亚洲一区二区三区</a>| <a href="http://gdjuba.com" target="_blank">亚洲免费一在线</a>| <a href="http://9ctv2.com" target="_blank">亚洲综合精品自拍</a>| <a href="http://muwendada.com" target="_blank">亚洲一区二区三区高清不卡</a>| <a href="http://bdkaoyan.com" target="_blank">夜夜嗨av一区二区三区四区 </a>| <a href="http://wogoyao.com" target="_blank">欧美三级电影一区</a>| <a href="http://ttmitch.com" target="_blank">欧美日韩三级在线</a>| <a href="http://wwwcao88.com" target="_blank">欧美三级电影网</a>| <a href="http://666888123.com" target="_blank">国产精品成人v</a>| <a href="http://4449992.com" target="_blank">国产精品国产三级国产aⅴ入口</a>| <a href="http://sepapapa8888.com" target="_blank">欧美日韩大陆在线</a>| <a href="http://cl6m.com" target="_blank">国产精品久久久久久av下载红粉</a>| <a href="http://66jj99.com" target="_blank">欧美视频不卡中文</a>| <a href="http://98tangav.com" target="_blank">国产精品日日做人人爱</a>| <a href="http://instantptt.com" target="_blank">国产精品色婷婷</a>| <a href="http://302262.com" target="_blank">国产在线拍揄自揄视频不卡99</a>| <a href="http://44cgcg.com" target="_blank">国产亚洲一区在线播放</a>| <a href="http://3dprintingferuima.com" target="_blank">国产一区二区三区日韩欧美</a>| <a href="http://www-964664.com" target="_blank">国语自产偷拍精品视频偷 </a>| <a href="http://bby99.com" target="_blank">欧美好骚综合网</a>| <a href="http://707fx.com" target="_blank">欧美午夜精品久久久久久超碰</a>| <a href="http://www48929.com" target="_blank">国产精品久久精品日日</a>| <a href="http://5456yy.com" target="_blank">国产精品爽黄69</a>| <a href="http://689558.com" target="_blank">黄色成人在线免费</a>| <a href="http://7343888.com" target="_blank">日韩亚洲欧美中文三级</a>| <a href="http://www1126v.com" target="_blank">亚洲一区精品在线</a>| <a href="http://erodasy.com" target="_blank">久久久久国产精品午夜一区</a>| <a href="http://jybiotek.com" target="_blank">欧美风情在线</a>| <a href="http://chainhuayu.com" target="_blank">99精品99久久久久久宅男</a>| <a href="http://www-236677.com" target="_blank">午夜久久久久久</a>| <a href="http://kittybob.com" target="_blank">美女露胸一区二区三区</a>| <a href="http://023nszz.com" target="_blank">欧美视频日韩视频</a>| <a href="http://bjjxgcsxy.com" target="_blank">国内精品久久久久久影视8</a>| <a href="http://xxx444vip.com" target="_blank">亚洲国产精品久久人人爱蜜臀</a>| <a href="http://lgaoxiao.com" target="_blank">99re6这里只有精品</a>| <a href="http://ttdy20.com" target="_blank">欧美一区视频在线</a>| <a href="http://91mdtv.com" target="_blank">欧美大片在线观看</a>| <a href="http://kk66mm.com" target="_blank">亚洲午夜精品久久久久久app</a>| <a href="http://seanzhau.com" target="_blank">欧美亚洲综合另类</a>| <a href="http://saobitv.com" target="_blank">欧美激情日韩</a>| <a href="http://musicshq.com" target="_blank">国产亚洲欧美日韩在线一区</a>| <a href="http://373336.com" target="_blank">亚洲精品麻豆</a>| <a href="http://710952.com" target="_blank">久久久久久久久久久成人</a>| <a href="http://am3757.com" target="_blank">亚洲国产精品传媒在线观看</a>| <a href="http://xiuxiu124.com" target="_blank">亚洲一区二区三区高清不卡</a>| <a href="http://bodabloc.com" target="_blank">久久婷婷国产综合尤物精品</a>| <a href="http://138128.com" target="_blank">欧美日韩在线三级</a>| <a href="http://tonglijinshu.com" target="_blank">伊人婷婷久久</a>| <a href="http://987kt.com" target="_blank">午夜激情综合网</a>| <a href="http://x1317.com" target="_blank">亚洲韩国青草视频</a>| <a href="http://bnb-gndc.com" target="_blank">欧美亚洲综合在线</a>| <a href="http://7770790.com" target="_blank">欧美色播在线播放</a>| <a href="http://ategpu.com" target="_blank">国产精品揄拍500视频</a>| <a href="http://096577.com" target="_blank">国产一区二区三区免费不卡</a>| <a href="http://hhjc7.com" target="_blank">日韩午夜在线观看视频</a>| <a href="http://avtt0.com" target="_blank">久久久久免费观看</a>| <a href="http://qdpetlove.com" target="_blank">一区二区三区日韩精品视频</a>| <a href="http://kinghongs.com" target="_blank">久久亚洲精品伦理</a>| <a href="http://cancerrxa.com" target="_blank">国产日韩欧美精品在线</a>| <a href="http://xhamster0.com" target="_blank">亚洲午夜久久久久久尤物</a>| <a href="http://www633998.com" target="_blank">欧美成ee人免费视频</a>| <a href="http://y65o.com" target="_blank">久久av一区</a>| <a href="http://www149aa.com" target="_blank">国产日韩在线看片</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>