锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 娉ㄦ剰鍦╓insock 2鍙戝竷涔嬪悗錛岄噸鍙營/O浠嶅彲鍦╓indows NT鍜學(xué)indows 2000榪欎袱涓搷浣滅郴緇熶腑錛岄殢R e a d F i l e鍜學(xué)r i t e F i l e涓や釜鍑芥暟浣跨敤銆備絾鏄紝W(xué)indows 95鍜學(xué)indows 98鍧囦笉鍏峰榪欎竴鍔熻兘銆傝冭檻鍒板簲鐢ㄧ▼搴忕殑璺ㄥ鉤鍙板吋瀹歸棶棰橈紝鍚屾椂鑰冭檻鍒版ц兘鏂歸潰鐨勫洜绱狅紝搴斿敖閲忛伩鍏嶄嬌鐢╓i n 3 2鐨凴 e a d F i l e鍜學(xué)r i t e F i l e鍑芥暟錛屽垎鍒崲浠 S A R e c v鍜學(xué) S A S e n d鍑芥暟銆傛湰鑺傚彧鎵撶畻璁茶堪閫氳繃鏂扮殑Winsock 2鍑芥暟錛屾潵浣跨敤閲嶅彔I/O妯″瀷銆?br />瑕佹兂鍦ㄤ竴涓鎺ュ瓧涓婁嬌鐢ㄩ噸鍙營 / O妯″瀷錛岄鍏堝繀欏諱嬌鐢╓ S A _ F L A G _ O V E R L A P P E D榪欎釜鏍囧織錛屽垱寤轟竴涓鎺ュ瓧銆傚涓嬫墍紺猴細(xì) 聽 s = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED); 聽typedef struct WSAOVERLAPPED 澶辮觸鍚庯紝鐢眑 p c b Tr a n s f e r鍙傛暟鎸囧悜鐨勫間笉浼?xì)杩涜鏇存枎图岃屼笖鎴戜滑鐨勫簲鐢ㄧ▼搴忓簲璋冪敤W S A G e t L a s t E r r o r鍑芥暟錛岃皟鏌ュ埌搴曟槸浣曠鍘熷洜閫犳垚浜嗚皟鐢ㄥけ璐ャ?br />鍦ㄧ▼搴忔竻鍗? - 7涓紝鎴戜滑鍚戝ぇ瀹墮槓榪頒簡濡備綍緙栧埗涓涓畝鍗曠殑鏈嶅姟鍣ㄥ簲鐢紝浠ゅ叾鍦ㄤ竴涓鎺ュ瓧涓婂閲嶅彔I / O鎿嶄綔榪涜綆$悊錛岀▼搴忓畬鍏ㄥ埄鐢ㄤ簡鍓嶈堪鐨勪簨浠墮氱煡鏈哄埗銆傚璇ョ▼搴忛噰鐢ㄧ殑緙栫▼姝ラ鎬葷粨濡備笅錛?br />1) 鍒涘緩涓涓鎺ュ瓧錛屽紑濮嬪湪鎸囧畾鐨勭鍙d笂鐩戝惉榪炴帴璇鋒眰銆?br />2) 鎺ュ彈涓涓繘鍏ョ殑榪炴帴璇鋒眰銆?br />3) 涓烘帴鍙楃殑濂楁帴瀛楁柊寤轟竴涓猈 S A O V E R L A P P E D緇撴瀯錛屽茍涓鴻緇撴瀯鍒嗛厤涓涓簨浠跺璞″彞鏌勩?br />涔熷皢浜嬩歡瀵硅薄鍙ユ焺鍒嗛厤緇欎竴涓簨浠舵暟緇勶紝浠ヤ究紼嶅悗鐢盬 S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟浣跨敤銆?br />4) 鍦ㄥ鎺ュ瓧涓婃姇閫掍竴涓紓姝 S A R e c v璇鋒眰錛屾寚瀹氬弬鏁頒負(fù)W S A O V E R L A P P E D緇撴瀯銆?br />娉ㄦ剰鍑芥暟閫氬父浼?xì)浠ュまp觸鍛婄粓錛岃繑鍥濻 O C K E T _ E R R O R閿欒鐘舵乄 S A _ I O _ P E N D I N G錛圛/O鎿嶄綔灝氭湭瀹屾垚錛夈?br />5) 浣跨敤姝ラ3 )鐨勪簨浠舵暟緇勶紝璋冪敤W S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟錛屽茍絳夊緟涓庨噸鍙犺皟鐢ㄥ叧鑱斿湪涓璧風(fēng)殑浜嬩歡榪涘叆鈥滃凡浼犱俊鈥濈姸鎬侊紙鎹㈣█涔嬶紝絳夊緟閭d釜浜嬩歡鐨勨滆Е鍙戔濓級銆?br />6) WSAWa i t F o r M u l t i p l e E v e n t s鍑芥暟瀹屾垚鍚庯紝閽堝浜嬩歡鏁扮粍錛岃皟鐢╓ S A R e s e t E v e n t錛堥噸璁句簨浠訛級鍑芥暟錛屼粠鑰岄噸璁句簨浠跺璞★紝騫跺瀹屾垚鐨勯噸鍙犺姹傝繘琛屽鐞嗐?br />7) 浣跨敤W S A G e t O v e r l a p p e d R e s u l t鍑芥暟錛屽垽鏂噸鍙犺皟鐢ㄧ殑榪斿洖鐘舵佹槸浠涔堛?br />8) 鍦ㄥ鎺ュ瓧涓婃姇閫掑彟涓涓噸鍙燱 S A R e c v璇鋒眰銆?br />9) 閲嶅姝ラ5 ) ~ 8 )銆?br />榪欎釜渚嬪瓙鏋佹槗鎵╁睍錛屾彁渚涘澶氫釜濂楁帴瀛楃殑鏀寔銆傛柟娉曟槸灝嗕唬鐮佺殑閲嶅彔I / O澶勭悊閮ㄥ垎縐昏嚦涓涓嫭绔嬬殑綰跨▼鍐咃紝璁╀富搴旂敤紼嬪簭綰跨▼涓洪檮鍔犵殑榪炴帴璇鋒眰鎻愪緵鏈嶅姟銆?br />紼嬪簭娓呭崟8-7 閲囩敤浜嬩歡鏈哄埗鐨勭畝鍗曢噸鍙營 / O澶勭悊紺轟緥
]]>
鍦╓i n s o c k涓紝鐩告瘮鎴戜滑榪勪粖涓烘瑙i噴榪囩殑鍏朵粬鎵鏈塈 / O妯″瀷錛岄噸鍙營 / O錛圤verlapped I/O錛?br />妯″瀷浣垮簲鐢ㄧ▼搴忚兘杈懼埌鏇翠匠鐨勭郴緇熸ц兘銆傞噸鍙犳ā鍨嬬殑鍩烘湰璁捐鍘熺悊渚挎槸璁╁簲鐢ㄧ▼搴忎嬌鐢ㄤ竴涓噸鍙犵殑鏁版嵁緇撴瀯錛屼竴嬈℃姇閫掍竴涓垨澶氫釜Winsock I/O璇鋒眰銆傞拡瀵歸偅浜涙彁浜ょ殑璇鋒眰錛屽湪瀹冧滑瀹屾垚涔嬪悗錛屽簲鐢ㄧ▼搴忓彲涓哄畠浠彁渚涙湇鍔°傝妯″瀷閫傜敤浜庨櫎Windows CE涔嬪鐨勫悇縐峎i n d o w s騫沖彴銆?br />妯″瀷鐨勬諱綋璁捐浠i n 3 2閲嶅彔I / O鏈哄埗涓哄熀紜銆傞偅涓満鍒跺彲閫氳繃R e a d F i l e鍜學(xué)r i t e F i l e涓や釜鍑芥暟錛岄拡瀵硅澶囨墽琛孖 / O鎿嶄綔銆?br />鏈寮濮嬬殑鏃跺欙紝W(xué)i n s o c k閲嶅彔I / O妯″瀷鍙兘搴旂敤浜嶹indows NT鎿嶄綔緋葷粺涓婅繍琛岀殑Wi n s o c k1 . 1搴旂敤紼嬪簭銆備綔涓哄簲鐢ㄧ▼搴忥紝瀹冨彲閽堝涓涓鎺ュ瓧鍙ユ焺錛岃皟鐢≧ e a d F i l e浠ュ強(qiáng)Wr i t e F i l e錛屽悓鏃舵寚瀹氫竴涓噸鍙犲紡緇撴瀯錛堢◢鍚庤榪幫級錛屼粠鑰屽埄鐢ㄨ繖涓ā鍨嬨傝嚜Winsock 2鍙戝竷寮濮嬶紝閲嶅彔I / O渚垮凡闆嗘垚鍒版柊鐨刉i n s o c k鍑芥暟涓紝姣斿W S A S e n d鍜學(xué) S A R e c v銆傝繖鏍蜂竴鏉ワ紝閲嶅彔I / O妯″瀷渚胯兘閫傜敤浜庡畨瑁呬簡Winsock 2鐨勬墍鏈塛i n d o w s騫沖彴銆?/p>
聽 鍒涘緩濂楁帴瀛楃殑鏃跺欙紝鍋囧浣跨敤鐨勬槸s o c k e t鍑芥暟錛岃岄潪W S A S o c k e t鍑芥暟錛岄偅涔堜細(xì)榛樿璁劇疆W S A _ F L A G _ O V E R L A P P E D鏍囧織銆傛垚鍔熷緩濂戒竴涓鎺ュ瓧錛屽悓鏃跺皢鍏朵笌涓涓湰鍦版帴鍙g粦瀹氬埌涓璧峰悗錛屼究鍙紑濮嬭繘琛岄噸鍙營 / O 鎿嶄綔錛屾柟娉曟槸璋冪敤涓嬭堪鐨刉i n s o c k 鍑芥暟錛屽悓鏃舵寚瀹氫竴涓?br />W S A O V E R L A P P E D緇撴瀯錛堝彲閫夛級錛?br />鈻?W S A S e n d
鈻?W S A S e n d To
鈻?W S A R e c v
鈻?W S A R e c v F r o m
鈻?W S A I o c t l
鈻?A c c e p t E x
鈻?Tr n a s m i t F i l e
澶у鐜板湪鎴栬宸茬粡鐭ラ亾錛屽叾涓瘡涓嚱鏁伴兘涓庝竴涓鎺ュ瓧涓婃暟鎹殑鍙戦併佹暟鎹帴鏀朵互鍙?qiáng)杩炴帴鐨勬帴鍙楁湁鍏炽傚洜姝わ紝榪欎簺媧誨姩鍙兘浼?xì)鑺辨瀬灏戠殑鏃堕棿鎵嶈兘瀹屾垚銆傝繖姝f槸姣忎釜鍑芥暟閮藉彲鎺ュ彈涓涓猈 S A O V E R L A P P E D緇撴瀯浣滀負(fù)鍙傛暟鐨勫師鍥犮傝嫢闅忎竴涓猈 S A O V E R L A P P E D緇撴瀯涓璧瘋皟鐢ㄨ繖浜涘嚱鏁幫紝鍑芥暟浼?xì)绔嬪崨_畬鎴愬茍榪斿洖錛屾棤璁哄鎺ュ瓧鏄惁璁句負(fù)閿佸畾妯″紡錛堟湰绔犲紑澶村凡璇︾粏璁茶繃浜嗭級銆傚畠
浠緷璧栦簬W S A O V E R L A P P E D緇撴瀯鏉ヨ繑鍥炰竴涓狪 / O璇鋒眰鐨勮繑鍥炪?br />涓昏鏈変袱涓柟娉曞彲鐢ㄦ潵綆$悊涓涓噸鍙營 / O璇鋒眰鐨勫畬鎴愶細(xì)鎴戜滑鐨勫簲鐢ㄧ▼搴忓彲絳夊緟鈥滀簨浠跺璞¢氱煡鈥濓紝浜﹀彲閫氳繃鈥滃畬鎴愪緥紼嬧濓紝瀵瑰凡緇忓畬鎴愮殑璇鋒眰鍔犱互澶勭悊銆備笂闈㈠垪鍑虹殑鍑芥暟錛?A c c e p t E x闄ゅ錛夎繕鏈夊彟涓涓父鐢ㄧ殑鍙傛暟錛?br />l p C o m p l e t i o n R O U T I N E銆傝鍙傛暟鎸囧畾鐨勬槸涓涓彲閫夌殑鎸囬拡錛屾寚鍚戜竴涓畬鎴愪緥紼嬪嚱鏁幫紝鍦ㄩ噸鍙犺姹傚畬鎴愬悗璋冪敤銆傛帴涓嬪幓錛屾垜浠皢鎺㈣浜嬩歡閫氱煡鏂規(guī)硶銆傚湪鏈珷紼嶅悗錛岃繕浼?xì)浠嬀l嶅浣曚嬌鐢ㄥ彲閫夌殑瀹屾垚渚嬬▼錛屼唬鏇夸簨浠訛紝瀵瑰畬鎴愮殑閲嶅彔璇鋒眰鍔犱互澶勭悊銆?br />1. 浜嬩歡閫氱煡
閲嶅彔I / O鐨勪簨浠墮氱煡鏂規(guī)硶瑕佹眰灝哤i n 3 2浜嬩歡瀵硅薄涓嶹 S A O V E R L A P P E D緇撴瀯鍏寵仈鍦ㄤ竴璧楓傝嫢浣跨敤涓涓猈 S A O V E R L A P P E D緇撴瀯錛屽彂鍑哄儚W S A S e n d鍜學(xué) S A R e c v榪欐牱鐨処 / O璋冪敤錛屽畠浠細(xì)绔嬪嵆榪斿洖銆?br />閫氬父錛屽ぇ瀹朵細(xì)鍙戠幇榪欎簺I / O 璋冪敤浼?xì)浠ュまp觸鍛婄粓錛岃繑鍥濻 O C K E T _ E R R O R 銆備嬌鐢╓ S A G e t L a s t E r r o r鍑芥暟錛屼究鍙幏寰椾笌閿欒鐘舵佹湁鍏崇殑涓涓姤鍛娿傝繖涓敊璇姸鎬佹剰鍛崇潃I / O鎿嶄綔姝e湪榪涜銆傜◢鍚庣殑鏌愪釜鏃墮棿錛屾垜浠殑搴旂敤紼嬪簭闇瑕佺瓑鍊欎笌W S A O V E R L A P P E D緇撴瀯瀵瑰簲鐨勪簨浠跺璞★紝浜嗚В涓涓噸鍙營 / O璇風(fēng)ず浣曟椂瀹屾垚銆俉 S A O V E R L A P P E D緇撴瀯鍦ㄤ竴涓噸鍙營 / O璇鋒眰鐨勫垵濮嬪寲錛屽強(qiáng)鍏跺悗緇殑瀹屾垚涔嬮棿錛屾彁渚涗簡涓縐嶆矡閫氭垨閫氫俊鏈哄埗銆備笅闈㈡槸榪欎釜緇撴瀯鐨勫畾涔夛細(xì)
聽{
聽聽DWORD聽Internal;
聽聽DWORD InternalHigh;
聽聽DWORD Offset;
聽聽DWORD OffsetHigh;
聽聽WSAEVENT hEvent;
聽}WSAOVERLAPPED,FAR *LPWSAOVERLPPED;
聽
鍏朵腑錛孖 n t e r n a l銆両 n t e r n a l H i g h銆丱 ff s e t鍜孫 ff s e t H i g h瀛楁鍧囩敱緋葷粺鍦ㄥ唴閮ㄤ嬌鐢紝涓嶅簲鐢卞簲鐢ㄧ▼搴忕洿鎺ヨ繘琛屽鐞嗘垨浣跨敤銆傝屽彟涓鏂歸潰錛?h E v e n t瀛楁鏈夌偣鍎跨壒孌婏紝瀹冨厑璁稿簲鐢ㄧ▼搴忓皢涓涓簨浠跺璞″彞鏌勫悓涓涓鎺ュ瓧鍏寵仈璧鋒潵銆傚ぇ瀹跺彲鑳戒細(xì)瑙夊緱濂囨紝濡備綍灝嗕竴涓簨浠跺璞″彞鏌勫垎閰嶇粰璇ュ瓧孌靛憿錛熸濡傛垜浠棭鍏堝湪W S A E v e n t S e l e c t妯″瀷涓榪扮殑閭f牱錛屽彲鐢╓ S A C r e a t e E v e n t鍑芥暟鏉ュ垱寤轟竴涓簨浠跺璞″彞鏌勩備竴鏃﹀垱寤哄ソ涓涓簨浠跺彞鏌勶紝綆鍗曞湴灝嗛噸鍙犵粨鏋勭殑h E v e n t瀛楁鍒嗛厤緇欎簨浠跺彞鏌勶紝鍐嶄嬌鐢ㄩ噸鍙犵粨鏋勶紝璋冪敤涓涓猈i n s o c k鍑芥暟鍗沖彲錛屾瘮濡俉 S A S e n d鎴朩 S A R e c v銆?br />涓涓噸鍙營 / O璇鋒眰鏈緇堝畬鎴愬悗錛屾垜浠殑搴旂敤紼嬪簭瑕佽礋璐e彇鍥為噸鍙營 / O鎿嶄綔鐨勭粨鏋溿備竴涓噸鍙犺姹傛搷浣滄渶緇堝畬鎴愪箣鍚庯紝鍦ㄤ簨浠墮氱煡鏂規(guī)硶涓紝 Wi n s o c k浼?xì)鏇存敼涓庝竴涓猈 S A O V E R L A P P E D緇撴瀯瀵瑰簲鐨勪竴涓簨浠跺璞$殑浜嬩歡浼犱俊鐘舵侊紝灝嗗叾浠庘滄湭浼犱俊鈥濆彉鎴愨滃凡浼犱俊鈥濄傜敱浜庝竴涓簨浠跺璞″凡鍒嗛厤緇橶 S A O V E R L A P P E D緇撴瀯錛屾墍浠ュ彧闇綆鍗曞湴璋冪敤W S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟錛屼粠鑰屽垽鏂嚭涓涓噸鍙營 / O璋冪敤鍦ㄤ粈涔堟椂鍊欏畬鎴愩傝鍑芥暟宸插湪鎴戜滑鍓嶉潰璁茶堪WSAEventSelect I/O妯″瀷鏃朵粙緇嶈繃浜嗐俉 S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟浼?xì)绛夊欎竴孌佃瀹氱殑鏃墮棿錛岀瓑寰呬竴涓垨澶氫釜浜嬩歡瀵硅薄榪涘叆鈥滃凡浼犱俊鈥濈姸鎬併傚湪姝ゅ啀嬈℃彁閱掑ぇ瀹舵敞鎰忥細(xì) W S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟涓嬈?br />鏈澶氬彧鑳界瓑寰? 4涓簨浠跺璞°傚彂鐜頒竴嬈¢噸鍙犺姹傚畬鎴愪箣鍚庯紝鎺ョ潃闇瑕佽皟鐢╓ S A G e t O v e r l a p p e dR e s u l t錛堝彇寰楅噸鍙犵粨鏋勶級鍑芥暟錛屽垽鏂偅涓噸鍙犺皟鐢ㄥ埌搴曟槸鎴愬姛錛岃繕鏄け璐ャ傝鍑芥暟鐨勫畾涔夊涓嬶細(xì)
聽BOOL WSAGetOverlappedResult(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWSAOVERLAPPED聽lpOverlapped,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWORD聽lpcbTransfer,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽BOOL聽聽fWait,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWORD聽lpdwFlags
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
鍏朵腑錛?s鍙傛暟鐢ㄤ簬鎸囧畾鍦ㄩ噸鍙犳搷浣滃紑濮嬬殑鏃跺欙紝涓庝箣瀵瑰簲鐨勯偅涓鎺ュ瓧銆俵 p O v e r l a p p e d鍙傛暟鏄竴涓寚閽堬紝瀵瑰簲浜庡湪閲嶅彔鎿嶄綔寮濮嬫椂錛屾寚瀹氱殑閭d釜W S A O V E R L A P P E D 緇撴瀯銆?br />l p c b Tr a n s f e r鍙傛暟涔熸槸涓涓寚閽堬紝瀵瑰簲涓涓狣 W O R D錛堝弻瀛楋級鍙橀噺錛岃礋璐f帴鏀朵竴嬈¢噸鍙犲彂閫佹垨鎺ユ敹鎿嶄綔瀹為檯浼犺緭鐨勫瓧鑺傛暟銆俧 Wa i t鍙傛暟鐢ㄤ簬鍐沖畾鍑芥暟鏄惁搴旇絳夊緟涓嬈″緟鍐籌紙鏈喅錛夌殑閲嶅彔鎿嶄綔瀹屾垚銆傝嫢灝唂 Wa i t璁句負(fù)T R U E錛岄偅涔堥櫎闈炴搷浣滃畬鎴愶紝鍚﹀垯鍑芥暟涓嶄細(xì)榪斿洖錛涜嫢璁句負(fù)FA L S E錛岃屼笖鎿嶄綔浠嶇劧澶勪簬鈥滃緟鍐斥濈姸鎬侊紝閭d箞W S A G e t O v e r l a p p e d R e s u l t鍑芥暟浼?xì)杩斿洖FA L S E鍊鹼紝鍚屾椂榪斿洖涓涓猈 S A _ I O _ I N C O M P L E T E錛圛 / O鎿嶄綔鏈畬鎴愶級閿欒銆備絾灝辨垜浠洰鍓嶇殑鎯呭喌鏉ヨ錛岀敱浜庨渶瑕佺瓑鍊欓噸鍙犳搷浣滅殑涓涓凡浼犱俊浜嬩歡瀹屾垚錛屾墍浠ヨ鍙傛暟鏃犺閲囩敤浠涔堣緗紝閮芥病鏈変換浣曟晥鏋溿?br />鏈鍚庝竴涓弬鏁版槸l p d w F l a g s錛屽畠瀵瑰簲浜庝竴涓寚閽堬紝鎸囧悜涓涓狣 W O R D錛堝弻瀛楋級錛岃礋璐f帴鏀剁粨鏋滄爣蹇楋紙鍋囧鍘熷厛鐨勯噸鍙犺皟鐢ㄦ槸鐢╓ S A R e c v鎴朩 S A R e c v F r o m鍑芥暟鍙戝嚭鐨勶級銆?br />濡俉 S A G e t O v e r l a p p e d R e s u l t鍑芥暟璋冪敤鎴愬姛錛岃繑鍥炲煎氨鏄疶 R U E銆傝繖鎰忓懗鐫鎴戜滑鐨勯噸鍙營 / O鎿嶄綔宸叉垚鍔熷畬鎴愶紝鑰屼笖鐢眑 p c b Tr a n s f e r鍙傛暟鎸囧悜鐨勫煎凡榪涜浜嗘洿鏂般傝嫢榪斿洖鍊兼槸FA L S E錛岄偅涔堝彲鑳芥槸鐢變笅榪頒換浣曚竴縐嶅師鍥犻犳垚鐨勶細(xì)
鈻?閲嶅彔I / O鎿嶄綔浠嶅鍦ㄢ滃緟鍐斥濈姸鎬併?br />鈻?閲嶅彔鎿嶄綔宸茬粡瀹屾垚錛屼絾鍚湁閿欒銆?br />鈻?閲嶅彔鎿嶄綔鐨勫畬鎴愮姸鎬佷笉鍙垽鍐籌紝鍥犱負(fù)鍦ㄦ彁渚涚粰W S A G e t O v e r l a p p e d R e s u l t鍑芥暟鐨勪竴涓垨
澶氫釜鍙傛暟涓紝瀛樺湪鐫閿欒銆?/p>
]]>
Wi n s o c k鎻愪緵浜嗗彟涓涓湁鐢ㄧ殑寮傛I / O妯″瀷銆傚拰W(xué) S A A s y n c S e l e c t妯″瀷綾諱技鐨勬槸錛屽畠涔熷厑璁稿簲鐢ㄧ▼搴忓湪涓涓垨澶氫釜濂楁帴瀛椾笂錛屾帴鏀朵互浜嬩歡涓哄熀紜鐨勭綉緇滀簨浠墮氱煡銆傚浜庤〃8 - 3鎬葷粨鐨勩佺敱W S A A s y n c S e l e c t妯″瀷閲囩敤鐨勭綉緇滀簨浠舵潵璇達(dá)紝瀹冧滑鍧囧彲鍘熷皝涓嶅姩鍦扮Щ妞嶅埌鏂版ā鍨嬨傚湪鐢ㄦ柊妯″瀷寮鍙戠殑搴旂敤紼嬪簭涓紝涔熻兘鎺ユ敹鍜屽鐞嗘墍鏈夐偅浜涗簨浠躲傝妯″瀷鏈涓昏鐨勫樊鍒湪浜庣綉緇滀簨浠朵細(xì)鎶曢掕嚦涓涓簨浠跺璞″彞鏌勶紝鑰岄潪鎶曢掕嚦涓涓獥鍙d緥紼嬨?br />浜嬩歡閫氱煡
浜嬩歡閫氱煡妯″瀷瑕佹眰鎴戜滑鐨勫簲鐢ㄧ▼搴忛拡瀵規(guī)墦綆椾嬌鐢ㄧ殑姣忎竴涓鎺ュ瓧錛岄鍏堝垱寤轟竴涓簨浠跺璞°傚垱寤烘柟娉曟槸璋冪敤W S A C r e a t e E v e n t鍑芥暟錛屽畠鐨勫畾涔夊涓嬶細(xì)
WSAEVENT WSACreateEvent(void);
W S A C r e a t e E v e n t鍑芥暟鐨勮繑鍥炲煎緢綆鍗曪紝灝辨槸涓涓垱寤哄ソ鐨勪簨浠跺璞″彞鏌勩備簨浠跺璞″彞鏌勫埌鎵嬪悗錛屾帴涓嬫潵蹇呴』灝嗗叾涓庢煇涓鎺ュ瓧鍏寵仈鍦ㄤ竴璧鳳紝鍚屾椂娉ㄥ唽鑷繁鎰熷叴瓚g殑緗戠粶浜嬩歡綾誨瀷錛屽琛? - 3鎵紺恒傝鍋氬埌榪欎竴鐐癸紝鏂規(guī)硶鏄皟鐢╓ S A E v e n t S e l e c t鍑芥暟錛屽瀹冪殑瀹氫箟濡備笅錛?/p>
int WSAEventSelect(
聽聽聽聽聽聽聽聽聽聽SOCKET s,聽
聽聽聽聽聽聽聽聽聽聽WSAEVENT hEventObject,
聽聽聽聽聽聽聽聽聽聽long聽lNetwordEvents
聽聽聽聽聽聽聽聽聽);
聽鍏朵腑錛?s鍙傛暟浠h〃鑷繁鎰熷叴瓚g殑濂楁帴瀛椼俬 E v e n t O b j e c t鍙傛暟鎸囧畾瑕佷笌濂楁帴瀛楀叧鑱斿湪涓璧風(fēng)殑聽浜嬩歡瀵硅薄鈥旂敤W S A C r e a t e E v e n t鍙栧緱鐨勯偅涓涓傝屾渶鍚庝竴涓弬鏁發(fā) N e t w o r k E v e n t s錛屽垯瀵瑰簲涓涓滀綅鎺╃爜鈥濓紝鐢ㄤ簬鎸囧畾搴旂敤紼嬪簭鎰熷叴瓚g殑鍚勭緗戠粶浜嬩歡綾誨瀷鐨勪竴涓粍鍚堬紙濡傝〃8 - 3鎵紺猴級銆傝鎯寵幏鐭ュ榪欎簺浜嬩歡綾誨瀷鐨勮緇嗚鏄庯紝璇峰弬鑰冩棭鍏堣璁鴻繃鐨刉SAAsyncSelect I/O妯″瀷銆?br />涓篧 S A E v e n t S e l e c t鍒涘緩鐨勪簨浠舵嫢鏈変袱縐嶅伐浣滅姸鎬侊紝浠ュ強(qiáng)涓ょ宸ヤ綔妯″紡銆傚叾涓紝涓ょ宸ヤ綔鐘舵佸垎鍒槸鈥滃凡浼犱俊鈥濓紙s i g n a l e d錛夊拰鈥滄湭浼犱俊鈥濓紙n o n s i g n a l e d錛夈傚伐浣滄ā寮忓垯鍖呮嫭鈥滀漢宸ラ噸璁鋸濓紙manual reset錛夊拰鈥滆嚜鍔ㄩ噸璁鋸濓紙auto reset錛夈俉 S A C r e a t e E v e n t鏈寮濮嬪湪涓縐嶆湭浼犱俊鐨勫伐浣滅姸鎬佷腑錛屽茍鐢ㄤ竴縐嶄漢宸ラ噸璁炬ā寮忥紝鏉ュ垱寤轟簨浠跺彞鏌勩傞殢鐫緗戠粶浜嬩歡瑙﹀彂浜嗕笌涓涓鎺ュ瓧鍏寵仈鍦?br />涓璧風(fēng)殑浜嬩歡瀵硅薄錛屽伐浣滅姸鎬佷究浼?xì)浠庘滄湭浼犱俊鈥濊漿鍙樻垚鈥滃凡浼犱俊鈥濄傜敱浜庝簨浠跺璞℃槸鍦ㄤ竴縐嶄漢宸ラ噸璁炬ā寮忎腑鍒涘緩鐨勶紝鎵浠ュ湪瀹屾垚浜嗕竴涓狪 / O璇鋒眰鐨勫鐞嗕箣鍚庯紝鎴戜滑鐨勫簲鐢ㄧ▼搴忛渶瑕佽礋璐e皢宸ヤ綔鐘舵佷粠宸蹭紶淇℃洿鏀逛負(fù)鏈紶淇°傝鍋氬埌榪欎竴鐐癸紝鍙皟鐢╓ S A R e s e t E v e n t鍑芥暟錛屽瀹冪殑瀹氫箟濡備笅錛?/p>
聽BOOL 聽WSAResetEvent(WSAEVENT hEvent);
聽
聽璇ュ嚱鏁板敮涓鐨勫弬鏁頒究鏄竴涓簨浠跺彞鏌勶紱鍩轟簬璋冪敤鏄垚鍔熻繕鏄け璐ワ紝浼?xì)鍒嗗埆杩斿洖T R U E鎴朏A L S E銆傚簲鐢ㄧ▼搴忓畬鎴愪簡瀵逛竴涓簨浠跺璞$殑澶勭悊鍚庯紝渚垮簲璋冪敤W S A C l o s e E v e n t鍑芥暟錛岄噴鏀劇敱浜嬩歡鍙ユ焺浣跨敤鐨勭郴緇熻祫婧愩傚W S A C l o s e E v e n t鍑芥暟鐨勫畾涔夊涓嬶細(xì)
聽BOOL WSACloseEvent(WSAEVENT hEvent);
聽
聽璇ュ嚱鏁頒篃瑕佹嬁涓涓簨浠跺彞鏌勪綔涓鴻嚜宸卞敮涓鐨勫弬鏁幫紝騫朵細(xì)鍦ㄦ垚鍔熷悗榪斿洖T R U E錛屽け璐ュ悗榪斿洖FA L S E銆?br />涓涓鎺ュ瓧鍚屼竴涓簨浠跺璞″彞鏌勫叧鑱斿湪涓璧峰悗錛屽簲鐢ㄧ▼搴忎究鍙紑濮婭 / O澶勭悊錛涙柟娉曟槸絳夊緟緗戠粶浜嬩歡瑙﹀彂浜嬩歡瀵硅薄鍙ユ焺鐨勫伐浣滅姸鎬併俉 S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟鐨勮璁″畻鏃ㄤ究鏄敤鏉ョ瓑寰呬竴涓垨澶氫釜浜嬩歡瀵硅薄鍙ユ焺錛屽茍鍦ㄤ簨鍏堟寚瀹氱殑涓涓垨鎵鏈夊彞鏌勮繘鍏モ滃凡浼犱俊鈥濈姸鎬佸悗錛屾垨鍦ㄨ秴榪囦簡涓涓瀹氱殑鏃墮棿鍛ㄦ湡鍚庯紝绔嬪嵆榪斿洖銆備笅闈㈡槸W S AWa i t F o r M u l t i p l e E v e n t s鍑芥暟鐨勫畾涔夛細(xì)
DWORD WSAWaitForMultipleEvents(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DWORD cEvent,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽const WSAEVENT聽FAR * lphEvents,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽BOOL 聽fWaitAll,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DWORD dwTimeout,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽BOOL聽 fAlertable
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽鍏朵腑錛?c E v e n t s鍜宭 p h E v e n t s鍙傛暟瀹氫箟浜嗙敱W S A E V E N T瀵硅薄鏋勬垚鐨勪竴涓暟緇勩傚湪榪欎釜鏁扮粍涓紝c E v e n t s鎸囧畾鐨勬槸浜嬩歡瀵硅薄鐨勬暟閲忥紝鑰宭 p h E v e n t s瀵瑰簲鐨勬槸涓涓寚閽堬紝鐢ㄤ簬鐩存帴寮曠敤璇ユ暟緇勩?br />瑕佹敞鎰忕殑鏄紝 W S AWa i t F o r M u l t i p l e E v e n t s鍙兘鏀寔鐢盬 S A _ M A X I M U M _ WA I T _ E V E N T S瀵硅薄瑙勫畾鐨勪竴涓渶澶у鹼紝鍦ㄦ瀹氫箟鎴? 4涓傚洜姝わ紝閽堝鍙戝嚭W S AWa i t F o r M u l t i p l e E v e n t s璋冪敤鐨勬瘡涓嚎紼嬶紝璇 / O妯″瀷涓嬈℃渶澶氶兘鍙兘鏀寔6 4涓鎺ュ瓧銆傚亣濡傛兂璁╄繖涓ā鍨嬪悓鏃剁鐞嗕笉姝? 4涓
鎺ュ瓧錛屽繀欏誨垱寤洪澶栫殑宸ヤ綔鑰呯嚎紼嬶紝浠ヤ究絳夊緟鏇村鐨勪簨浠跺璞°俧 Wa i t A l l 鍙傛暟鎸囧畾浜哤 S AWa i t F o r M u l t i p l e E v e n t s濡備綍絳夊緟鍦ㄤ簨浠舵暟緇勪腑鐨勫璞°傝嫢璁句負(fù)T R U E錛岄偅涔堝彧鏈夌瓑l p h E v e n t s鏁扮粍鍐呭寘鍚殑鎵鏈変簨浠跺璞¢兘宸茶繘鍏モ滃凡浼犱俊鈥濈姸鎬侊紝鍑芥暟鎵嶄細(xì)榪斿洖錛涗絾鑻ヨ涓篎A L S E錛屼換浣曚竴涓簨浠跺璞¤繘鍏モ滃凡浼犱俊鈥濈姸鎬侊紝鍑芥暟灝變細(xì)榪斿洖銆傚氨鍚庝竴縐嶆儏鍐墊潵璇達(dá)紝榪斿洖鍊兼寚鍑轟簡鍒板簳鏄摢涓簨浠跺璞¢犳垚浜嗗嚱鏁扮殑榪斿洖銆傞氬父錛屽簲鐢ㄧ▼搴忓簲灝嗚鍙傛暟璁句負(fù)FA L S E錛?br />涓嬈″彧涓轟竴涓鎺ュ瓧浜嬩歡鎻愪緵鏈嶅姟銆俤 w Ti m e o u t鍙傛暟瑙勫畾浜哤 S AWa i t F o r M u l t i p l e E v e n t s鏈澶氬彲絳夊緟涓涓綉緇滀簨浠跺彂鐢熸湁澶氶暱鏃墮棿錛屼互姣涓哄崟浣嶏紝榪欐槸涓欏光滆秴鏃垛濊瀹氥傝秴榪囪瀹氱殑鏃墮棿錛屽嚱鏁板氨浼?xì)绔嬪崒櫩斿洖锛屽嵆鋴社敱f Wa i t A l l鍙傛暟瑙勫畾鐨勬潯浠跺皻鏈弧瓚充篃濡傛銆傚瓚呮椂鍊間負(fù)0錛屽嚱鏁頒細(xì)媯(gè)嫻嬫寚瀹氱殑浜嬩歡瀵硅薄鐨勭姸鎬侊紝騫剁珛鍗寵繑鍥炪傝繖鏍蜂竴鏉ワ紝搴旂敤紼嬪簭瀹為檯渚垮彲瀹炵幇瀵逛簨浠跺
璞$殑鈥滆疆璇⑩濄備絾鑰冭檻鍒板畠瀵規(guī)ц兘閫犳垚鐨勫獎(jiǎng)鍝嶏紝榪樻槸搴斿敖閲忛伩鍏嶅皢瓚呮椂鍊艱涓?銆傚亣濡傛病鏈夌瓑寰呭鐞嗙殑浜嬩歡錛?W S AWa i t F o r M u l t i p l e E v e n t s渚夸細(xì)榪斿洖W S A _ WA I T _ T I M E O U T銆傚d w s Ti m e o u t璁句負(fù)W S A _ I N F I N I T E錛堟案榪滅瓑寰咃級錛岄偅涔堝彧鏈夊湪涓涓綉緇滀簨浠朵紶淇′簡涓涓簨浠跺璞″悗錛屽嚱鏁版墠
浼?xì)杩斿洖銆傛渶鍚庝竴涓弬鏁版槸f A l e r t a b l e錛屽湪鎴戜滑浣跨敤W S A E v e n t S e l e c t妯″瀷鐨勬椂鍊欙紝瀹冩槸鍙互蹇界暐鐨勶紝涓斿簲璁句負(fù)FA L S E銆傝鍙傛暟涓昏鐢ㄤ簬鍦ㄩ噸鍙犲紡I / O妯″瀷涓紝鍦ㄥ畬鎴愪緥紼嬬殑澶勭悊榪囩▼涓嬌鐢ㄣ?br />鏈珷鍚庨潰榪樹細(xì)瀵規(guī)璇﹁堪銆?/p>
鑻 S AWa i t F o r M u l t i p l e E v e n t s鏀跺埌涓涓簨浠跺璞$殑緗戠粶浜嬩歡閫氱煡錛屼究浼?xì)杩斿洖涓涓鹼紝鎸囧嚭閫犳垚鍑芥暟榪斿洖鐨勪簨浠跺璞°傝繖鏍蜂竴鏉ワ紝鎴戜滑鐨勫簲鐢ㄧ▼搴忎究鍙紩鐢ㄤ簨浠舵暟緇勪腑宸蹭紶淇$殑浜嬩歡錛屽茍媯(gè)绱笌閭d釜浜嬩歡瀵瑰簲鐨勫鎺ュ瓧錛屽垽鏂埌搴曟槸鍦ㄥ摢涓鎺ュ瓧涓婏紝鍙戠敓浜嗕粈涔堢綉緇滀簨浠剁被鍨嬨?br />瀵逛簨浠舵暟緇勪腑鐨勪簨浠惰繘琛屽紩鐢ㄦ椂錛屽簲璇ョ敤W S AWa i t F o r M u l t i p l e E v e n t s鐨勮繑鍥炲鹼紝鍑忓幓棰勫畾涔夊糤 S A _ WA I T _ E V E N T _ 0錛屽緱鍒板叿浣撶殑寮曠敤鍊鹼紙鍗崇儲寮曚綅緗級銆傚涓嬩緥鎵紺猴細(xì)
Index = WSAWaitForMultipleEvents(...);
MyEvent = EventArray[Index - WSA_WAIT_EVENT_0];
鐭ラ亾浜嗛犳垚緗戠粶浜嬩歡鐨勫鎺ュ瓧鍚庯紝鎺ヤ笅鏉ュ彲璋冪敤W S A E n u m N e t w o r k E v e n t s鍑芥暟錛岃皟鏌ュ彂鐢熶簡浠涔堢被鍨嬬殑緗戠粶浜嬩歡銆傝鍑芥暟瀹氫箟濡備笅錛?/p>
聽int WSAEnumNetworkEvents(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽WSAEVENT hEventObject,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWSANETWORKEVENTS lpNetworkEvents
聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽s鍙傛暟瀵瑰簲浜庨犳垚浜嗙綉緇滀簨浠剁殑濂楁帴瀛椼俬 E v e n t O b j e c t鍙傛暟鍒欐槸鍙夌殑錛涘畠鎸囧畾浜嗕竴涓簨浠跺彞鏌勶紝瀵瑰簲浜庢墦綆楅噸璁劇殑閭d釜浜嬩歡瀵硅薄銆傜敱浜庢垜浠殑浜嬩歡瀵硅薄澶勫湪涓涓滃凡浼犱俊鈥濈姸鎬侊紝鎵浠ュ彲灝嗗畠浼犲叆錛屼護(hù)鍏惰嚜鍔ㄦ垚涓衡滄湭浼犱俊鈥濈姸鎬併傚鏋滀笉鎯崇敤h E v e n t O b j e c t鍙傛暟鏉ラ噸璁句簨浠訛紝閭d箞鍙嬌鐢╓ S A R e s e t E v e n t 鍑芥暟錛?璇ュ嚱鏁版棭鍏堝凡緇忚璁鴻繃浜嗐傛渶鍚庝竴涓弬鏁版槸l p N e t w o r k E v e n t s錛屼唬琛ㄤ竴涓寚閽堬紝鎸囧悜W S A N E T W O R K E V E N T S緇撴瀯錛岀敤浜庢帴鏀跺鎺ュ瓧涓婂彂
鐢熺殑緗戠粶浜嬩歡綾誨瀷浠ュ強(qiáng)鍙兘鍑虹幇鐨勪換浣曢敊璇唬鐮併備笅闈㈡槸W S A N E T W O R K E V E N T S緇撴瀯鐨勫畾涔夛細(xì)
聽typedef struct _WSANETWORKEVENTS
聽{
聽聽long lNetworkEvents;
聽聽int iErrorCode[FD_MAX_EVENTS];
聽}WSANETWORKEVENTS,FAR * LPWSANETWORKEVENTS;
聽
聽l N e t w o r k E v e n t s鍙傛暟鎸囧畾浜嗕竴涓鹼紝瀵瑰簲浜庡鎺ュ瓧涓婂彂鐢熺殑鎵鏈夌綉緇滀簨浠剁被鍨嬶紙鍙傝琛? - 3錛夈?br />娉ㄦ剰涓涓簨浠惰繘鍏ヤ紶淇$姸鎬佹椂錛屽彲鑳戒細(xì)鍚屾椂鍙戠敓澶氫釜緗戠粶浜嬩歡綾誨瀷銆備緥濡傦紝涓涓箒蹇?br />鐨勬湇鍔″櫒搴旂敤鍙兘鍚屾椂鏀跺埌FD_READ鍜孎D_WRITE閫氱煡銆?br />i E r r o r C o d e鍙傛暟鎸囧畾鐨勬槸涓涓敊璇唬鐮佹暟緇勶紝鍚宭 N e t w o r k E v e n t s涓殑浜嬩歡鍏寵仈鍦ㄤ竴璧楓傞拡瀵規(guī)瘡涓綉緇滀簨浠剁被鍨嬶紝閮藉瓨鍦ㄧ潃涓涓壒孌婄殑浜嬩歡绱㈠紩錛屽悕瀛椾笌浜嬩歡綾誨瀷鐨勫悕瀛楃被浼鹼紝鍙槸瑕佸湪浜嬩歡鍚嶅瓧鍚庨潰娣誨姞涓涓?_ B I T鈥濆悗緙瀛椾覆鍗沖彲銆備緥濡傦紝瀵笷 D _ R E A D浜嬩歡綾誨瀷鏉ヨ錛宨 E r r o r C o d e鏁扮粍鐨勭儲寮曟爣璇嗙渚挎槸F D _ R E A D _ B I T銆備笅榪頒唬鐮佺墖鏂姝よ繘琛屼簡闃愰噴錛堥拡瀵笷 D _ R E A D浜嬩歡錛夛細(xì)
聽聽if(NetWorkEvents.lNetworkEvents & FD_READ)
聽聽{
聽聽聽if(NetWorkEvents.iErrorCode[FD_READ_BIT] != 0)
聽聽聽{
聽聽聽聽printf("FD_READ FAILED with error %d\n",NetWorkEvents.iErrorCode[FD_READ_BIT]);
聽聽聽}
聽聽}
瀹屾垚浜嗗W S A N E T W O R K E V E N T S緇撴瀯涓殑浜嬩歡鐨勫鐞嗕箣鍚庯紝鎴戜滑鐨勫簲鐢ㄧ▼搴忓簲鍦ㄦ墍鏈夊彲鐢ㄧ殑濂楁帴瀛椾笂錛岀戶緇瓑寰呮洿澶氱殑緗戠粶浜嬩歡銆傚湪紼嬪簭娓呭崟8 - 6涓紝鎴戜滑闃愰噴浜嗗浣曚嬌鐢╓ S A E v e n t S e l e c t榪欑I / O妯″瀷錛屾潵寮鍙戜竴涓湇鍔″櫒搴旂敤錛屽悓鏃跺浜嬩歡瀵硅薄榪涜綆$悊銆傝繖涓▼搴忎富瑕佺潃鐪間簬寮鍙戜竴涓熀鏈殑鏈嶅姟鍣ㄥ簲鐢ㄨ娑夊強(qiáng)鍒扮殑姝ラ錛屼護(hù)鍏跺悓鏃惰礋璐d竴涓垨澶氫釜濂楁帴瀛楃殑綆$悊銆?/p>
瀹屾垚浜嗗W S A N E T W O R K E V E N T S緇撴瀯涓殑浜嬩歡鐨勫鐞嗕箣鍚庯紝鎴戜滑鐨勫簲鐢ㄧ▼搴忓簲鍦ㄦ墍鏈夊彲鐢ㄧ殑濂楁帴瀛椾笂錛岀戶緇瓑寰呮洿澶氱殑緗戠粶浜嬩歡銆傚湪紼嬪簭娓呭崟8 - 6涓紝鎴戜滑闃愰噴浜嗗浣曚嬌鐢╓ S A E v e n t S e l e c t榪欑I / O妯″瀷錛屾潵寮鍙戜竴涓湇鍔″櫒搴旂敤錛屽悓鏃跺浜嬩歡瀵硅薄榪涜綆$悊銆傝繖涓▼搴忎富瑕佺潃鐪間簬寮鍙戜竴涓熀鏈殑鏈嶅姟鍣ㄥ簲鐢ㄨ娑夊強(qiáng)鍒扮殑姝ラ錛屼護(hù)鍏跺悓鏃惰礋璐d竴涓垨澶氫釜濂楁帴瀛楃殑綆$悊銆?br />紼嬪簭娓呭崟8-6 閲囩敤WSAEventSelect I/O妯″瀷鐨勭ず鑼冩湇鍔″櫒婧愪唬鐮?/p>
2銆乻ocket鍑芥暟
鐢ㄤ簬鐢熸垚socket(soket Descriptor)
[澹版槑]
SOCKET socket錛坕nt af,int type,int protocol錛?
[鍙傛暟]
af - 鍦板潃瀹舵棌(閫氬父浣跨敤:AF_INET)
type - socket鐨勭綾?br />SOCK_STREAM : 鐢ㄤ簬TCP鍗忚
SOCK_DGRAM : 鐢ㄤ簬UDP鍗忚
protocol - 鎵浣跨敤鐨勫崗璁?br />[榪斿洖鍊糫
褰撳嚱鏁版垚鍔熻皟鐢ㄦ椂榪斿洖涓涓柊鐨凷OCKET(Socket Descriptor)
澶辮觸鏃惰繑鍥濱NVALID_SOCKET.
3銆乮net_addr鍑芥暟
鎶婂ソ璞?xxx.xxx.xxx.xxx"鐨?0榪涘埗鐨処P鍦板潃杞崲涓?2浣嶆暣鏁拌〃紺烘柟娉?br />[澹版槑]
unsigned long inet_addr ( const char FAR *cp );
[鍙傛暟]
cp - 鎸囧悜鐢?xxx.xxx.xxx.xxx"鐨?0榪涘埗鏉ヨ〃紺虹殑IP鍦板潃瀛楃涓茬殑鎸囬拡
[榪斿洖鍊糫
褰撳嚱鏁版垚鍔熻皟鐢ㄦ椂榪斿洖鐢?2浣嶆暣鏁拌〃紺虹殑IP鍦板潃(鎸夌綉緇滃瓧鑺傛帓鍒楅『搴?
澶辮觸鏃惰繑鍥濱NADDR_NONE.
4銆乬ethostbyname鍑芥暟
鍙互浠庝富鏈哄悕鑾峰彇涓繪満璧勬枡.
[澹版槑]
struct hostent FAR * gethostbyname ( const char FAR *name );
[鍙傛暟]
name - 鎸囧悜涓繪満鍚嶅瓧絎︿覆鐨勬寚閽?br />[榪斿洖鍊糫
褰撳嚱鏁版垚鍔熻皟鐢ㄦ椂榪斿洖涓繪満淇℃伅
澶辮觸鏃惰繑鍥濶ULL(絀哄?
5銆丅ind鍑芥暟
鎸囧畾鏈湴IP鍦板潃鎵浣跨敤鐨勭鍙e彿鏃跺欎嬌鐢?br />[澹版槑]
int bind ( SOCKET s , const struct sockaddr FAR *addr , int namelen );
[鍙傛暟]
s - 鎸囧悜鐢⊿ocket鍑芥暟鐢熸垚鐨凷ocket Descriptor
addr - 鎸囧悜Socket鍦板潃鐨勬寚閽?br />namelen - 璇ュ湴鍧鐨勯暱搴?
[榪斿洖鍊糫
褰撳嚱鏁版垚鍔熻皟鐢ㄦ椂榪斿洖0
璋冪敤澶辮觸鏃惰繑鍥?SOCKET_ERROR
6銆乧onnect鍑芥暟
鐢ㄤ簬涓庢湇鍔″櫒寤虹珛榪炴帴,鍙戝嚭榪炴帴璇鋒眰,蹇呴』鍦ㄥ弬鏁頒腑鎸囧畾鏈嶅姟鍣ㄧ殑IP鍦板潃鍜岀鍙e彿
[澹版槑]
int connect (SOCKET s , const struct sockaddr FAR *name , int namelen );
[鍙傛暟]
s - 鎸囧悜鐢⊿ocket鍑芥暟鐢熸垚鐨凷ocket Descriptor
name - 鎸囧悜鏈嶅姟鍣ㄥ湴鍧鐨勬寚閽?br />namelen - 璇ュ湴鍧鐨勯暱搴?
[榪斿洖鍊糫
褰撳嚱鏁版垚鍔熻皟鐢ㄦ椂榪斿洖0
璋冪敤澶辮觸鏃惰繑鍥?SOCKET_ERROR
7銆乻elect鍑芥暟
鍙互鐢ㄤ簬璋冩煡涓涓垨澶氫釜SOCKET鐨勭姸鎬?
[澹版槑]
int select ( int nfds , fd_set FAR *readfds , fd_set FAR *writefds , fd_set FAR *exceptfds , const struct timeval FAR *timeout );
[鍙傛暟]
nfds - 鍦╓INDOWS SOCKET API 涓鍙傛暟鍙互蹇界暐,閫氬父璧嬩簣NILL鍊?br />readfds - 鐢變簬鎺ュ彈鐨凷OCKET璁懼鐨勬寚閽?br />writefds - 鐢ㄤ簬鍙戦佹暟鎹殑SOCKET璁懼鐨勬寚閽?br />exceptfds - 媯(gè)鏌ラ敊璇殑鐘舵?br />timeout - 瓚呮椂璁懼畾
[榪斿洖鍊糫
榪斿洖澶т簬0鐨勫兼椂,琛ㄧず涓庢潯浠剁浉絎︾殑SOCKET鏁?br />榪斿洖0琛ㄧず瓚呮椂
澶辮觸鏃惰繑鍥濻OCKET_ERROR
8銆乺ecv鍑芥暟
鍒╃敤Socket榪涜鎺ュ彈鏁版嵁.
[澹版槑]
int recv ( SOCKET s , char FAR *buf , int len , int flags );
[鍙傛暟]
s - 鎸囧悜鐢⊿ocket鍑芥暟鐢熸垚鐨凷ocket Descriptor
buf - 鎺ュ彈鏁版嵁鐨勭紦鍐插尯(鏁扮粍)鐨勬寚閽?br />len - 緙撳啿鍖虹殑澶у皬
flag - 璋冪敤鏂瑰紡(MSG_PEEK 鎴?MSG_OOB)
[榪斿洖鍊糫
鎴愬姛鏃惰繑鍥炴敹鍒扮殑瀛楄妭鏁?
濡傛灉榪炴帴琚腑鏂垯榪斿洖0
澶辮觸鏃惰繑鍥?SOCKET_ERROR
9銆乻endto鍑芥暟
鍒╃敤Socket榪涜鍙戦佹暟鎹?
[澹版槑]
int sendto ( SOCKET s , const char FAR *buf , int len , int flags , const struct sockaddr FAR *to , int token );
[鍙傛暟]
s - 鎸囧悜鐢⊿ocket鍑芥暟鐢熸垚鐨凷ocket Descriptor
buf - 鎺ュ彈鏁版嵁鐨勭紦鍐插尯(鏁扮粍)鐨勬寚閽?br />len - 緙撳啿鍖虹殑澶у皬
flag - 璋冪敤鏂瑰紡(MSG_DONTROUTE , MSG_OOB)
to - 鎸囧悜鍙戦佹柟SOCKET鍦板潃鐨勬寚閽?br />token - 鍙戦佹柟SOCKET鍦板潃鐨勫ぇ灝?
[榪斿洖鍊糫
鎴愬姛鏃惰繑鍥炲凡緇忓彂閫佺殑瀛楄妭鏁?
澶辮觸鏃惰繑鍥濻OCKET_ERROR
int WSAAsyncSelect(
聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽HWND聽hWnd,
聽聽聽聽聽聽聽聽聽聽unsigned 聽int wMsg,
聽聽聽聽聽聽聽聽聽聽long lEvent
聽聽聽聽聽聽聽聽聽);
鍏朵腑錛?s鍙傛暟鎸囧畾鐨勬槸鎴戜滑鎰熷叴瓚g殑閭d釜濂楁帴瀛椼俬 W n d鍙傛暟鎸囧畾鐨勬槸涓涓獥鍙e彞鏌勶紝瀹冨搴斾簬緗戠粶浜嬩歡鍙戠敓涔嬪悗錛屾兂瑕佹敹鍒伴氱煡娑堟伅鐨勯偅涓獥鍙f垨瀵硅瘽妗嗐倃 M s g鍙傛暟鎸囧畾鍦ㄥ彂鐢熺綉緇滀簨浠舵椂錛屾墦綆楁帴鏀剁殑娑堟伅銆傝娑堟伅浼?xì)鎶曢掑埌鐢県 W n d紿楀彛鍙ユ焺鎸囧畾鐨勯偅涓獥鍙c傞氬父錛屽簲鐢ㄧ▼搴忛渶瑕佸皢榪欎釜娑堟伅璁句負(fù)姣擶i n d o w s鐨刉 M _ U S E R澶х殑涓涓鹼紝閬垮厤緗戠粶紿楀彛娑堟伅涓庨瀹氫箟鐨勬爣鍑嗙獥鍙f秷鎭彂鐢熸販娣嗕笌鍐茬獊銆傛渶鍚庝竴涓弬鏁版槸l E v e n t錛屽畠鎸囧畾鐨勬槸涓涓綅鎺╃爜錛屽搴斾簬涓
緋誨垪緗戠粶浜嬩歡鐨勭粍鍚堬紙璇峰弬鑰冭〃8 - 3錛夛紝搴旂敤紼嬪簭鎰熷叴瓚g殑渚挎槸榪欎竴緋誨垪浜嬩歡銆傚ぇ澶氭暟搴旂敤紼嬪簭閫氬父鎰熷叴瓚g殑緗戠粶浜嬩歡綾誨瀷鍖呮嫭錛?F D _ R E A D銆丗 D _ W R I T E銆丗 D _ A C C E P T銆丗 D _ C O N N E C T鍜?br />F D _ C L O S E銆傚綋鐒訛紝鍒板簳浣跨敤F D _ A C C E P T錛岃繕鏄嬌鐢‵ D _ C O N N E C T綾誨瀷錛岃鍙栧喅浜庡簲鐢ㄧ▼搴忕殑韜喚鍒板簳鏄竴涓鎴鋒満鍛紝榪樻槸涓涓湇鍔″櫒銆傚搴旂敤紼嬪簭鍚屾椂瀵瑰涓綉緇滀簨浠舵湁鍏磋叮錛屽彧闇瀵瑰悇縐嶇被鍨嬫墽琛屼竴嬈$畝鍗曠殑鎸変綅O R錛堟垨錛夎繍綆楋紝鐒跺悗灝嗗畠浠垎閰嶇粰l E v e n t灝卞彲浠ヤ簡銆備婦涓緥瀛愭潵璇達(dá)細(xì)
WSAAsyncSelect(s,hWnd,WM_SOCKET,FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE);
榪欐牱涓鏉ワ紝鎴戜滑鐨勫簲鐢ㄧ▼搴忎互鍚庝究鍙湪濂楁帴瀛梥涓婏紝鎺ユ敹鍒版湁鍏寵繛鎺ャ佸彂閫併佹帴鏀朵互鍙?qiáng)濂?br />鎺ュ瓧鍏抽棴榪欎竴緋誨垪緗戠粶浜嬩歡鐨勯氱煡銆傜壒鍒娉ㄦ剰鐨勬槸錛屽涓簨浠跺姟蹇呭湪濂楁帴瀛椾笂涓嬈℃敞鍐岋紒
鍙﹀榪樿娉ㄦ剰鐨勬槸錛屼竴鏃﹀湪鏌愪釜濂楁帴瀛椾笂鍏佽浜嗕簨浠墮氱煡錛岄偅涔堜互鍚庨櫎闈炴槑紜皟鐢╟ l o s e s o c k e t鍛戒護(hù)錛屾垨鑰呯敱搴旂敤紼嬪簭閽堝閭d釜濂楁帴瀛楄皟鐢ㄤ簡W S A A s y n c S e l e c t錛屼粠鑰屾洿鏀逛簡娉ㄥ唽鐨勭綉緇滀簨浠剁被鍨嬶紝鍚﹀垯鐨勮瘽錛屼簨浠墮氱煡浼?xì)姘笜q滄湁鏁堬紒鑻ュ皢l E v e n t鍙傛暟璁句負(fù)0錛屾晥鏋滅浉褰撲簬鍋滄鍦ㄥ鎺ュ瓧涓婅繘琛岀殑鎵鏈夌綉緇滀簨浠墮氱煡銆?/p>
鑻ュ簲鐢ㄧ▼搴忛拡瀵逛竴涓鎺ュ瓧璋冪敤浜哤 S A A s y n c S e l e c t錛岄偅涔堝鎺ュ瓧鐨勬ā寮忎細(xì)浠庘滈攣瀹氣濊嚜鍔ㄥ彉鎴愨滈潪閿佸畾鈥濓紝鎴戜滑鍦ㄥ墠闈㈠凡鎻愬埌榪囪繖涓鐐廣傝繖鏍蜂竴鏉ワ紝鍋囧璋冪敤浜嗗儚W S A R e c v榪欐牱鐨刉i n s o c k聽 I / O鍑芥暟錛屼絾褰撴椂鍗村茍娌℃湁鏁版嵁鍙敤錛岄偅涔堝繀鐒朵細(xì)閫犳垚璋冪敤鐨勫け璐ワ紝騫惰繑鍥濿 S A E W O U L D B L O C K
閿欒銆備負(fù)闃叉榪欎竴鐐癸紝搴旂敤紼嬪簭搴斾緷璧栦簬鐢盬 S A A s y n c S e l e c t鐨剈 M s g鍙傛暟鎸囧畾鐨勭敤鎴瘋嚜瀹氫箟紿楀彛娑堟伅錛屾潵鍒ゆ柇緗戠粶浜嬩歡綾誨瀷浣曟椂鍦ㄥ鎺ュ瓧涓婂彂鐢燂紱鑰屼笉搴旂洸鐩湴榪涜璋冪敤銆?/p>
琛?-3 鐢ㄤ簬W S A A s y n c S e l e c t鍑芥暟鐨勭綉緇滀簨浠剁被鍨?/p>
F D _ R E A D聽聽聽聽聽聽聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯寵鎺ユ敹鏈夊叧鏄惁鍙鐨勯氱煡錛屼互渚胯鍏ユ暟鎹?br />F D _ W R I T E聽聽聽聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯寵鎺ユ敹鏈夊叧鏄惁鍙啓鐨勯氱煡錛屼互渚垮啓鍏ユ暟鎹?br />F D _ O O B聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀舵槸鍚︽湁甯﹀錛?O O B錛夋暟鎹姷杈劇殑閫氱煡
F D _ A C C E P T聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀朵笌榪涘叆榪炴帴鏈夊叧鐨勯氱煡
F D _ C O N N E C T聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀朵笌涓嬈¤繛鎺ユ垨鑰呭鐐筳 o i n鎿嶄綔瀹屾垚鐨勯氱煡
F D _ C L O S E聽聽聽聽聽聽聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀朵笌濂楁帴瀛楀叧闂湁鍏崇殑閫氱煡
F D _ Q O S聽聽聽聽聽聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀跺鎺ュ瓧鈥滄湇鍔¤川閲忊濓紙Q o S錛夊彂鐢熸洿鏀圭殑閫氱煡
F D _ G R O U P _ Q O S聽聽聽聽聽聽聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀跺鎺ュ瓧緇勨滄湇鍔¤川閲忊濆彂鐢熸洿鏀圭殑閫氱煡錛堢幇鍦ㄦ病浠涔堢敤澶勶紝涓烘湭鏉ュ鎺ュ瓧緇勭殑浣跨敤淇濈暀錛?br />F D _ R O U T I N G _ I N T E R FA C E _ C H A N G E聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀跺湪鎸囧畾鐨勬柟鍚戜笂錛屼笌璺敱鎺ュ彛鍙戠敓鍙樺寲鐨勯氱煡
F D _ A D D R E S S _ L I S T _ C H A N G E聽聽聽聽聽聽聽搴旂敤紼嬪簭鎯蟲帴鏀墮拡瀵瑰鎺ュ瓧鐨勫崗璁鏃忥紝鏈湴鍦板潃鍒楄〃鍙戠敓鍙樺寲鐨勯氱煡
搴旂敤紼嬪簭鍦ㄤ竴涓鎺ュ瓧涓婃垚鍔熻皟鐢ㄤ簡W S A A s y n c S e l e c t涔嬪悗錛屽簲鐢ㄧ▼搴忎細(xì)鍦ㄤ笌h W n d紿楀彛鍙ユ焺鍙傛暟瀵瑰簲鐨勭獥鍙d緥紼嬩腑錛屼互Windows娑堟伅鐨勫艦寮忥紝鎺ユ敹緗戠粶浜嬩歡閫氱煡銆傜獥鍙d緥紼嬮氬父瀹氫箟濡備笅錛?/p>
LRESULT CALLBACK WindProc(
聽聽聽聽聽聽聽聽聽聽聽聽聽HWND hWnd,
聽聽聽聽聽聽聽聽聽聽聽聽聽UINT uMsg,
聽聽聽聽聽聽聽聽聽聽聽聽聽WPARAM wParam,
聽聽聽聽聽聽聽聽聽聽聽聽聽LPARAM lParam
聽聽聽聽聽聽聽聽聽聽聽聽聽);
鍏朵腑錛宧 W n d鍙傛暟鎸囧畾涓涓獥鍙g殑鍙ユ焺錛屽紿楀彛渚嬬▼鐨勮皟鐢ㄦ鏄敱閭d釜紿楀彛鍙戝嚭鐨勩倁 M s g鍙傛暟鎸囧畾闇瑕佸鍝簺娑堟伅榪涜澶勭悊銆傚氨鎴戜滑鐨勬儏鍐墊潵璇達(dá)紝鎰熷叴瓚g殑鏄疻 S A A s y n c S e l e c t璋冪敤涓畾涔夌殑娑堟伅銆倃 P a r a m鍙傛暟鎸囧畾鍦ㄥ叾涓婇潰鍙戠敓浜嗕竴涓綉緇滀簨浠剁殑濂楁帴瀛椼傚亣鑻ュ悓鏃朵負(fù)榪欎釜紿楀彛渚嬬▼鍒嗛厤浜嗗涓鎺ュ瓧錛岃繖涓弬鏁扮殑閲嶈鎬т究鏄劇ず鍑烘潵浜嗐傚湪l P a r a m鍙傛暟涓紝鍖呭惈浜嗕袱鏂歸潰閲嶈鐨勪俊鎭傚叾涓紝 l P a r a m鐨勪綆瀛楋紙浣庝綅瀛楋級鎸囧畾浜嗗凡緇忓彂鐢熺殑緗戠粶浜嬩歡錛岃宭 P a r a m鐨勯珮瀛?br />錛堥珮浣嶅瓧錛夊寘鍚簡鍙兘鍑虹幇鐨勪換浣曢敊璇唬鐮併?br />緗戠粶浜嬩歡娑堟伅鎶佃揪涓涓獥鍙d緥紼嬪悗錛屽簲鐢ㄧ▼搴忛鍏堝簲媯(gè)鏌 P a r a m鐨勯珮瀛椾綅錛屼互鍒ゆ柇鏄惁鍦ㄥ鎺ュ瓧涓婂彂鐢熶簡涓涓綉緇滈敊璇傝繖閲屾湁涓涓壒孌婄殑瀹忥細(xì) W S A G E T S E L E C T E R R O R錛屽彲鐢ㄥ畠榪斿洖楂樺瓧浣嶅寘鍚殑閿欒淇℃伅銆傝嫢搴旂敤紼嬪簭鍙戠幇濂楁帴瀛椾笂娌℃湁浜х敓浠諱綍閿欒錛屾帴鐫渚垮簲璋冩煡鍒板簳鏄摢涓綉緇滀簨浠剁被鍨嬶紝閫犳垚浜嗚繖鏉i n d o w s娑堟伅鐨勮Е鍙戔斿叿浣撶殑鍋氭硶渚挎槸璇誨彇l P a r a m涔嬩綆瀛椾綅鐨勫唴瀹廣傛鏃跺彲浣跨敤鍙︿竴涓壒孌婄殑瀹忥細(xì)W S A G E T S E L E C T E V E N T錛岀敤瀹冭繑鍥瀕 P a r a m鐨勪綆瀛楅儴鍒嗐?br />鍦ㄧ▼搴忔竻鍗? - 5涓紝鎴戜滑鍚戝ぇ瀹舵紨紺轟簡濡備綍浣跨敤W S A A s y n c S e l e c t榪欑I / O妯″瀷錛屾潵瀹炵幇紿楀彛娑堟伅鐨勭鐞嗐傚湪婧愮▼搴忎腑錛屾垜浠潃閲嶅己璋冪殑鏄紑鍙戜竴涓熀鏈湇鍔″櫒搴旂敤瑕佹秹鍙?qiáng)鍒扮殑鍩烘湰姝ラ锛屽拷鐣ヤ簡寮鍙戜竴涓畬鏁寸殑Wi n d o w s搴旂敤闇瑕佹秹鍙?qiáng)鍒扮殑澶ч噺缂柦E嬬粏鑺傘?/p>
紼嬪簭娓呭崟8-5 WSAAsyncSelect鏈嶅姟鍣ㄧず鑼冧唬鐮?/p>
#define WM_SOCKET聽 WM_USER+1
#inlude <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR 聽lpCmdline,int nCmdShow)
{
聽SOCKET listen;
聽HWND window;
聽//create a window聽 and assign the serverWinProc blew to it
聽window = CreateWindow();
聽//start winsock and create a socket
聽
聽WSAStarup(...);
聽listen = Socket();
聽//Bind the socket to port 5150
聽// and begin listening for connection
聽
聽InternetAddr.sin_family = AF_INET;
聽InternetAddr.sin_addr.s_addr=htonl(INADDR_ANY);
聽InternetAddr.sin_port = htons(5150);
聽bind(listen,(PSOCKETADDR)&InternetAddr,sizeof(InternetAddr));
聽
聽//set up window message notification on the new socket using the WM_SOCKET define above
聽WSAAsyncSelect(listen,window,WM_SOCKET,FD_ACCEPT|FD_CLOSE);
聽
聽listen(listen,5);
聽
聽//translate and dispatch window messages
聽//until the appliation terminates
}聽聽聽聽聽聽聽聽聽聽聽聽聽
BOOL CALLBACK ServerWinProc(HWND hDlg,WORD wMsg,WORD wParam,WORD lParam)
{
聽SOCKET accept;
聽switch(wMsg)
聽{
聽聽case聽WM_PAINT:
聽聽聽聽聽break;
聽聽case聽WM_SOCKET:
聽聽聽聽聽//determine whether an error occured on the socket
聽聽聽聽聽//by using the WSAGETSELECTERROR() macro
聽聽聽聽聽
聽聽聽聽聽if(WSAGETSELECTERROR(lWparam))
聽聽聽聽聽{
聽聽聽聽聽聽//display the error and close the socket
聽聽聽聽聽聽closesocket(wParam);
聽聽聽聽聽聽break;
聽聽聽聽聽}
聽聽聽聽聽//determine what event occured on the socket
聽聽聽聽聽
聽聽聽聽聽switch(WSAGETSELECTEVENT(lParam)
聽聽聽聽聽{
聽聽聽聽聽聽case聽FD_ACCEPT:
聽聽聽聽聽聽聽聽聽//ACCEPT an incoming connection
聽聽聽聽聽聽聽聽聽Accept = accept(wParam,NULL,NULL);
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽//prepare accepted socket for read
聽聽聽聽聽聽聽聽聽//write,and close notifation
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽WSAAsyncSelect(Accept,hWnd,WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE);
聽聽聽聽聽聽case聽FD_READ:
聽聽聽聽聽聽聽聽聽//RECEIVE data from the socket in wParam
聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽case聽FD_WRITE:
聽聽聽聽聽聽聽聽聽//THE socket in wParam is ready for sending data
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽case聽FD_CLOSE:
聽聽聽聽聽聽聽聽聽//THE connection is now closed
聽聽聽聽聽聽聽聽聽closesocket(wParam);
聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽}
聽聽聽聽聽break;
聽}
聽return TRUE;
}
鏈鍚庝竴涓壒鍒湁浠峰肩殑闂鏄簲鐢ㄧ▼搴忓浣曞F D _ W R I T E浜嬩歡閫氱煡榪涜澶勭悊銆傚彧鏈夊湪涓?br />縐嶆潯浠朵笅錛屾墠浼?xì)鍙戝嚭F D _ W R I T E閫氱煡錛?br />鈻?浣跨敤c o n n e c t鎴朩 S A C o n n e c t錛屼竴涓鎺ュ瓧棣栨寤虹珛浜嗚繛鎺ャ?br />鈻?浣跨敤a c c e p t鎴朩 S A A c c e p t錛屽鎺ュ瓧琚帴鍙椾互鍚庛?br />鈻?鑻 e n d銆乄 S A S e n d銆乻 e n d t o鎴朩 S A S e n d To鎿嶄綔澶辮觸錛岃繑鍥炰簡W S A E W O U L D B L O C K閿?br />璇紝鑰屼笖緙撳啿鍖虹殑絀洪棿鍙樺緱鍙敤鍥犳錛屼綔涓轟竴涓簲鐢ㄧ▼搴忥紝鑷敹鍒伴鏉 D _ W R I T E娑堟伅寮濮嬶紝渚垮簲璁や負(fù)鑷繁蹇呯劧鑳藉湪涓涓鎺ュ瓧涓婂彂鍑烘暟鎹紝鐩磋嚦涓涓猻 e n d銆乄 S A S e n d銆乻 e n d t o鎴朩 S A S e n d To榪斿洖濂楁帴瀛楅敊璇疻 S A E W O U L D B L O C K銆傜粡榪囦簡榪欐牱鐨勫け璐ヤ互鍚庯紝瑕佸啀鐢ㄥ彟涓鏉 D _ W R I T E閫氱煡搴旂敤紼嬪簭鍐嶆鍙戦佹暟鎹?br />聽聽聽聽聽聽聽聽聽聽聽聽
int select(
聽聽聽聽聽聽int nfds,
聽聽聽聽聽聽fd_set FAR * readfds,
聽聽聽聽聽聽fd_set FAR * writefds,
聽聽聽聽聽聽fd_set FAR * exceptfds,
聽聽聽聽聽聽const struct timeval FAR * timeout
聽聽聽聽聽);
聽聽聽聽聽
鍏朵腑錛岀涓涓弬鏁皀 f d s浼?xì)琚拷鐣ャ備箣鎵浠ヤ粛鐒惰鎻愪緵榪欎釜鍙傛暟錛屽彧鏄負(fù)浜嗕繚鎸佷笌鏃╂湡鐨凚 e r k e l e y濂楁帴瀛楀簲鐢ㄧ▼搴忕殑鍏煎銆傚ぇ瀹跺彲娉ㄦ剰鍒頒笁涓猣 d _ s e t鍙傛暟錛氫竴涓敤浜庢鏌ュ彲璇繪э紙r e a d f d s錛夛紝涓涓敤浜庢鏌ュ彲鍐欐э紙w r i t e f d s錛夛紝鍙︿竴涓敤浜庝緥澶栨暟鎹紙e x c e p t f d s錛夈備粠鏍規(guī)湰涓婅,f d _ s e t鏁版嵁綾誨瀷浠h〃鐫涓緋誨垪鐗瑰畾濂楁帴瀛楃殑闆嗗悎銆傚叾涓紝 r e a d f d s闆嗗悎鍖呮嫭絎﹀悎涓嬭堪浠諱綍涓涓潯浠剁殑濂楁帴瀛楋細(xì)
鈻?鏈夋暟鎹彲浠ヨ鍏ャ?br />鈻?榪炴帴宸茬粡鍏抽棴銆侀噸璁炬垨涓銆?br />鈻?鍋囧宸茶皟鐢ㄤ簡l i s t e n錛岃屼笖涓涓繛鎺ユ鍦ㄥ緩绔嬶紝閭d箞a c c e p t鍑芥暟璋冪敤浼?xì)鎴愬姛銆?br />w r i t e f d s闆嗗悎鍖呮嫭絎﹀悎涓嬭堪浠諱綍涓涓潯浠剁殑濂楁帴瀛楋細(xì)
鈻?鏈夋暟鎹彲浠ュ彂鍑恒?br />鈻?濡傛灉宸插畬鎴愪簡瀵逛竴涓潪閿佸畾榪炴帴璋冪敤鐨勫鐞嗭紝榪炴帴灝變細(xì)鎴愬姛銆?br />鏈鍚庯紝e x c e p t f d s闆嗗悎鍖呮嫭絎﹀悎涓嬭堪浠諱綍涓涓潯浠剁殑濂楁帴瀛楋細(xì)
鈻?鍋囧宸插畬鎴愪簡瀵逛竴涓潪閿佸畾榪炴帴璋冪敤鐨勫鐞嗭紝榪炴帴灝濊瘯灝變細(xì)澶辮觸銆?br />鈻?鏈夊甫澶栵紙O u t - o f - b a n d錛孫 O B錛夋暟鎹彲渚涜鍙栥?br />渚嬪錛屽亣瀹氭垜浠兂嫻嬭瘯涓涓鎺ュ瓧鏄惁鈥滃彲璇燴濓紝蹇呴』灝嗚嚜宸辯殑濂楁帴瀛楀娣誨埌r e a d f d s闆嗗悎錛?br />鍐嶇瓑寰卻 e l e c t鍑芥暟瀹屾垚銆俿 e l e c t瀹屾垚涔嬪悗錛屽繀欏誨垽鏂嚜宸辯殑濂楁帴瀛楁槸鍚︿粛涓簉 e a d f d s闆嗗悎鐨勪竴閮ㄥ垎銆傝嫢絳旀鏄偗瀹氱殑錛屼究琛ㄦ槑璇ュ鎺ュ瓧鈥滃彲璇燴濓紝鍙珛鍗崇潃鎵嬩粠瀹冧笂闈㈣鍙栨暟鎹傚湪涓変釜鍙傛暟涓紙r e a d f d s銆亀 r i t e f d s鍜宔 x c e p t f d s錛夛紝浠諱綍涓や釜閮藉彲浠ユ槸絀哄鹼紙 N U L L錛夛紱浣嗘槸錛岃嚦灝戞湁涓涓笉鑳戒負(fù)絀哄鹼紒鍦ㄤ換浣曚笉涓虹┖鐨勯泦鍚堜腑錛屽繀欏誨寘鍚嚦灝戜竴涓鎺ュ瓧鍙ユ焺錛涘惁鍒欙紝 s e l e c t鍑芥暟渚挎病鏈?br />浠諱綍涓滆タ鍙互絳夊緟銆傛渶鍚庝竴涓弬鏁皌 i m e o u t瀵瑰簲鐨勬槸涓涓寚閽堬紝瀹冩寚鍚戜竴涓猼 i m e v a l緇撴瀯錛岀敤浜庡喅瀹歴 e l e c t鏈澶氱瓑寰匢 / O鎿嶄綔瀹屾垚澶氫箙鐨勬椂闂淬傚t i m e o u t鏄竴涓┖鎸囬拡錛岄偅涔坰 e l e c t璋冪敤浼?xì)鏃犻檺鏈熷湴鈥滈攣瀹氣濇垨鍋滈】涓嬪幓錛岀洿鍒拌嚦灝戞湁涓涓弿榪扮絎﹀悎鎸囧畾鐨勬潯浠跺悗緇撴潫銆傚t i m e v a l緇撴瀯鐨?br />瀹氫箟濡備笅錛?br />struct timeval
{
聽long tv_sec;
聽long tv_usec;
};
鍏朵腑錛宼 v _ s e c瀛楁浠ョ涓哄崟浣嶆寚瀹氱瓑寰呮椂闂達(dá)紱 t v _ u s e c瀛楁鍒欎互姣涓哄崟浣嶆寚瀹氱瓑寰呮椂闂淬?br />鑻ュ皢瓚呮椂鍊艱緗負(fù)錛?0 , 0錛夛紝琛ㄦ槑s e l e c t浼?xì)绔嬪崒櫩斿洖锛屽厑璁稿簲鐢ńE嬪簭瀵箂 e l e c t鎿嶄綔榪涜鈥滆疆璇⑩濄?br />鍑轟簬瀵規(guī)ц兘鏂歸潰鐨勮冭檻錛屽簲閬垮厤榪欐牱鐨勮緗俿 e l e c t鎴愬姛瀹屾垚鍚庯紝浼?xì)鍦╢ d _ s e t緇撴瀯涓紝榪斿洖鍒氬ソ鏈夋湭瀹屾垚鐨処 / O鎿嶄綔鐨勬墍鏈夊鎺ュ瓧鍙ユ焺鐨勬婚噺銆傝嫢瓚呰繃t i m e v a l璁懼畾鐨勬椂闂達(dá)紝渚夸細(xì)榪斿洖0銆備笉綆$敱浜庝粈涔堝師鍥狅紝鍋囧s e l e c t璋冪敤澶辮觸錛岄兘浼?xì)杩斿洖S O C K E T _ E R R O R銆?br />鐢╯ e l e c t瀵瑰鎺ュ瓧榪涜鐩戣涔嬪墠錛屽湪鑷繁鐨勫簲鐢ㄧ▼搴忎腑錛屽繀欏誨皢濂楁帴瀛楀彞鏌勫垎閰嶇粰涓涓泦鍚堬紝璁劇疆濂戒竴涓垨鍏ㄩ儴璇匯佸啓浠ュ強(qiáng)渚嬪f d _ s e t緇撴瀯銆傚皢涓涓鎺ュ瓧鍒嗛厤緇欎換浣曚竴涓泦鍚堝悗錛屽啀鏉ヨ皟鐢╯ e l e c t錛屼究鍙煡閬撲竴涓鎺ュ瓧涓婃槸鍚︽鍦ㄥ彂鐢熶笂榪扮殑I / O媧誨姩銆俉i n s o c k鎻愪緵浜嗕笅鍒楀畯鎿嶄綔錛屽彲鐢ㄦ潵閽堝I / O媧誨姩錛屽f d _ s e t榪涜澶勭悊涓庢鏌ワ細(xì)
鈻?FD_CLR(s, *set)錛氫粠s e t涓垹闄ゅ鎺ュ瓧s銆?br />鈻?FD_ISSET(s, *set)錛氭鏌鏄惁s e t闆嗗悎鐨勪竴鍚嶆垚鍛橈紱濡傜瓟妗堟槸鑲畾鐨勬槸錛屽垯榪斿洖T R U E銆?br />鈻?FD_SET(s, *set)錛氬皢濂楁帴瀛梥鍔犲叆闆嗗悎s e t銆?br />鈻?F D _ Z E R O ( * s e t )錛氬皢s e t鍒濆鍖栨垚絀洪泦鍚堛?/p>
渚嬪錛屽亣瀹氭垜浠兂鐭ラ亾鏄惁鍙粠涓涓鎺ュ瓧涓畨鍏ㄥ湴璇誨彇鏁版嵁錛屽悓鏃朵笉浼?xì)闄蜂簬鏃犱紤姝㈢?br />鈥滈攣瀹氣濈姸鎬侊紝渚垮彲浣跨敤F D _ S E T瀹忥紝灝嗚嚜宸辯殑濂楁帴瀛楀垎閰嶇粰f d _ r e a d闆嗗悎錛屽啀鏉ヨ皟鐢╯ e l e c t銆傝鎯蟲嫻嬭嚜宸辯殑濂楁帴瀛楁槸鍚︿粛灞瀎 d _ r e a d闆嗗悎鐨勪竴閮ㄥ垎錛屽彲浣跨敤F D _ I S S E T瀹忋傞噰鐢ㄤ笅榪版楠わ紝渚垮彲瀹屾垚鐢╯ e l e c t鎿嶄綔涓涓垨澶氫釜濂楁帴瀛楀彞鏌勭殑鍏ㄨ繃紼嬶細(xì)
1) 浣跨敤F D _ Z E R O瀹忥紝鍒濆鍖栬嚜宸辨劅鍏磋叮鐨勬瘡涓涓猣 d _ s e t銆?br />2) 浣跨敤F D _ S E T瀹忥紝灝嗗鎺ュ瓧鍙ユ焺鍒嗛厤緇欒嚜宸辨劅鍏磋叮鐨勬瘡涓猣 d _ s e t銆?br />3) 璋冪敤s e l e c t鍑芥暟錛岀劧鍚庣瓑寰呭湪鎸囧畾鐨刦 d _ s e t闆嗗悎涓紝I / O媧誨姩璁劇疆濂戒竴涓垨澶氫釜濂楁帴瀛楀彞鏌勩?br />s e l e c t瀹屾垚鍚庯紝浼?xì)杩斿洖鍦ㄦ墍鏈塮 d _ s e t闆嗗悎涓緗殑濂楁帴瀛楀彞鏌勬繪暟錛屽茍瀵規(guī)瘡涓泦鍚堣繘琛岀浉搴旂殑鏇存柊銆?br />4) 鏍規(guī)嵁s e l e c t鐨勮繑鍥炲鹼紝鎴戜滑鐨勫簲鐢ㄧ▼搴忎究鍙垽鏂嚭鍝簺濂楁帴瀛楀瓨鍦ㄧ潃灝氭湭瀹屾垚錛堝緟鍐籌級鐨処 / O鎿嶄綔鈥斿叿浣撶殑鏂規(guī)硶鏄嬌鐢‵ D _ I S S E T瀹忥紝瀵規(guī)瘡涓猣 d _ s e t闆嗗悎榪涜媯(gè)鏌ャ?br />5) 鐭ラ亾浜嗘瘡涓泦鍚堜腑鈥滃緟鍐斥濈殑I / O鎿嶄綔涔嬪悗錛屽I / O榪涜澶勭悊錛岀劧鍚庤繑鍥炴楠? )錛岀戶緇繘琛宻 e l e c t澶勭悊銆?br />s e l e c t榪斿洖鍚庯紝瀹冧細(xì)淇敼姣忎釜f d _ s e t緇撴瀯錛屽垹闄ら偅浜涗笉瀛樺湪寰呭喅I / O鎿嶄綔鐨勫鎺ュ瓧鍙ユ焺銆傝繖姝f槸鎴戜滑鍦ㄤ笂榪扮殑姝ラ( 4 )涓紝涓轟綍瑕佷嬌鐢‵ D _ I S S E T瀹忔潵鍒ゆ柇涓涓壒瀹氱殑濂楁帴瀛楁槸鍚︿粛鍦ㄩ泦鍚堜腑鐨勫師鍥犮傚湪紼嬪簭娓呭崟8 - 4涓紝鎴戜滑鍚戝ぇ瀹墮槓榪頒簡涓轟竴涓紙鍙湁涓涓級濂楁帴瀛楄緗畇 e l e c t妯″瀷鎵闇鐨勪竴緋誨垪鍩烘湰姝ラ銆傝嫢鎯沖湪榪欎釜搴旂敤紼嬪簭涓坊鍔犳洿澶氱殑濂楁帴瀛楋紝鍙渶涓洪澶栫殑濂楁帴瀛楃淮鎶ゅ畠浠殑涓涓垪琛紝鎴栫淮鎶ゅ畠浠殑涓涓暟緇勫嵆鍙?/p>
紼嬪簭娓呭崟8-4 鐢╯ e l e c t綆$悊涓涓鎺ュ瓧涓婄殑I / O鎿嶄綔
SOCKET s;
fd_set fdread;
int ret;
//create a socket ,and accept a connection
...
//manage i/o on the socket
while(TRUE)
{
聽//aways clear the read set before calling
聽//select()
聽FD_ZERO(&fdread);
聽//add socket s to the read set
聽FD_SET(s,&fdread);
聽if((ret = select(0,&fdread,NULL,NULL,NULL))== SOCKET_ERROR)
聽{
聽聽//ERROR CONDITION
聽}
聽if(ret > 0)
聽
聽{
聽聽//for this simple case,select() should return the value 1.
聽聽//an appliation dealing with more than one socket could get a value greater than 1;
聽聽//at this point,your appliation should check to see whether the socket is part of a set.
聽聽if(FD_ISSET(s.&fdread))
聽聽{
聽聽聽//a read event has occurred on a socket s
聽聽}
聽}
}
聽聽聽聽聽聽
SOCKET s;
unsigned long u1 = 1;
int nRet;
s = SOCKET(AF_INET,SOCK_STREA,0);
nRet = ioctlsocket(s,FIOBIO,(unsigned long *)&ul);
if(nRet == SOCKET_ERROR)
{
聽//Failed to put the socket into nonblocking mode
}
灝嗕竴涓鎺ュ瓧緗負(fù)闈為攣瀹氭ā寮忎箣鍚庯紝 Winsock API璋冪敤浼?xì)绔嬪崒櫩斿洖銆傚ぇ澶氭暟鎯呭喌涓嬶紝榪欎簺璋冪敤閮戒細(xì)鈥滃け璐モ濓紝騫惰繑鍥炰竴涓猈 S A E W O U L D B L O C K閿欒銆備粈涔堟剰鎬濆憿錛熷畠鎰忓懗鐫璇鋒眰鐨勬搷浣滃湪璋冪敤鏈熼棿娌℃湁鏃墮棿瀹屾垚銆備婦涓緥瀛愭潵璇達(dá)紝鍋囧鍦ㄧ郴緇熺殑杈撳叆緙撳啿鍖轟腑錛屽皻涓嶅瓨鍦ㄢ滃緟鍐斥濈殑鏁版嵁錛岄偅涔坮 e c v錛堟帴鏀舵暟鎹級璋冪敤灝變細(xì)榪斿洖W S A E W O U L D B L O C K閿欒銆傞氬父錛屾垜浠渶瑕侀噸澶嶈皟鐢ㄥ悓涓涓嚱鏁幫紝鐩磋嚦鑾峰緱涓涓垚鍔熻繑鍥炰唬鐮併傚湪琛? - 2涓紝鎴戜滑瀵瑰父瑙乄i n s o c k璋冪敤榪?br />鍥炵殑W S A E W O U L D B L O C K閿欒鐨勫惈涔夎繘琛屼簡鎬葷粨銆?br />鐢變簬闈為攣瀹氳皟鐢ㄤ細(xì)棰戠箒榪斿洖W S A E W O U L D B L O C K閿欒錛屾墍浠ュ湪浠諱綍鏃跺欙紝閮藉簲浠旂粏媯(gè)鏌ユ墍鏈夎繑鍥炰唬鐮侊紝騫朵綔濂解滃け璐モ濈殑鍑嗗銆傝澶氱▼搴忓憳鏄撶姱鐨勪竴涓敊璇究鏄繛緇笉鍋滃湴璋冪敤涓涓嚱鏁幫紝鐩村埌瀹冭繑鍥炴垚鍔熺殑娑堟伅涓烘銆備緥濡傦紝鍋囧畾鍦ㄤ竴涓揣鍑戠殑寰幆涓笉鏂湴璋冪敤r e c v錛屼互璇誨叆2 0 0涓瓧鑺傜殑鏁版嵁錛岄偅涔堜笌浣跨敤鍓嶈堪鐨凪 S G _ P E E K鏍囧織鏉モ滆疆璇⑩濅竴涓攣瀹氬鎺ュ瓧鐩告瘮錛?br />鍓嶄竴縐嶅仛娉曟牴鏈病鏈変換浣曚紭鍔垮彲璦銆備負(fù)姝わ紝 Wi n s o c k鐨勫鎺ュ瓧I / O妯″瀷鍙府鍔╁簲鐢ㄧ▼搴忓垽鏂竴涓鎺ュ瓧浣曟椂鍙緵璇誨啓銆?br />閿佸畾鍜岄潪閿佸畾濂楁帴瀛楁ā寮忛兘瀛樺湪鐫浼樼偣鍜岀己鐐廣傚叾涓紝浠庢蹇電殑瑙掑害璇達(dá)紝閿佸畾濂楁帴瀛楁洿鏄撲嬌鐢ㄣ備絾鍦ㄥ簲浠樺緩绔嬭繛鎺ョ殑澶氫釜濂楁帴瀛楁椂錛屾垨鍦ㄦ暟鎹殑鏀跺彂閲忎笉鍧囷紝鏃墮棿涓嶅畾鏃訛紝鍗存樉寰楁瀬闅劇鐞嗐傝屽彟涓鏂歸潰錛屽亣濡傞渶瑕佺紪鍐欐洿澶氱殑浠g爜錛屼互渚垮湪姣忎釜Wi n s o c k璋冪敤涓紝瀵規(guī)敹鍒頒竴涓猈 S A E W O U L D B L O C K閿欒鐨勫彲鑳芥у姞浠ュ簲浠橈紝閭d箞闈為攣瀹氬鎺ュ瓧渚挎樉寰楁湁浜涢毦浜庢搷浣溿傚湪榪欎簺鎯呭喌涓嬶紝鍙冭檻浣跨敤鈥滃鎺ュ瓧I / O妯″瀷鈥濓紝瀹冩湁鍔╀簬搴旂敤紼嬪簭閫氳繃涓縐嶅紓姝ユ柟寮忥紝鍚屾椂瀵逛竴涓垨澶氫釜濂楁帴瀛椾笂榪涜鐨勯氫俊鍔犱互綆$悊銆?br />琛?-2 闈為攣瀹氬鎺ュ瓧涓婄殑W S A E W O U L D B L O C K閿欒鍑芥暟鍚嶈鏄?br />
W S A A c c e p t鍜宎 c c e p t聽聽 搴旂敤紼嬪簭娌℃湁鏀跺埌榪炴帴璇鋒眰銆傚啀嬈¤皟鐢紝渚垮彲媯(gè)鏌ヨ繛鎺ユ儏鍐?br />c l o s e s o c k e t聽聽聽聽聽聽聽聽聽聽澶у鏁版儏鍐典笅錛岃繖涓敊璇剰鍛崇潃宸查殢S O _ L I N G E R閫夐」涓閬擄紝璋冪敤浜唖 e t s o c k o p t錛岃屼笖宸茶瀹氫簡涓涓潪闆剁殑瓚呮椂鍊?br />W S A C o n n e c t鍜宑 o n n e c t聽聽聽聽聽聽聽搴旂敤紼嬪簭宸插垵濮嬪寲銆傚啀嬈¤皟鐢紝渚垮彲媯(gè)鏌ユ槸鍚﹀畬鎴?br />W S A R e c v銆乺 e c v銆乄 S A R e c v F r o m鍜宺 e c v f r o m 娌℃湁鏀跺埌鏁版嵁銆傜◢鍚庡啀嬈℃鏌?br />W S A S e n d銆乻 e n d銆乄 S A S e n d To鍜宻 e n d t o 澶栧嚭鏁版嵁鏃犵紦鍐插尯鍙敤銆傜◢鍚庡啀璇?/p>
Wi n s o c k鎻愪緵浜嗕袱縐嶅鎺ュ瓧妯″紡錛氶攣瀹氬拰闈為攣瀹氥傛湰绔犵涓閮ㄥ垎灝嗚緇嗕粙緇嶈繖涓ょ妯″紡錛屽茍闃愰噴涓涓簲鐢ㄧ▼搴忓浣曢氳繃瀹冧滑綆$悊I / O銆傚澶у鍦ㄦ湰绔犵殑鍚庨潰閮ㄥ垎鎵瑙侊紝W(xué)i n s o c k鎻愪緵浜嗕竴浜涙湁瓚g殑I / O妯″瀷錛屾湁鍔╀簬搴旂敤紼嬪簭閫氳繃涓縐嶁滃紓姝モ濇柟寮忥紝涓嬈″涓涓垨澶氫釜濂楁帴瀛椾笂榪涜鐨勯氫俊鍔犱互綆$悊銆傝繖浜涙ā鍨嬪寘鎷瑂 e l e c t錛堥夋嫨錛夈乄 S A A s y n c S e l e c t錛堝紓姝ラ夋嫨錛夈乄 S A E v e n t S e l e c t
錛堜簨浠墮夋嫨錛夈丱verlapped I/O錛堥噸鍙犲紡I / O錛変互鍙?qiáng)Completion port錛堝畬鎴愮鍙o級絳夌瓑銆傚埌鏈珷緇撴潫鏃訛紝鎴戜滑鎵撶畻瀵瑰悇縐嶅鎺ュ瓧妯″紡浠ュ強(qiáng)I / O妯″瀷鐨勪紭緙虹偣榪涜鎬葷粨銆傚悓鏃訛紝甯姪澶у鍒ゆ柇鍒板簳鍝竴縐嶆渶閫傚悎鑷繁搴旂敤紼嬪簭鐨勮姹傘?br />鎵鏈塛i n d o w s騫沖彴閮芥敮鎸佸鎺ュ瓧浠ラ攣瀹氭垨闈為攣瀹氭柟寮忓伐浣溿傜劧鑰岋紝騫墮潪姣忕騫沖彴閮芥敮鎸佹瘡涓縐岻 / O妯″瀷銆傚琛? - 1鎵紺猴紝鍦ㄥ綋鍓嶇増鏈殑Windows CE 涓紝浠呮彁渚涗簡涓涓狪 / O妯″瀷銆?br />Windows 98鍜學(xué)indows 95錛堝彇鍐充簬瀹夎鐨勬槸Winsock 1榪樻槸Winsock 2錛夊垯鏀寔澶у鏁癐 / O妯″瀷錛屽敮涓鐨勪緥澶栦究鏄疘 / O瀹屾垚绔彛銆傝屽埌浜哤indows NT鍜屾渶鏂板彂甯冪殑Windows 2000涓紝姣忕I / O妯″瀷閮芥槸鏀寔鐨勩?/p>
8.1 濂楁帴瀛楁ā寮?br />灝卞儚鎴戜滑鍓嶉潰鎻愬埌鐨勯偅鏍鳳紝 Wi n d o w s濂楁帴瀛楀湪涓ょ妯″紡涓嬫墽琛孖 / O鎿嶄綔錛氶攣瀹氬拰闈為攣瀹氥?br />鍦ㄩ攣瀹氭ā寮忎笅錛屽湪I / O鎿嶄綔瀹屾垚鍓嶏紝鎵ц鎿嶄綔鐨刉i n s o c k鍑芥暟錛堟瘮濡俿 e n d鍜宺 e c v錛変細(xì)涓鐩寸瓑鍊欎笅鍘伙紝涓嶄細(xì)绔嬪嵆榪斿洖紼嬪簭錛堝皢鎺у埗鏉冧氦榪樼粰紼嬪簭錛夈傝屽湪闈為攣瀹氭ā寮忎笅錛?Wi n s o c k鍑芥暟鏃犺濡備綍閮戒細(xì)绔嬪嵆榪斿洖銆傚湪Windows CE鍜學(xué)indows 95錛堝畨瑁匴insock 1錛夊鉤鍙頒笂榪愯鐨勫簲鐢ㄧ▼搴忎粎鏀寔鏋佸皯鐨処 / O妯″瀷錛屾墍浠ユ垜浠繀欏婚噰鍙栦竴浜涢傚綋鐨勬楠わ紝璁╅攣瀹氬拰闈為攣瀹氬鎺ュ瓧鑳藉婊¤凍鍚勭鍦哄悎鐨勮姹?/p>
8.1.1 閿佸畾妯″紡
瀵逛簬澶勫湪閿佸畾妯″紡鐨勫鎺ュ瓧錛屾垜浠繀欏誨鍔犵暀鎰忥紝鍥犱負(fù)鍦ㄤ竴涓攣瀹氬鎺ュ瓧涓婅皟鐢ㄤ換浣曚竴涓猈insock API鍑芥暟錛岄兘浼?xì)漶旂敓鐩稿悓鐨勫悗鏋溾旇楄垂鎴栭暱鎴栫煭鐨勬椂闂粹滅瓑寰呪濄傚ぇ澶氭暟Wi n s o c k搴旂敤閮芥槸閬電収涓縐嶁滅敓浜ц咃紞娑堣垂鑰呪濇ā鍨嬫潵緙栧埗鐨勩傚湪榪欑妯″瀷涓紝搴旂敤紼嬪簭闇瑕佽鍙栵紙鎴栧啓鍏ワ級鎸囧畾鏁伴噺鐨勫瓧鑺傦紝鐒跺悗浠ュ畠涓哄熀紜鎵ц涓浜涜綆椼傜▼搴忔竻鍗? - 1灞曠ず鐨勪唬鐮佺墖鏂究鏄竴涓吀鍨嬬殑渚嬪瓙銆?br />
榪欐浠g爜鐨勯棶棰樺湪浜庯紝鍋囧娌℃湁鏁版嵁澶勪簬鈥滃緟鍐斥濈姸鎬侊紝閭d箞r e c v鍑芥暟鍙兘姘歌繙閮芥棤娉曡繑鍥炪傝繖鏄敱浜庝粠璇彞鍙互鐪嬪嚭錛氬彧鏈変粠緋葷粺鐨勮緭鍏ョ紦鍐插尯涓鍥炵偣浠涔堜笢瑗匡紝鎵嶅厑璁歌繑鍥烇紒鏈変簺紼嬪簭鍛樺彲鑳戒細(xì)鍦╮ e c v涓嬌鐢∕ S G _ P E E K鏍囧織錛屾垨鑰呰皟鐢╥ o c t l s o c k e錛?t 璁劇疆F I O N R E A D閫夐」錛夛紝
鍦ㄧ郴緇熺殑緙撳啿鍖轟腑錛屼簨鍏堚滃伔鐪嬧濇槸鍚﹀瓨鍦ㄨ凍澶熺殑瀛楄妭鏁伴噺銆傜劧鑰岋紝鍦ㄤ笉瀹為檯璇誨叆鏁版嵁鐨勫墠鎻愪笅錛屼粎浠呪滃伔鐪嬧濇暟鎹紙濡傚疄闄呰鍏ユ暟鎹紝渚夸細(xì)灝嗗叾浠庣郴緇熺紦鍐插尯涓皢鍏跺垹闄わ級錛屽彲涓嶆槸涓浠跺厜褰╃殑浜嬫儏銆傛垜浠涓猴紝榪欐槸涓縐嶉潪甯鎬笉濂界殑緙栫▼涔?fàn)鎯Q屽簲灝藉叏鍔涢伩鍏嶃傚湪鈥滃伔鐪嬧濈殑鏃跺欙紝瀵圭郴緇熼犳垚鐨勫紑閿鏄瀬澶х殑錛屽洜涓轟粎浠呬負(fù)浜嗘鏌ユ湁澶氬皯涓瓧鑺傚彲鐢紝渚垮彂鍑轟竴涓垨鑰呮洿澶氱殑緋葷粺璋冪敤銆備互鍚庯紝鐞嗘墍褰撶劧鍦幫紝榪橀渶瑕佺壍娑夊埌榪涜瀹為檯r e c v璋冪敤錛屽皢鏁版嵁浠庣郴緇熺紦鍐插尯鍐呭垹闄ょ殑寮閿銆傞偅涔堬紝濡備綍閬垮厤榪欎竴鎯呭喌鍛紵鍦ㄦ錛屾垜浠殑鐩爣鏄槻姝㈢敱浜庢暟鎹殑緙轟箯錛堣繖
鍙兘鏄綉緇滃嚭浜嗘晠闅滐紝涔熷彲鑳芥槸瀹㈡埛鏈哄嚭浜嗛棶棰橈級錛岄犳垚搴旂敤紼嬪簭瀹屽叏闄蜂簬鈥滃嚌鍥衡濈姸鎬侊紝鍚屾椂涓嶅繀榪炵畫鎬у湴媯(gè)瑙嗙郴緇熺綉緇滅紦鍐詫紒涓鴻揪姝ょ洰鐨勶紝涓涓姙娉曟槸灝嗗簲鐢ㄧ▼搴忓垝鍒嗕負(fù)涓涓綰跨▼錛屼互鍙?qiáng)涓涓綆楃嚎紼嬨備袱涓嚎紼嬮兘鍏變韓鍚屼竴涓暟鎹紦鍐插尯銆傚榪欎釜緙撳啿鍖虹殑璁塊棶闇瑕佸彈鍒頒竴瀹氱殑闄愬埗錛岃繖鏄敤涓涓悓姝ュ璞℃潵瀹炵幇鐨勶紝姣斿涓涓簨浠舵垨鑰匨 u t e x錛堜簰鏂ヤ綋錛夈傗滆綰跨▼鈥濈殑鑱岃矗鏄粠緗戠粶榪炵畫鍦拌鍏ユ暟鎹紝騫跺皢鍏剁疆鍏ュ叡浜紦鍐插尯鍐呫傝綰跨▼灝嗚綆楃嚎紼嬪紑濮嬪伐浣滆嚦灝戦渶
瑕佺殑鏁版嵁閲忔嬁鍒版墜鍚庯紝渚夸細(xì)瑙﹀彂涓涓簨浠訛紝閫氱煡璁$畻綰跨▼錛氫綘鑰佸厔鍙互寮濮嬪共媧諱簡錛侀殢鍚庯紝璁$畻綰跨▼浠庣紦鍐插尯鍙栬蛋錛堝垹闄わ級涓涓暟鎹潡錛岀劧鍚庤繘琛岃姹傜殑璁$畻銆?/p>
鍦ㄧ▼搴忔竻鍗? - 2涓紝鎴戜滑鍒嗗埆鎻愪緵浜嗕袱涓嚱鏁幫紝閲囧彇鐨勪究鏄笂榪板姙娉曘傚湪涓や釜鍑芥暟涓紝涓涓礋璐h鍙栫綉緇滄暟鎹紙 R e a d T h r e a d錛夛紝鍙︿竴涓垯璐熻矗瀵規(guī)暟鎹墽琛岃綆楋紙 P r o c e s s T h r e a d錛夈?br />
M S G _ PA RT I A L鏍囧織鎸囨槑鏁存潯娑堟伅鏄惁宸茶鍙栥俉insock 2鍑芥暟W S A R e c v鍜學(xué) S A R e c v F r o m涔熸敮鎸佽繖涓鏍囧織銆傚叧浜庤繖涓爣蹇楃殑鏇村鐭ヨ瘑錛岃鍙傝瀵筗 S A R e c v銆乄 S A R e c v E x鍜學(xué) S A R e c v F r o m
榪欎笁涓嚱鏁扮殑鎻忚堪銆?br />鎴戜滑鏈鍚庤璋堢殑渚挎槸鍦ㄦ湁澶氫釜緗戠粶鎺ュ彛鐨勬満鍣ㄤ笂鍙戦乁DP /IP娑堟伅銆傝繖鏂歸潰鐨勯棶棰橀澶氾紝
鎴戜滑鏉ョ湅涓涓渶甯歌鐨勯棶棰橈細(xì)鍦ㄤ竴涓猆 D P濂楁帴瀛楁槑鏄劇粦瀹氬埌涓涓湰鍦癐 P鎺ュ彛鍜屽彂閫佹暟鎹姤鏃訛紝浼?xì)鍙戠敓浠涔堟儏鍐碉紵 U D P濂楁帴瀛楀茍涓嶄細(xì)鐪熸鍜岀綉緇滄帴鍙g粦瀹氬湪涓璧楓傝屾槸寤虹珛涓縐嶈仈緋伙紝鍗崇粦瀹氱殑I P鎺ュ彛鎴愪負(fù)鍙戝嚭鍘葷殑U D P鏁版嵁鎶ョ殑婧怚 P鍦板潃銆傝礬鐢辮〃鎵嶇湡姝e喅瀹氭暟鎹姤鍦ㄥ摢涓墿鐞嗘帴鍙d笂浼犲嚭鍘匯傚鏋滀笉璋冪敤b i n d錛岃屾槸鍏堣皟鐢╯ e n d t o鎴朩 S A S e n d To鎵ц榪炴帴錛岀綉緇滃爢鏍堝氨浼?xì)鏍规?br />璺敱琛紝鑷姩閫夊嚭鏈浣蟲湰鍦癐 P鍦板潃銆傝繖鎰忓懗鐫錛涘鏋滀綘鍏堟墽琛屾槑鏄劇粦瀹氾紝婧怚 P鍦板潃灝變細(xì)鏈夎銆?br />涔熷氨鏄錛屾簮I P鍙兘涓嶆槸鐪熸鍦ㄥ畠涓婇潰鍙戦佹暟鎹姤鐨勯偅涓帴鍙g殑I P鍦板潃銆?br />7.4.4 閲婃斁濂楁帴瀛楄祫婧?br />鍥犱負(fù)鏃犺繛鎺ュ崗璁病鏈夎繛鎺ワ紝鎵浠ヤ篃涓嶄細(xì)鏈夋寮忕殑鍏抽棴鍜屼粠瀹瑰叧闂傚湪鎺ユ敹绔垨鍙戦佺緇撴潫鏀跺彂鏁版嵁鏃訛紝瀹冨彧鏄湪濂楁帴瀛楀彞鏌勪笂璋冪敤c l o s e s o c k e t鍑芥暟銆傝繖鏍鳳紝渚塊噴鏀句簡涓哄鎺ュ瓧鍒嗛厤鐨?br />鎵鏈夌浉鍏寵祫婧愩?br />7.4.5 緇煎悎鍒嗘瀽
瀵逛簬鍦ㄦ棤榪炴帴鐨勫鎺ュ瓧涓婃敹鍙戞暟鎹殑姝ラ錛屽ぇ瀹剁幇鍦ㄥ凡緇忓緢娓呮浜嗐傛帴涓嬫潵錛屾垜浠潵鐪嬬湅鎵ц榪欎竴榪涚▼鐨勪唬鐮併傜▼搴忔竻鍗? - 3灞曠ず浜嗕竴涓棤榪炴帴鐨勬帴鏀剁銆傝繖孌典唬鐮佽鏄庝簡濡備綍鍦ㄩ粯璁ゆ帴鍙f垨鎸囧畾鐨勬湰鍦版帴鍙d笂鎺ユ敹鏁版嵁鎶ャ?/p>
7.5 鍏朵粬API鍑芥暟
鏈皬鑺備粙緇嶅叾浠栧嚑涓猈insock API鍑芥暟錛屽畠浠湪瀹為檯緗戠粶搴旂敤涓潪甯告湁鐢?br />1. getpeername
璇ュ嚱鏁扮敤浜庤幏寰楅氫俊鏂圭殑濂楁帴瀛楀湴鍧淇℃伅錛岃淇℃伅鏄叧浜庡凡寤虹珛榪炴帴鐨勯偅涓鎺ュ瓧鐨勩?br />瀹冪殑瀹氫箟濡備笅錛?br />int getpeername(
聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽struct sockaddr FAR * name,
聽聽聽聽聽聽聽聽int FAR *namelen
聽聽聽聽聽聽聽);
絎竴涓弬鏁版槸鍑嗗榪炴帴鐨勫鎺ュ瓧錛屽悗涓や釜鍙傛暟鍒欐槸鎸囧悜鍩哄眰鍗忚綾誨瀷鍙?qiáng)鍏堕暱搴︾殑鎸囬拡銆?br />瀵規(guī)暟鎹姤濂楁帴瀛楁潵璇達(dá)紝榪欎釜鍑芥暟榪斿洖鐨勬槸鎶曞悜榪炴帴璋冪敤鐨勯偅涓湴鍧錛涗絾涓嶄細(xì)榪斿洖鎶曞悜s e n d t o鎴朩 S A S e n d To璋冪敤鐨勯偅涓湴鍧銆?/p>
2. getsockname
璇ュ嚱鏁版槸g e t s o c k n a m e鐨勫搴斿嚱鏁般傚畠榪斿洖鐨勬槸鎸囧畾濂楁帴瀛楃殑鏈湴鎺ュ彛鐨勫湴鍧淇℃伅銆傚畠鐨勫畾涔夊涓嬶細(xì)
int getsockname(
聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽struct sockaddr FAR * name,
聽聽聽聽聽聽聽聽int FAR *namelen
聽聽聽聽聽聽聽);
聽闄や簡濂楁帴瀛梥榪斿洖鐨勫湴鍧淇℃伅鏈湴鍦板潃淇℃伅澶栵紝瀹冪殑鍙傛暟鍜実 e t p e e r n a m e鐨勫弬鏁伴兘鏄竴鏍風(fēng)殑銆?br />T C P鍗忚涓紝榪欎釜鍦板潃鍜岀洃鍚寚瀹氱鍙e拰I P鎺ュ彛鐨勯偅涓湇鍔″櫒濂楁帴瀛楁槸涓鏍風(fēng)殑銆?br />3. WSADuplicateSocket
W S A D u p l i c a t e S o c k e t鍑芥暟鐢ㄦ潵寤虹珛W S A P R O TO C O L _ I N F O緇撴瀯錛岃緇撴瀯鍙姇鍏ュ彟涓涓繘紼嬶紝榪欐牱灝卞彲鐢ㄥ彟涓涓繘紼嬫墦寮涓涓寚鍚戝悓涓涓熀灞傚鎺ュ瓧鐨勫彞鏌勶紝濡傛涓鏉ワ紝鍙︿竴涓繘紼嬩篃鑳藉璇ヨ祫婧愯繘琛屾搷浣溿傛敞鎰忥紝榪欎竴鐐瑰彧閫傜敤浜庝袱涓繘紼嬩箣闂達(dá)紱鍚屼竴涓繘紼嬩腑鐨勭嚎紼嬪彲鑷敱鎶曢掑鎺ュ瓧鎻忚堪絎︺傝鍑芥暟鐨勫畾涔夊涓嬶細(xì)
int WSADuplicateSocket(
聽聽聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽聽聽DWORD dwProcessId,
聽聽聽聽聽聽聽聽聽聽聽聽LPWSAPROTOCOL_INFO聽lpProtocol
聽聽聽聽聽聽聽聽聽聽聽);
絎竴涓弬鏁版槸鍑嗗澶嶅埗鐨勫鎺ュ瓧鍙ユ焺銆傜浜屼釜鍙傛暟d w P r o c e s s I d錛屾槸鎵撶畻浣跨敤澶嶅埗濂楁帴瀛楃殑榪涚▼涔婭 D銆傜涓変釜鍙傛暟l(fā) p P r o t o c o l I n f o錛屾槸涓涓寚鍚慦 S A P R O TO C O L _ I N F O緇撴瀯鐨勬寚閽堬紝灝嗗寘鍚洰鏍囪繘紼嬫墦寮澶嶅埗鍙ユ焺鏃舵墍闇鐨勪俊鎭備負(fù)浜嗕嬌鐩墠鐨勮繘紼嬭兘澶熸妸W S A P R O TO C O L _ I N F O
緇撴瀯鎶曞埌鐩爣榪涚▼錛岀劧鍚庡啀鍒╃敤璇ョ粨鏋勫緩绔嬩竴涓寚鍚戞寚瀹氬鎺ュ瓧鐨勫彞鏌勶紙鍒╃敤W S A S o c k e t鍑芥暟錛夛紝蹇呴』鑰冭檻榪涚▼闂撮氫俊銆?br />涓や釜濂楁帴瀛楃殑鎻忚堪絎﹂兘鍙嫭绔嬩嬌鐢↖ / O錛涗絾Wi n s o c k娌℃湁鎻愪緵璁塊棶鎺у埗錛屽洜姝よ繖瑕佺敱紼嬪簭鍛樺喅瀹氭槸鍚︽墽琛屽悓姝ャ傛墍鏈夋弿榪扮涓兘鍙鍒板叧鑱斿埌涓涓鎺ュ瓧鐨勬墍鏈夌姸鎬佷俊鎭紝榪欐槸鍥犱負(fù)澶嶅埗鐨勬槸濂楁帴瀛楁弿榪扮錛岃屼笉鏄簨瀹炰笂鐨勫鎺ュ瓧銆傛瘮鏂硅錛屽浜庢弿榪扮涓婄敱s e t s o c k e t o p t鍑芥暟璁劇疆鐨勪換浣曚竴涓鎺ュ瓧閫夐」錛岄兘鍙氳繃浠諱綍涓涓垨鎵鏈夋弿榪扮鍒╃敤g e t s o c k o p t鍑芥暟鏉ョ湅瀹冧滑銆?br />濡傛灉涓涓繘紼嬪湪涓涓鍒跺鎺ュ瓧涓婅皟鐢╟ l o s e s o c k e t錛屽氨浼?xì)瀵艰嚧璇q涚▼涓殑鎻忚堪絎﹀彉鎴愯В闄ゅ畾浣嶏紱浣嗗湪鏈鍚庣暀涓嬬殑閭d釜鎻忚堪絎︿笂璋冪敤c l o s e s o c k e t涔嬪墠錛屽熀灞傚鎺ュ瓧浼?xì)淇濇寔鎵撳紑鐘舵併?br />鍙﹀錛屽湪浣跨敤W S A A s y n c S e l e c t鍜學(xué) S A E v e n t S e l e c t鏃訛紝瑕佷簡瑙d笌鍏變韓濂楁帴瀛楃殑閫氱煡鏈夊叧鐨勫嚑涓棶棰樸傝繖涓や釜鍑芥暟鐢ㄤ簬寮傛I / O錛堟垜浠皢鍦ㄧ8绔犺繘琛岃璁猴級銆傚埄鐢ㄤ換浣曚竴涓叡浜弿榪扮鎵ц鍓嶄袱涓嚱鏁扮殑璋冪敤錛岄兘浼?xì)鍒犳帀鎵鏈夌殑濂楁帴瀛椾簨浠舵敞鍐岋紝涓嶇娉ㄥ唽鎵鐢ㄧ殑鎻忚堪絎︾┒绔熸槸鍝竴
涓備緥濡傦紝鍏變韓濂楁帴瀛椾笉鑳芥妸F D _ R E A D浜嬩歡鎶曢掔粰榪涚▼A錛屼笉鑳芥妸F D _ W R I T E鎶曢掔粰榪涚▼B銆?br />濡傛灉闇瑕佽繖涓や釜鎻忚堪絎︾殑浜嬩歡閫氱煡錛屽氨搴旇閲嶆柊璁捐搴旂敤紼嬪簭錛岀敤綰跨▼鏉ヤ唬鏇胯繘紼嬨?/p>
4. Tr a n s m i t F i l e
Tr a n s m i t F i l e鏄井杞笓鏈夌殑Wi n s o c k鎵╁睍錛屽畠鍏佽浠庝竴涓枃浠朵腑浼犺緭楂樻ц兘鏁版嵁銆傝繖鏄潪甯告湁鏁堢殑錛屽洜涓烘暣涓暟鎹紶杈撳彲鍦ㄥ唴鏍告ā寮忎腑榪涜銆備篃灝辨槸璇達(dá)紝濡傛灉浣犵殑搴旂敤浠庢寚瀹氱殑鏂囦歡涓鍙栦竴鍫嗘暟鎹紝鐒跺悗鐢╯ e n d鎴朩 S A S e n d鏃訛紝娑夊強(qiáng)鍒扳滅敤鎴鋒ā寮忓埌鍐呮牳妯″紡浼犺緭鈥濈殑鍙戦佽皟鐢ㄥ氨鏈夎嫢騫蹭釜銆傛湁浜員r a n s m i t F i l e錛屾暣涓鍙栧拰鍙戦佹暟鎹殑榪涚▼灝卞彲鍦ㄥ唴鏍告ā寮忎腑榪涜銆傝鍑?br />鏁扮殑瀹氫箟濡備笅錛?/p>
BOOL聽 TransmitFile(
聽聽聽聽聽聽聽聽聽聽SOCKET hSocket,
聽聽聽聽聽聽聽聽聽聽HANDLE hFile,
聽聽聽聽聽聽聽聽聽聽DWORD 聽nNumberOfBytesToWrite,
聽聽聽聽聽聽聽聽聽聽DWORD聽聽nNumberOfBytesPerSend,
聽聽聽聽聽聽聽聽聽聽LPOVERLAPPED聽lpOverlapped,
聽聽聽聽聽聽聽聽聽聽LPTRANMIT_FILE_BUFFERS 聽lpTransmitBuffers,
聽聽聽聽聽聽聽聽聽聽DWORD dwFlags
聽聽聽聽聽聽聽聽聽);
h S o c k e t鍙傛暟鐢ㄤ簬璇嗗埆宸茶繛鎺ヤ笂鐨勫鎺ュ瓧錛堟枃浠剁殑浼犺緭渚垮湪璇ュ鎺ュ瓧涓婅繘琛岋級銆俷 F i l e鍙傛暟鏄竴涓彞鏌勶紝璇ュ彞鏌勬寚鍚戜竴涓凡鎵撳紑鐨勫鎺ュ瓧錛堝嵆鍗沖皢鍙戦佺殑鏂囦歡錛夈俷 N u m b e r O f B y t e s To Wr i t e琛?br />鏄庡啓鍏ュ灝戞寚瀹氭枃浠朵腑鐨勫瓧鑺傘傛姇閫?琛ㄧず灝嗗彂閫佹暣涓枃浠躲俷 N u m b e r O f B y t e s P e r S e n d鍙傛暟鍒欒〃鏄庡啓鎿嶄綔鎵鐢ㄧ殑鍙戦侀暱搴︺備緥濡傦紝鎸囧畾2 0 4 8浼?xì)寮曡捣Tr a n s m i t F i l e鍦ㄥ鎺ュ瓧涓婁互2 KB鏁版嵁鍧楃殑褰?br />寮忓彂閫佹寚瀹氭枃浠躲傛姇閫?琛ㄧず閲囩敤榛樿鐨勫彂閫侀暱搴︺俵 p O v e r l a p p e d鍙傛暟鎸囧畾涓涓狾 V E R L A P P E D
緇撴瀯錛岃緇撴瀯鐢ㄤ簬閲嶅彔I / O妯″紡錛堝叧浜庨噸鍙營 / O錛屽彲鍙傝絎?绔狅級銆?br />鍙︿竴涓弬鏁發(fā) p Tr a n s m i t B u ff e r s錛屾槸涓涓猅 R A N S M I T _ F I L E _ B U F F E R S緇撴瀯錛屽叾涓寘鍚枃浠朵紶杈撲箣鍓嶅拰涔嬪悗鍑嗗鍙戦佺殑鏁版嵁銆傝緇撴瀯鐨勬牸寮忓涓嬶細(xì)
typedef struct _TANSMIT_FILE_BUFFERS{
聽PVOID聽Head;
聽DWORD HeadLenth;
聽PVOID Tail;
聽DWORD TailLength;
聽}TAANSMIT_FILE_BUFFERS;聽聽聽聽聽
聽
聽H e a d瀛楁鏄竴涓寚閽堬紝瀹冩寚鍚戞枃浠朵紶杈撲箣鍓嶅噯澶囧彂閫佺殑鏁版嵁銆侶 e a d L e n g t h琛ㄦ槑棰勫厛鍑嗗鍙戦佺殑鏁版嵁閲忋俆a i l瀛楁鍒欐寚鍚戞枃浠朵紶杈撲箣鍚庡噯澶囧彂閫佺殑鏁版嵁銆俆a i l L e n g t h鏄悗鏉ュ彂閫佺殑鏁版嵁閲忋偮犅犅犅犅犅犅犅犅犅?/p>
int recvfrom(
聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽char FAR * buf,
聽聽聽聽聽聽聽int len,
聽聽聽聽聽聽聽int flags,
聽聽聽聽聽聽聽struct sockaddr聽FAR * from,
聽聽聽聽聽聽聽int FAR * fromlen
聽聽聽聽聽聽);
鍓嶉潰鍥涗釜鍙傛暟鍜宺 e c v鏄竴鏍風(fēng)殑錛屽叾涓寘鎷爣蹇桵 S G _ O O B鍜孧 S G _ P E E K銆傚湪浣跨敤鏃犺繛鎺ュ鎺ュ瓧鏃訛紝鍜屽墠闈竴鏍鳳紝浠嶇劧鎻愰啋澶у鎱庣敤M S G _ P E E K鏍囧織銆傚鐩戝惉濂楁帴瀛楃殑鍏蜂綋鍗忚鏉ヨ錛宖 r o m鍙傛暟鏄竴涓猄 O C K A D D R緇撴瀯錛屽甫鏈夋寚鍚戝湴鍧緇撴瀯鐨勯暱搴︾殑f r o m l e n銆傝繖涓狝 P I璋冪敤榪斿洖鏁?br />鎹椂錛孲 O C K A D D R緇撴瀯鍐呬究濉叆鍙戦佹暟鎹殑閭d釜宸ヤ綔绔欑殑鍦板潃銆?/p>
r e c v f r o m鍑芥暟鐨刉insock 2鐗堟湰鏄疻 S A R e c v F r o m銆傚悗鑰呯殑鍘熷瀷鏄細(xì)
int WSARecvFrom(
聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽LPWSABUF聽lpBuffers,
聽聽聽聽聽聽聽聽聽DWORD聽dwBufferCount,
聽聽聽聽聽聽聽聽聽LPDWORD聽lpNumberOfBytesRecvd,
聽聽聽聽聽聽聽聽聽LPDWORD聽lpFlags,
聽聽聽聽聽聽聽聽聽struct聽sockaddr聽FAR *聽lpFrom,
聽聽聽聽聽聽聽聽聽LPINT聽lpFromlen,
聽聽聽聽聽聽聽聽聽LPWSAOVERLAPPED聽lpOverlapped,
聽聽聽聽聽聽聽聽聽LPWSAOVERLAPPED_COMPLETTION_ROUTINE聽lpComplettionROUTINE
聽聽聽聽聽聽聽聽);
涓よ呯殑宸埆鍦ㄤ簬鎺ユ敹鏁版嵁鐨刉 S A B U F緇撴瀯鐨勭敤娉曚笂銆備綘鍙互鍒╃敤d w B u ff e r C o u n t涓篧 S A R e c v F r o m鎻愪緵涓涓垨澶氫釜W S A B U F緙撳啿銆傛彁渚涘涓紦鍐詫紝灝卞彲鐢ㄥ彂鏁i泦鍚堜簡銆傝鍙栫殑瀛楄妭鎬繪暟榪斿洖鍦╨ p N u m b e r O f B y t e s R e c v d涓傚湪璋冪敤W S A R e c v F r o m鏃訛紝l p F l a g s鍙傛暟鍙互鏄唬琛?br />鏃犻夐」鐨?銆丮 S G _ O O B銆丮 S G _ P E E K鎴朚 S G _ PA RT I A L銆傝繖浜涙爣蹇楄繕鍙互绱姞璧鋒潵銆傚鏋滃湪璋冪敤榪欎釜鍑芥暟鏃訛紝鎸囧畾M S G _ PA RT I A L錛屾彁渚涜呭氨鐭ラ亾榪斿洖鏁版嵁錛屽嵆浣垮彧鏀跺埌浜嗛儴鍒嗘秷鎭傝皟鐢ㄨ繑鍥炰箣鍚庯紝濡傛灉鍙敹鍒伴儴鍒嗘秷鎭紝灝變細(xì)璁劇疆M S G _ PA RT I A L鏍囧織銆傚啀嬈¤繑鍥炰箣鍚庯紝
W S A R e c v F r o m灝變細(xì)鎶妉 p F r o m鍙傛暟錛堝畠鏄竴涓寚鍚慡 O C K A D D R緇撴瀯鐨勬寚閽堬級璁句負(fù)鍙戦佺鐨勫湴鍧銆傚啀嬈℃彁閱掑ぇ瀹舵敞鎰忥紝 l p F r o m L e n鎸囧悜S O C K A D D R緇撴瀯鐨勯暱搴︼紝鍙﹀錛屽湪榪欎釜鍑芥暟涓紝瀹冭繕鏄竴涓寚閽堬紝鎸囧悜D W O R D銆傛渶鍚庝袱涓弬鏁幫紝 l p O v e r l a p p e d鍜宭 p C o m p l e t i o n R O U T I N E錛岀敤浜?br />閲嶅彔I / O錛堟垜浠皢鍦ㄤ笅涓绔犲氨姝ゅ睍寮璁ㄨ錛夈?br />鍦ㄦ棤榪炴帴濂楁帴瀛椾笂鎺ユ敹錛堝彂閫侊級鏁版嵁鐨勫彟涓縐嶆柟娉曟槸寤虹珛榪炴帴銆傚惉璧鋒潵鏈変簺濂囨惂錛屼絾浜嬪疄鐨勭‘濡傛銆傛棤榪炴帴鐨勫鎺ュ瓧涓鏃﹀緩绔嬶紝渚垮彲鍒╃敤S O C K A D D R鍙傛暟錛堝畠琚涓哄噯澶囦笌涔嬮氫俊鐨勮繙紼嬫帴鏀剁鍦板潃錛夎皟鐢╟ o n n e c t鎴朩 S A C o n n e c t銆備絾浜嬪疄涓婂茍娌℃湁寤虹珛榪炴帴銆傛姇鍏ヨ繛鎺ュ嚱鏁扮殑濂楁帴瀛楀湴鍧鏄笌濂楁帴瀛楀叧鑱斿湪涓璧風(fēng)殑錛屽姝や竴鏉ワ紝鎵嶈兘澶熺敤R e c v鍜學(xué) S A R e c v鏉ヤ唬鏇?br />r e c v f r o m鍜學(xué) S A R e c v F r o m銆備負(fù)浠涔堝憿錛熷叾鍘熷洜鏄暟鎹殑濮嬪彂澶勬槸宸茬煡鐨勩傚鏋滃湪涓嬈″簲鐢ㄤ腑錛屽彧鍜屼竴涓鐐硅繘琛岄氫俊錛屼究鑳藉緢瀹規(guī)槗鍦頒笌鏁版嵁鎶ュ鎺ュ瓧寤虹珛榪炴帴銆?/p>
7.4.2 鍙戦佺
瑕佸湪涓涓棤榪炴帴鐨勫鎺ュ瓧涓婂彂閫佹暟鎹紝鏈変袱縐嶉夋嫨銆傜涓縐嶏紝涔熸槸鏈綆鍗曠殑涓縐嶏紝渚挎槸寤虹珛涓涓鎺ュ瓧錛岀劧鍚庤皟鐢╯ e n d t o鎴朩 S A S e n d To銆傛垜浠厛鏉ヨ瑙 e n d t o鍑芥暟錛屽畠鐨勫畾涔夋槸榪欐牱鐨勶細(xì)
聽int sendto(聽
聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽const char FAR * buf,
聽聽聽聽聽聽聽聽int len,
聽聽聽聽聽聽聽聽int flags,
聽聽聽聽聽聽聽聽const struct sockaddr FAR * to,
聽聽聽聽聽聽聽聽int tolen
聽聽聽聽聽聽聽);
聽闄や簡b u f鏄彂閫佹暟鎹殑緙撳啿錛?l e n鎸囨槑鍙戦佸灝戝瓧鑺傚錛屽叾浣欏弬鏁板拰r e c v f r o m鐨勫弬鏁頒竴鏍楓傚彟澶栵紝 t o鍙傛暟鏄竴涓寚鍚慡 O C K A D D R緇撴瀯鐨勬寚閽堬紝甯︽湁鎺ユ敹鏁版嵁鐨勯偅涓伐浣滅珯鐨勭洰鏍囧湴鍧銆?br />鍙﹀錛屼篃鍙互鐢╓insock 2鍑芥暟W S A S e n d To銆傚畠鐨勫畾涔夊涓嬶細(xì)
int WSASendTo(
聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽LPWSABUF聽lpBuffers,
聽聽聽聽聽聽聽聽DWORD聽dwBufferCount,
聽聽聽聽聽聽聽聽LPWORD聽lpNumberOfBytesSent,
聽聽聽聽聽聽聽聽DWORD聽dwFlags,
聽聽聽聽聽聽聽聽const 聽struct sockaddr FAR * lpTo,
聽聽聽聽聽聽聽聽int iToLen,
聽聽聽聽聽聽聽聽LPWSAOVERLAPPED聽lpOverlapped,
聽聽聽聽聽聽聽聽LPWSAOVERLAPPED_COMPLETTION_ROUTINE聽lpComplettionROUTINE
聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽
鍐嶆鎻愰啋澶у娉ㄦ剰錛?W S A S e n d To鍜屽墠涓鐗堟湰涓殑S e n d To鍑芥暟綾諱技銆傚畠鎶婃寚鍚戝甫鏈夊彂緇欐帴
鏀剁鐨勬暟鎹殑鎸囬拡褰撲綔l p B u ff e r s鍙傛暟錛?d w B u ff e r C o u n t鍙傛暟鎸囨槑鐜板湪鐨勭粨鏋勬槸澶氬皯銆傛垜浠彲鍙戦佸涓猈 S A B U F緇撴瀯鍚敤鍙戞暎闆嗗悎I / O銆傚湪鍑芥暟榪斿洖涔嬪墠錛學(xué) S A S e n d To鎶婄鍥涗釜鍙傛暟l(fā) p N u m b e r
O f B y t e s S e n t璁句負(fù)鐪熸鍙戝埌鎺ユ敹绔殑瀛楄妭鏁般俵 p To鍙傛暟鏄拡瀵瑰叿浣撳崗璁殑涓涓猄 O C K A D D R緇撴瀯錛屽茍甯︽湁鎺ユ敹绔殑鍦板潃銆俰 To L e n鍙傛暟鏄疭 O C K A D D R緇撴瀯鐨勯暱搴︺傛渶鍚庝袱涓弬鏁幫紝 l p O v e r l a p p e d鍜宭 p C o m p l e t i o n R O U T I N E錛岀敤浜庨噸鍙營 / O錛堝皢鍦ㄧ8绔犺璁猴級銆?br />閫氳繃鎺ユ敹鏁版嵁鐨勬柟寮忥紝灝卞彲鎶婁竴涓棤榪炴帴鐨勫鎺ュ瓧榪炴帴鍒頒竴涓鐐瑰湴鍧錛屽茍鍙互鐢╯ e n d鍜學(xué) S A S e n d鍙戦佹暟鎹簡銆傝繖縐嶅叧鑱斾竴鏃﹀緩绔嬶紝灝變笉鑳藉啀鐢ㄥ甫鏈夊湴鍧鐨剆 e n d t o鍜學(xué) S A S e n d To錛?br />闄ら潪榪欎釜鍦板潃鏄姇鍒板叾涓竴涓繛鎺ュ嚱鏁扮殑鍦板潃錛屽惁鍒欒皟鐢ㄥ氨浼?xì)澶辫触锛屽嚭鐜癢 S A E I S C O N N閿欒銆?br />瑕佸彇娑堝鎺ュ瓧鍙ユ焺涓庣洰鏍囧湴鍧鐨勫叧鑱旓紝鍞竴鐨勫姙娉曟槸鍦ㄨ繖涓鎺ュ瓧鍙ユ焺涓婅皟鐢╟ l o s e s o c k e t錛?br />騫跺緩绔嬩竴涓柊鐨勫鎺ュ瓧銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽
char sendBuff[2048];
int聽 nBytes = 2048;
int ret= 0;
ret = send(s,sendBuff,nBytes,0);
瀵箂 e n d鍑芥暟鑰岃█錛屽彲鑳戒細(xì)榪斿洖宸插彂鍑虹殑灝戜簬2 0 4 8鐨勫瓧鑺傘俽 e t鍙橀噺灝嗚涓哄彂閫佺殑瀛楄妭鏁幫紝榪欐槸鍥犱負(fù)瀵規(guī)瘡涓敹鍙戞暟鎹殑濂楁帴瀛楁潵璇達(dá)紝緋葷粺閮戒負(fù)瀹冧滑鍒嗛厤浜嗙浉褰撳厖瓚崇殑緙撳啿鍖虹┖闂淬傚湪鍙戦佹暟鎹椂錛屽唴閮ㄧ紦鍐插尯浼?xì)灏嗘暟鎹竴鐩翠繚鐣欏埌搴旇灝嗗畠鍙戝埌綰夸笂涓烘銆傚嚑縐嶅父瑙佺殑鎯呭喌閮藉彲瀵艱嚧榪欎竴鎯呭艦鐨勫彂鐢熴傛瘮鏂硅錛屽ぇ閲忔暟鎹殑浼犺緭鍙互浠ょ紦鍐插尯蹇熷~婊°傚悓鏃訛紝瀵筎 C P / I P鏉ヨ錛岃繕鏈変竴涓獥鍙eぇ灝忕殑闂銆傛帴鏀剁浼?xì)瀵菇H楀彛澶у皬榪涜璋冭妭錛屼互鎸囧嚭瀹冨彲浠ユ帴鏀跺灝戞暟鎹傚鏋滄湁澶ч噺鏁版嵁娑屽叆鎺ユ敹绔紝鎺ユ敹绔氨浼?xì)灏喗H楀彛澶у皬璁句負(fù)0錛屼負(fù)寰呭彂鏁版嵁鍋氬ソ鍑嗗銆傚鍙戦佺鏉?br />璇達(dá)紝榪欐牱浼?xì)寮轰护瀹冨湪鏀跺堫C竴涓柊鐨勫ぇ浜?鐨勭獥鍙eぇ灝忎箣鍓嶏紝涓嶅緱鍐嶅彂鏁版嵁銆傚湪浣跨敤s e n d璋冪敤鏃訛紝緙撳啿鍖哄彲鑳藉彧鑳藉綰? 0 2 4涓瓧鑺傦紝榪欐椂錛屼究鏈夊繀瑕佸啀鎻愬彇鍓╀笅鐨? 0 2 4涓瓧鑺傘傝淇濊瘉灝嗘墍鏈夌殑瀛楄妭鍙戝嚭鍘伙紝鍙噰鐢ㄤ笅闈㈢殑浠g爜銆?/p>
char sendbuf[2048];
int nBytes= 2048,nLeft,idx;
nLeft = nBytes;
idx = 0;
while(nLeft>0)
{
聽ret = send(s,&sendbuf[idx],nLeft,0);
聽if(ret == SOCKET_ERROR)
聽{
聽聽//ERROR
聽}
聽nLeft -= ret;
聽idx +=ret;
聽}
聽瀵瑰湪嫻佸鎺ュ瓧涓婃帴鏀舵暟鎹潵璇達(dá)紝鍓嶄竴孌典唬鐮佹湁鐢紝浣嗘剰涔変笉澶с傚洜涓烘祦濂楁帴瀛楁槸涓涓笉闂存柇鐨勬暟鎹祦錛屽簲鐢ㄧ▼搴忓湪璇誨彇瀹冩椂錛屽拰瀹冨簲璇ヨ澶氬皯鏁版嵁涔嬮棿閫氬父娌℃湁鍏崇郴銆傚鏋滃簲鐢ㄩ渶瑕佷緷璧栦簬嫻佸崗璁殑紱繪暎鏁版嵁錛屼綘灝辨湁鍒殑浜嬭鍋氥傚鏋滄墍鏈夋秷鎭暱搴﹂兘涓鏍鳳紝鍒欐瘮杈冪畝鍗曪紝涔熷氨鏄錛?5 1 2涓瓧鑺傜殑娑堟伅鐪嬭搗鏉ュ氨鍍忎笅闈㈣繖鏍鳳細(xì)
char recvbuf[2048];
int ret,nLeft,idx;
nLeft = 512;
idx = 0;
while(nLeft>0)
{
聽ret = recv(s,&recvbuf[idx],nLeft,0);
聽if(ret = SOCKET_ERROR)
聽{
聽聽//ERROR
聽}
聽idx += ret;
聽nLeft -= ret;
}
娑堟伅闀垮害涓嶅悓錛屽鐞嗕篃鍙兘涓嶅悓銆傚洜姝わ紝鏈夊繀瑕佸埄鐢ㄤ綘鑷繁鐨勫崗璁潵閫氱煡鎺ユ敹绔紝鍗沖皢
鍒版潵鐨勬秷鎭暱搴︽槸澶氬皯銆傛瘮鏂硅錛屽啓鍏ユ帴鏀剁鐨勫墠4涓瓧鑺備竴鐩存槸鏁存暟錛岃〃紺哄嵆灝嗗埌鏉ョ殑娑堟伅
鏈夊灝戝瓧鑺傘傜劧鍚庯紝鎺ユ敹绔厛鏌ョ湅鍓?涓瓧鑺傜殑鏂瑰紡錛屾妸瀹冧滑杞崲鎴愪竴涓暣鏁幫紝鐒跺悗鍒ゆ柇鏋勬垚
娑堟伅鐨勫瓧鑺傛暟鏄灝戯紝閫氳繃榪欑鏂瑰紡錛屼究寮濮嬮愭璇誨彇銆?/p>
鍒嗘暎闆嗗悎I/O
鍒嗘暎闆嗗悎鏀寔鏄疊erkeley Socket涓嬈¢殢R e c v鍜學(xué)r i t e v榪欎袱涓嚱鏁頒竴璧峰嚭鐜扮殑姒傚康銆?br />瀹冮殢W S A R e c v銆乄 S A R e c v F r o m銆乄 S A S e n d鍜學(xué) S A S e n d To榪欏嚑涓猈insock 2鍑芥暟涓璧蜂嬌鐢ㄣ?br />瀵規(guī)敹鍙戞牸寮忕壒鍒殑鏁版嵁榪欎竴綾葷殑搴旂敤鏉ヨ錛屽畠鏄潪甯告湁鐢ㄧ殑銆傛瘮鏂硅錛屽鎴鋒満鍙戝埌鏈嶅姟鍣ㄧ殑娑堟伅鍙兘涓鐩撮兘鏄繖鏍鋒瀯鎴愮殑錛屼竴涓寚瀹氭煇縐嶆搷浣滅殑鍥哄畾鐨? 2瀛楄妭鐨勫ご錛屼竴涓? 4瀛楄妭鐨勬暟鎹潡鍜屼竴涓? 6瀛楄妭鐨勫熬銆傝繖鏃訛紝灝卞彲鐢ㄤ竴涓敱涓変釜W S A B U F緇撴瀯緇勬垚鐨勬暟緇勮皟鐢╓ S A S e n d錛岃繖涓変釜緇撴瀯鍒嗗埆瀵瑰簲鐨勪笁縐嶆秷鎭被鍨嬨傚湪鎺ユ敹绔紝鍒欑敤3涓猈 S A B U F緇撴瀯鏉ヨ皟鐢╓ S A R e c v錛屽悇涓粨鏋勫寘鍚殑鏁版嵁緙撳啿鍒嗗埆鏄? 2瀛楄妭銆? 4瀛楄妭鍜? 6瀛楄妭銆?br />鍦ㄤ嬌鐢ㄥ熀浜庢祦鐨勫鎺ュ瓧鏃訛紝鍒嗘暎闆嗗悎I / O妯″紡鍙槸鎶奧 S A B U F緇撴瀯涓彁渚涚殑鏁版嵁緙撳啿褰撲綔涓涓繛緇х殑緙撳啿銆傚彟澶栵紝鎺ユ敹璋冪敤鍙兘鍦ㄦ墍鏈夌紦鍐插~婊′箣鍓嶅氨榪斿洖銆傚湪鍩轟簬娑堟伅鐨勫鎺ュ瓧涓婏紝姣忔瀵規(guī)帴鏀舵搷浣滅殑璋冪敤閮戒細(xì)鏀跺埌涓鏉℃秷鎭紝鍏墮暱搴︾敱鎵鎻愪緵鐨勭紦鍐插喅瀹氥傚鏋滅紦鍐蹭笉澶燂紝璋冪敤灝變細(xì)澶辮觸錛屽茍鍑虹幇W S A E M S G S I Z E閿欒錛屼負(fù)浜嗛傚簲鍙敤鐨勭紦鍐叉暟鎹氨浼?xì)琚埅鏂傚綋鐒訛紝濡傛灉鐢ㄦ敮鎸侀儴鍒嗘秷鎭殑鍗忚錛屽氨鍙敤M S G _ PA RT I A L鏍囧織鏉ラ伩鍏嶆暟鎹殑涓㈠け銆?/p>
7.3.5 涓柇榪炴帴
涓鏃﹀畬鎴愪換鍔★紝灝卞繀欏誨叧鎺夎繛鎺ワ紝閲婃斁鍏寵仈鍒伴偅涓鎺ュ瓧鍙ユ焺鐨勬墍鏈夎祫婧愩傝鐪熸鍦伴噴鏀句笌涓涓紑鐫鐨勫鎺ュ瓧鍙ユ焺鍏寵仈鐨勮祫婧愶紝鎵цc l o s e s o c k e t璋冪敤鍗沖彲銆備絾瑕佹槑鐧借繖涓鐐癸紝
c l o s e s o c k e t鍙兘浼?xì)甯︽潵璐熼潰濯?jiǎng)鍝嶏紙鍜屽浣曡皟鐢ㄥ畠鏈夊叧錛夛紝鍗沖彲鑳戒細(xì)瀵艱嚧鏁版嵁鐨勪涪澶便傞壌浜庢錛屽簲璇ュ湪璋冪敤c l o s e s o c k e t鍑芥暟涔嬪墠錛屽埄鐢╯ h u t d o w n鍑芥暟浠庡涓柇榪炴帴銆傛帴涓嬫潵錛屾垜浠潵璋堣皥榪欎袱涓狝 P I鍑芥暟銆?br />1. shutdown
涓轟簡淇濊瘉閫氫俊鏂硅兘澶熸敹鍒板簲鐢ㄥ彂鍑虹殑鎵鏈夋暟鎹紝瀵逛竴涓紪寰楀ソ鐨勫簲鐢ㄦ潵璇達(dá)紝搴旇閫氱煡鎺ユ敹绔滀笉鍐嶅彂閫佹暟鎹濄傚悓鏍鳳紝閫氫俊鏂逛篃搴旇濡傛銆傝繖灝辨槸鎵璋撶殑鈥滀粠瀹瑰叧闂濇柟娉曪紝騫剁敱s h u t d o w n鍑芥暟鏉ユ墽琛屻俿 h u t d o w n鐨勫畾涔夊涓嬶細(xì)
int shutdown(
聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽int how
聽聽聽聽聽聽);
h o w鍙傛暟鍙互鏄笅闈㈢殑浠諱綍涓涓鹼細(xì) S D _ R E C E I V E銆丼 D _ S E N D鎴朣 D _ B O T H銆傚鏋滄槸S D _ R E C E I V E錛屽氨琛ㄧず涓嶅厑璁稿啀璋冪敤鎺ユ敹鍑芥暟銆傝繖瀵瑰簳閮ㄧ殑鍗忚灞傛病鏈夊獎(jiǎng)鍝嶃傚彟澶栵紝瀵筎 C P濂楁帴瀛楁潵璇達(dá)紝涓嶇鏁版嵁鍦ㄧ瓑鍊欐帴鏀訛紝榪樻槸鏁版嵁鎺ヨ繛鍒拌揪錛岄兘瑕侀噸璁捐繛鎺ャ傚敖綆″姝わ紝 U D P濂楁帴瀛椾笂錛屼粛鐒舵帴鍙楀茍鎺掑垪鎺ュ叆鐨勬暟鎹傚鏋滈夋嫨S E _ S E N D錛岃〃紺轟笉鍏佽鍐嶈皟鐢ㄥ彂閫佸嚱鏁般傚T C P濂楁帴瀛楁潵璇達(dá)紝榪欐牱浼?xì)鍦ㄦ墍鏈夋暟鎹彂鍑猴紝騫跺緱鍒版帴鏀剁紜涔嬪悗錛岀敓鎴愪竴涓狥 I N鍖呫傛渶鍚庯紝
濡傛灉鎸囧畾S D _ B O T H錛屽垯琛ㄧず鍙栨秷榪炴帴涓ょ鐨勬敹鍙戞搷浣溿?/p>
2. closesocket
c l o s e s o c k e t鍑芥暟鐢ㄤ簬鍏抽棴濂楁帴瀛楋紝瀹冪殑瀹氫箟濡備笅錛?/p>
int closesocket(SOCKET s);
c l o s e s o c k e t鐨勮皟鐢ㄤ細(xì)閲婃斁濂楁帴瀛楁弿榪扮錛屽啀鍒╃敤濂楁帴瀛楁墽琛岃皟鐢ㄥ氨浼?xì)澶辫触锛岒q跺嚭鐜癢 S A E N O T S O C K閿欒銆傚鏋滄病鏈夊璇ュ鎺ュ瓧鐨勫叾浠栧紩鐢紝鎵鏈変笌鍏舵弿榪扮鍏寵仈鐨勮祫婧愰兘浼?xì)琚?br />閲婃斁銆傚叾涓寘鎷涪寮冩墍鏈夌瓑渚鐞嗙殑鏁版嵁銆?br />瀵硅繖涓繘紼嬩腑浠諱綍涓涓嚎紼嬫潵璇達(dá)紝瀹冧滑鎵ц鐨勫緟鍐沖紓姝ヨ皟鐢ㄩ兘鍦ㄦ湭鎶曢掍換浣曢氱煡娑堟伅鐨勬儏鍐典笅琚垹闄ゃ傚緟鍐崇殑閲嶅彔鎿嶄綔涔熻鍒犻櫎銆備笌璇ラ噸鍙犳搷浣滃叧鑱旂殑浠諱綍浜嬩歡錛屽畬鎴愪緥紼嬫垨瀹屾垚绔彛鑳芥墽琛岋紝浣嗘渶鍚庝細(xì)澶辮觸錛屽嚭鐜癢 S A _ O P E R AT I O N _ A B O RT E D閿欒銆傚紓姝ュ拰闈炲皝閿両 / O妯?br />寮忓皢鍦ㄧ8绔犳繁鍏ヨ瑙c傚彟澶栵紝榪樻湁涓鐐逛細(xì)瀵筩 l o s e s o c k e t鐨勮涓轟駭鐢熷獎(jiǎng)鍝嶏細(xì)濂楁帴瀛楅夐」S O _ L I N G E R鏄惁宸茬粡璁劇疆銆傝寰楃煡鍏朵腑緙樼敱錛屽弬鑰冪9绔犱腑瀵筍 O _ L I N G E R閫夐」鐨勬弿榪般?/p>
int recv(
聽聽聽聽聽SOCKET s,
聽聽聽聽聽char FAR * buf,
聽聽聽聽聽int len,
聽聽聽聽聽int flags
聽聽聽聽);
絎竴涓弬鏁皊錛屾槸鍑嗗鎺ユ敹鏁版嵁鐨勯偅涓鎺ュ瓧銆傜浜屼釜鍙傛暟b u f錛屾槸鍗沖皢鏀跺埌鏁版嵁鐨勫瓧絎︾紦鍐詫紝鑰宭 e n鍒欐槸鍑嗗鎺ユ敹鐨勫瓧鑺傛暟鎴朾 u f緙撳啿鐨勯暱搴︺傛渶鍚庯紝 f l a g s鍙傛暟鍙互鏄笅闈㈢殑鍊鹼細(xì) 0銆丮 S G _ P E E K鎴朚 S G _ O O B銆傚彟澶栵紝榪樺彲瀵硅繖浜涙爣蹇椾腑鐨勬瘡涓涓繘琛屾寜浣嶅拰榪愮畻銆傚綋鐒訛紝 0琛ㄧず鏃犵壒孌婅涓恒侻 S G _ P E E K浼?xì)鋴涉湁鐢ㄧ殑鏁版嵁澶嶅埗鍒版墍鎻愪緵鐨勬帴鏀剁緙撳啿鍐咃紝浣嗘槸娌℃湁浠庣郴緇熺紦
鍐蹭腑灝嗗畠鍒犻櫎銆傚彟澶栵紝榪樿繑鍥炰簡寰呭彂瀛楄妭鏁般?br />娑堟伅鍙栨暟涓嶅お濂姐傚畠涓嶄粎瀵艱嚧鎬ц兘涓嬮檷錛堝洜涓洪渶瑕佽繘琛屼袱嬈$郴緇熻皟鐢紝涓嬈℃槸鍙栨暟錛屽彟涓嬈℃槸鏃燤 S G _ P E E K鏍囧織鐨勭湡姝e垹闄ゆ暟鎹殑璋冪敤錛夛紝鍦ㄦ煇浜涙儏鍐典笅榪樺彲鑳戒笉鍙潬銆傝繑鍥炵殑鏁版嵁鍙兘娌℃湁鍙嶅皠鍑虹湡姝f湁鐢ㄧ殑鏁伴噺銆備笌姝ゅ悓鏃訛紝鎶婃暟鎹暀鍦ㄧ郴緇熺紦鍐詫紝鍙綰蟲帴鍏ユ暟鎹殑緋葷粺絀洪棿灝變細(xì)瓚婃潵瓚婂皯銆傚叾緇撴灉渚挎槸錛岀郴緇熷噺灝戝悇鍙戦佺鐨凾 C P紿楀彛瀹歸噺銆傜敱姝わ紝浣犵殑搴旂敤灝變笉鑳借幏寰楁渶澶х殑嫻侀氥傛渶濂芥槸鎶婃墍鏈夋暟鎹兘澶嶅埗鍒拌嚜宸辯殑緙撳啿涓紝騫跺湪閭i噷璁$畻鏁版嵁銆傚墠闈㈡浘浠嬬粛榪嘙 S G _ O O B鏍囧織銆傛湁鍏寵鎯咃紝鍙傝鍓嶉潰鈥滃甫澶栨暟鎹濈殑鍐呭銆?/p>
鍦ㄩ潰鍚戞秷鎭垨闈㈠悜鏁版嵁鎶ョ殑濂楁帴瀛椾笂浣跨敤r e c v鏃訛紝榪欏嚑鐐瑰簲璇ユ敞鎰忋傚湪寰呭彂鏁版嵁澶т簬鎵鎻愪緵鐨勭紦鍐茶繖涓浜嬩歡涓紝緙撳啿鍐呬細(xì)灝介噺鍦板~鍏呮暟鎹傝繖鏃訛紝 r e c v璋冪敤灝變細(xì)浜х敓W S A E M S G S I Z E閿欒銆傛敞鎰忥紝娑堟伅闀塊敊璇槸鍦ㄤ嬌鐢ㄩ潰鍚戞秷鎭殑鍗忚鏃跺彂鐢熺殑銆傛祦鍗忚鎶婃帴鍏ョ殑鏁版嵁緙撳瓨涓嬫潵錛?br />騫跺敖閲忓湴榪斿洖搴旂敤鎵瑕佹眰鐨勬暟鎹紝鍗充嬌寰呭彂鏁版嵁鐨勬暟閲忔瘮緙撳啿澶с傚洜姝わ紝瀵規(guī)祦寮忎紶杈撳崗璁潵璇達(dá)紝灝變笉浼?xì)纰板埌W S A E M S G S I Z E榪欎釜閿欒銆?br />W S A R e c v鍑芥暟鍦╮ e c v鐨勫熀紜涓婂鍔犱簡涓浜涙柊鐗規(guī)с傛瘮濡傝閲嶅彔I / O鍜岄儴鍒嗘暟鎹姤閫氱煡銆?br />W S A R e c v鐨勫畾涔夊涓嬶細(xì)
int WSARecv(
聽聽聽聽聽聽聽SOCKET聽s,
聽聽聽聽聽聽聽LPWSABUF lpBuffers,
聽聽聽聽聽聽聽DWORD聽聽 dwBufferCount,
聽聽聽聽聽聽聽LPWORD聽 lpNumberOfBytesRecved,
聽聽聽聽聽聽聽LPWSAOVERLAPPED聽lpOverlapped,
聽聽聽聽聽聽聽LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
聽聽聽聽聽聽);
聽聽聽聽聽聽
鍙傛暟s錛屾槸宸插緩绔嬭繛鎺ョ殑濂楁帴瀛椼傜浜屽拰絎笁涓弬鏁版槸鎺ユ敹鏁版嵁鐨勭紦鍐層俵 p B u ff e r s鍙傛暟鏄竴涓猈 S A B U F緇撴瀯緇勬垚鐨勬暟緇勶紝鑰宒 w B u ff e r C o u n t鍒欒〃鏄庡墠涓涓暟緇勪腑W S A B U F緇撴瀯鐨勬暟鐩?br />濡傛灉鎺ユ敹鎿嶄綔绔嬪嵆瀹屾垚錛?l p N u m b e r O f B y t e s R e c e i v e d鍙傛暟灝變細(xì)鎸囧悜鎵ц榪欎釜鍑芥暟璋冪敤鎵鏀跺埌鐨勫瓧鑺傛暟銆俵 p F l a g s鍙傛暟鍙互鏄笅闈換浣曚竴涓鹼細(xì) M S G _ P E E K銆丮 S G _ O O B銆丮 S G _ PA RT I A L鎴栬呭榪欎簺鍊艱繘琛屾寜浣嶅拰榪愮畻涔嬪悗鐨勭粨鏋溿侻 S G _ PA RT I A L鏍囧織浣跨敤鍜屽嚭鐜扮殑鍦版柟涓嶅悓錛屽叾鍚?br />涔変篃涓嶅悓銆傚闈㈠悜娑堟伅鐨勫崗璁潵璇達(dá)紝榪欎釜鏍囧織鏄疻 S A R e c v璋冪敤榪斿洖鍚庤緗殑錛堝鏋滃洜涓虹紦鍐茬┖闂翠笉澶熷鑷存暣鏉℃秷鎭湭鑳藉湪榪欐璋冪敤涓繑鍥炵殑璇濓級銆傝繖鏃訛紝鍚庨潰鐨刉 S A R e c v璋冪敤灝變細(xì)璁劇疆榪欎釜鏍囧織M A S G _ PA RT I A L錛岀洿鍒版暣鏉℃秷鎭繑鍥烇紝鎵嶆妸榪欎釜鏍囧織娓呴櫎銆傚鏋滆繖涓爣蹇楀綋浣滀竴涓緭鍏ュ弬鏁版姇閫掞紝鎺ユ敹鎿嶄綔搴旇鍦ㄤ竴鏀跺埌鏁版嵁灝辯粨鏉燂紝鍗充嬌瀹冩敹鍒扮殑鍙槸鏁存潯娑堟伅涓殑涓閮ㄥ垎銆?br />M S G _ PA RT I A L鏍囧織鍙殢闈㈠悜娑堟伅鐨勫崗璁竴璧蜂嬌鐢ㄣ傛瘡涓崗璁殑鍗忚鏉$洰閮藉寘鍚竴涓爣蹇楋紝琛ㄦ槑鏄惁鏀寔榪欎竴鐗規(guī)с傛湁鍏寵鎯咃紝鍙傝絎?绔犮俵 p O v e r l a p p e d鍜宭 p C o m p l e t i o n R O U T I N E鍙傛暟鐢ㄤ簬閲嶅彔I / O鎿嶄綔
4. WSARecvDisconnect
榪欏嚱鏁頒笌W S A S e n d D i s c o n n e c t鍑芥暟瀵瑰簲錛屽叾瀹氫箟濡備笅錛?br />int WSARecvDisconnect(聽
聽聽聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽聽聽LPWSABUF lpOUTboundDisconnectData
聽聽聽聽聽聽聽聽聽聽聽);
鍜學(xué) S A S e n d D i s c o n n e c t鍑芥暟鐨勫弬鏁頒竴鏍鳳紝璇ュ嚱鏁扮殑鍙傛暟涔熸槸宸插緩绔嬭繛鎺ョ殑濂楁帴瀛楀彞鏌勫拰
涓涓湁鏁堢殑W S A B U F緇撴瀯錛堝甫鏈夋敹鍒扮殑鏁版嵁錛夈傛敹鍒扮殑鏁版嵁鍙互鍙槸鏂紑鏁版嵁銆傝繖涓柇寮鏁版嵁鏄彟涓绔墽琛學(xué) S A S e n d D i s c o n n e c t璋冪敤鍙戝嚭鐨勶紝瀹冧笉鑳界敤浜庢帴鏀舵櫘閫氭暟鎹傚彟澶栵紝涓鏃︽敹鍒拌繖涓暟鎹紝 W S A R e c v D i s c o n n e c t鍑芥暟灝變細(xì)鍙栨秷鎺ユ敹榪滅▼閫氫俊鏂圭殑鏁版嵁錛屽叾浣滅敤鍜岃皟鐢ㄥ甫鏈塖 D _ R E C V鐨剆 h u t d o w n鍑芥暟鐩稿悓銆?br />5. WSARecvEx
W S A R e c v E x鍑芥暟鏄井杞笓鏈夌殑Winsock 1鎵╁睍錛岄櫎浜唂 l a g s鍙傛暟鏄寜鍊煎紩鐢ㄥ錛屽叾浣欏拰r e c v鍑芥暟鏄竴鏍風(fēng)殑銆傚畠鍏佽鍩哄眰鐨勬彁渚涜呰緗甅 S G _ PA RT I A L鏍囧織銆傝鍑芥暟鐨勫師鍨嬪涓嬶細(xì)
int PASCAL FAR WSARecvEx(
聽聽聽聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽聽聽聽char FAR * buf,
聽聽聽聽聽聽聽聽聽聽聽聽聽int len,
聽聽聽聽聽聽聽聽聽聽聽聽聽int * flags
聽聽聽聽聽聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽聽聽聽聽聽
濡傛灉鏀跺埌鐨勬暟鎹笉鏄竴鏉″畬鏁寸殑娑堟伅錛?f l a g s鍙傛暟涓氨浼?xì)杩斿洖M S G _ PA RT I A L鏍囧織銆傚闈㈠悜娑堟伅鐨勫崗璁紙鍗抽潪嫻佸崗璁級鏉ヨ錛岃繖涓爣蹇楁瘮杈冩湁鐢紙鍗抽潪嫻佸崗璁級銆傚湪M S G _ PA RT I A L鏍囧織琚綋浣渇 l a g s鍙傛暟鐨勪竴閮ㄥ垎鎶曢掞紝鑰屼笖鏀跺埌鐨勬秷鎭張涓嶅畬鏁存椂錛岃皟鐢╓ S A R e c v E x錛屽氨浼?xì)绔嬪?br />榪斿洖鏀跺埌鐨勯偅涓暟鎹傚鏋滄彁渚涚殑鎺ユ敹緙撳啿瀹圭撼涓嶄笅鏁存潯娑堟伅錛?W S A R e c v E x灝變細(xì)澶辮觸錛屽茍鍑虹幇W S A E M S G S I Z E 閿欒錛屽墿涓嬬殑鏁版嵁涔熶細(xì)琚埅鎺夈傛敞鎰忥紝 M S G _ PA RT I A L 鏍囧織鍜學(xué) S A E M S G S I Z E閿欒涔嬮棿鐨勭‘鍖哄埆鏄細(xì)鏈変簡榪欎釜閿欒錛屽嵆浣挎暣鏉℃秷鎭埌杈炬帴鏀剁錛屼絾鐢變簬鎻?br />渚涚殑鏁版嵁緙撳啿澶皯錛屼篃涓嶈兘瀵瑰畠榪涜鎺ユ敹銆侻 S G _ P E E K 鍜孧 S G _ O O B鏍囧織榪樺彲浠ュ拰W(xué) S A R e c v E x涓璧蜂嬌鐢ㄣ?/p>
TCP鐘舵?br />浣滀負(fù)涓鍚峎i n s o c k紼嬪簭鍛橈紝閫氬父娌″繀瑕佷簡瑙e疄闄呯殑T C P鐘舵併備絾浜嗚ВT C P鐘舵侊紝灝辮兘鏇村ソ鍦扮悊瑙insock API璋冪敤濡備綍瀵瑰熀灞傚崗璁腑鐨勬敼鍙樹駭鐢熷獎(jiǎng)鍝嶃傛澶栵紝璁稿紼嬪簭鍛樺湪鍏抽棴濂楁帴瀛楁椂錛屼細(xì)紕板埌涓涓父瑙侀棶棰橈紱鍥寸粫濂楁帴瀛楀叧闂殑T C P鐘舵佹槸鎴戜滑鐩墠鏈鎰熷叴瓚g殑闂銆?/p>
瀵規(guī)瘡涓鎺ュ瓧鏉ヨ錛屽畠鐨勫垵濮嬬姸鎬侀兘鏄疌 L O S E D銆傝嫢瀹㈡埛鏈哄垵濮嬪寲浜嗕竴涓繛鎺ワ紝灝變細(xì)鍚戞湇鍔″櫒鍙戦佷竴涓猄 Y N鍖咃紝鍚屾椂灝嗗鎴鋒満濂楁帴瀛楃姸鎬佺疆涓篠 Y N _ S E N T銆傛湇鍔″櫒鏀跺埌S Y N鍖呭悗錛屼細(xì)鍙戝嚭涓涓?S Y N - A C K鈥濆寘銆備綔涓哄鎴鋒満錛岄渶瑕佺敤涓涓狝 C K鍖呭瀹冨仛鍑哄弽搴斻傛鏃訛紝瀹㈡埛鏈虹殑濂楁帴瀛椾細(xì)鍙樻垚E S TA B L I S H E D鐘舵併傚鏋滄湇鍔″櫒涓鐩翠笉鍙戦佲?S Y N - A C K鈥濆寘錛屽鎴鋒満灝變細(xì)瓚呮椂錛屽茍榪斿洖C L O S E D鐘舵併?/p>
鑻ヤ竴涓湇鍔″櫒鐨勫鎺ュ瓧鍚屼竴涓湰鍦版帴鍙e拰绔彛緇戝畾璧鋒潵錛屽茍鍦ㄥ畠涓婇潰榪涜鐩戝惉錛岄偅涔堝鎺ュ瓧鐨勭姸鎬佷究鏄疞 I S T E N銆傚鎴鋒満璇曞浘涓庝箣榪炴帴鏃訛紝鏈嶅姟鍣ㄥ氨浼?xì)鏀跺堫C竴涓猄 Y N鍖咃紝騫剁敤涓涓猄 Y N - A C K鍖呭仛鍑哄搷搴斻傛湇鍔″櫒濂楁帴瀛楃殑鐘舵佸氨鍙樻垚S Y N _ R C V D銆傛渶鍚庯紝瀹㈡埛鏈哄彂鍑轟竴涓狝 C K鍖咃紝浠ゆ湇鍔″櫒濂楁帴瀛楃殑鐘舵佸彉鎴怑 S TA B L I S H E D銆?/p>
涓鏃﹀簲鐢ㄥ浜嶦 S TA B L I S H E D鐘舵侊紝鍙氳繃涓ょ鏂規(guī)硶鏉ュ叧闂畠銆傚鏋滅敱搴旂敤紼嬪簭鏉ュ叧闂紝渚垮彨浣溾滀富鍔ㄥ鎺ュ瓧鍏抽棴鈥濓紱鍚﹀垯錛屽鎺ュ瓧鐨勫叧闂究鏄鍔ㄧ殑銆傚浘7 - 2瀵逛袱縐嶅叧闂柟娉曡繘琛屼簡瑙i噴銆傚涓誨姩鍏抽棴錛屽簲鐢ㄧ▼搴忎究浼?xì)鍙戝囖Z竴涓狥 I N鍖呫傚簲鐢ㄧ▼搴忚皟鐢╟ l o s e s o c k e t鎴杝 h u t d o w n鏃訛紙鎶奡 D _ S E N D褰撲綔絎簩涓弬鏁幫級錛屼細(xì)鍚戝鏂瑰彂鍑轟竴涓狥 I N鍖咃紝鑰屼笖濂楁帴瀛楃殑鐘舵佸垯鍙樻垚F I N _ WA I T _ 1銆傛甯告儏鍐典笅錛岄氫俊瀵規(guī)柟浼?xì)鍥炲簲涓涓狝 C K鍖咃紝鎴戜滑鐨勫鎺ュ瓧鐨勭姸鎬?br />闅忎箣鍙樻垚F I N _ WA I T _ 2銆傚瀵規(guī)柟涔熷叧闂簡榪炴帴錛屼究浼?xì)鍙戝囖Z竴涓狥 I N鍖咃紝鎴戜滑鐨勬満鍣ㄥ垯浼?xì)鍝嶅簲涓涓狝 C K鍖咃紝騫跺皢宸辨柟濂楁帴瀛楃殑鐘舵佺疆涓篢 I M E _ WA I T銆?/p>
T I M E _ WA I T鐘舵佷篃鍙綔2 M S L絳夊緟鐘舵併傚叾涓紝 M S L浠h〃鈥滃垎孌墊渶闀跨敓瀛樻椂闂粹濓紙Maximum Segment Lifetime錛夛紝琛ㄧず涓涓暟鎹寘鍦ㄤ涪寮冧箣鍓嶏紝鍙湪緗戠粶涓婂瓨鍦ㄥ闀挎椂闂淬?br />姣忎釜I P鍖呴兘鍚湁涓涓滅敓瀛樻椂闂粹濓紙T T L錛夊瓧孌碉紝鑻ュ畠閫掑噺涓?錛屽寘渚夸細(xì)琚涪寮冦備竴涓寘緇忚繃緗戠粶涓婄殑姣忎釜璺敱鍣ㄦ椂錛?T T L 鍊奸兘浼?xì)鍑? 錛岀劧鍚庣戶緇紶閫掋備竴鏃﹀簲鐢ㄧ▼搴忚繘鍏 I M E _ WA I T鐘舵侊紝閭d箞灝變細(xì)涓鐩存寔緇璏 S L鏃墮棿鐨勪袱鍊嶄箣涔呫傝繖鏍蜂竴鏉ワ紝 T C P灝卞彲浠ュ湪鏈鍚庝竴涓狝 C K涓㈠け鐨勫墠鎻愪笅錛岄噸鏂板彂閫佸畠錛屼篃灝辨槸璇達(dá)紝 F I N浼?xì)琚噸鏂颁紶閫佸嚭鍘匯侻 S L鏃墮棿涓ゅ嶄箣涔呯殑絳夊緟鐘舵佺粨鏉熶箣鍚庯紝濂楁帴瀛椾究榪涘叆C L O S E D鐘舵併?br />鍥?-2 TCP濂楁帴瀛楃殑鍏抽棴鐘舵?br />
濂楁帴瀛椾富鍔ㄥ叧闂?br />鍏抽棴濂楁帴瀛?br />鍙戦? FIN----->FIN_WAIT_1--鎺ユ敹:ACK-->FIN_WAIT_2----鎺ユ敹: FIN鍙戦? ACK--->TIME_WAIT(2MSL瓚呮椂)----->CLOSED
濂楁帴瀛椾富鍔ㄥ叧闂?br />鍏抽棴濂楁帴瀛?br />鍙戦? FIN----->鎺ユ敹: FIN鍙戦? ACK---->CLOSING--鎺ユ敹: ACK-->TIME_WAIT(2MSL瓚呮椂)----->CLOSED
濂楁帴瀛椾富鍔ㄥ叧闂?br />鍏抽棴濂楁帴瀛?br />鍙戦? FIN----->鎺ユ敹: FIN_ACK鍙戦? ACK----->TIME_WAIT(2MSL瓚呮椂)----->CLOSED
濂楁帴瀛楄鍔ㄥ叧闂?br />鎺ユ敹: FIN
鍙戦? ACK------>CLOSE_WAIT--鍏抽棴濂楁帴瀛楀彂閫? FIN-->LAST_ACK------->CLOSED
T I M E _ WA I T鐘舵佷篃鍙綔2 M S L絳夊緟鐘舵併傚叾涓紝 M S L浠h〃鈥滃垎孌墊渶闀跨敓瀛樻椂闂粹濓紙Maximum Segment Lifetime錛夛紝琛ㄧず涓涓暟鎹寘鍦ㄤ涪寮冧箣鍓嶏紝鍙湪緗戠粶涓婂瓨鍦ㄥ闀挎椂闂淬?br />姣忎釜I P鍖呴兘鍚湁涓涓滅敓瀛樻椂闂粹濓紙T T L錛夊瓧孌碉紝鑻ュ畠閫掑噺涓?錛屽寘渚夸細(xì)琚涪寮冦備竴涓寘緇忚繃緗戠粶涓婄殑姣忎釜璺敱鍣ㄦ椂錛?T T L 鍊奸兘浼?xì)鍑? 錛岀劧鍚庣戶緇紶閫掋備竴鏃﹀簲鐢ㄧ▼搴忚繘鍏 I M E _ WA I T鐘舵侊紝閭d箞灝變細(xì)涓鐩存寔緇璏 S L鏃墮棿鐨勪袱鍊嶄箣涔呫傝繖鏍蜂竴鏉ワ紝 T C P灝卞彲浠ュ湪鏈鍚庝竴涓狝 C K涓㈠け鐨勫墠鎻愪笅錛岄噸鏂板彂閫佸畠錛屼篃灝辨槸璇達(dá)紝 F I N浼?xì)琚噸鏂颁紶閫佸嚭鍘匯侻 S L鏃墮棿涓ゅ嶄箣涔呯殑絳夊緟鐘舵佺粨鏉熶箣鍚庯紝濂楁帴瀛椾究榪涘叆C L O S E D鐘舵伮?/p>
閲囧彇涓誨姩鍏抽棴鎺柦鏃訛紝鏈変袱涓礬寰勪細(xì)榪涘叆T I M E _ WA I T鐘舵併傚湪鎴戜滑浠ュ墠鐨勮璁轟腑錛?br />鍙湁涓鏂瑰彂鍑轟竴涓狥 I N錛屽茍鎺ユ敹涓涓狝 C K鍝嶅簲銆傜劧鑰岋紝鍙︿竴鏂逛粛鐒跺彲浠ヨ嚜鐢卞湴鍙戦佹暟鎹紝
鐩村埌瀹冧篃琚叧闂負(fù)姝€傚洜姝わ紝闇瑕佷袱涓礬寰勫彂鎸ヤ綔鐢ㄣ傚湪涓涓礬寰勪腑(鍗沖悓姝ュ叧闂?錛屼竴鍙拌綆楁満鍜屽畠鐨勯氫俊瀵規(guī)柟浼?xì)鍚屾椂瑕佹眰鍏抽棴锛涜绠楁満鍚戝?guī)柟閫佸嚭涓涓狥 I N鏁版嵁鍖咃紝騫朵粠瀹冮偅閲屾帴鏀朵竴涓狥 I N鏁版嵁鍖呫傞殢鍚庯紝璁$畻鏈轟細(xì)鍙戝嚭涓涓狝 C K鏁版嵁鍖咃紝瀵瑰鏂圭殑F I N鍖呭仛鍑哄搷搴旓紝騫跺皢鑷繁鐨勫鎺ュ瓧緗負(fù)C L O S I N G鐘舵併傝綆楁満浠庡鏂歸偅閲屾帴鏀跺埌鏈鍚庝竴涓狝 C K鍖呬箣鍚庯紝瀹冪殑濂楁帴瀛楃姸鎬佷細(xì)鍙樻垚T I M E _ WA I T銆偮?/p>
涓誨姩鍏抽棴鏃訛紝鍙︿竴涓礬寰勫叾瀹炲氨鏄悓姝ュ叧闂殑鍙樹綋錛氬鎺ュ瓧浠嶧 I N _ WA I T _ 1鐘舵佺洿鎺ュ彉鎴怲 I M E _ WA I T銆傝嫢搴旂敤紼嬪簭鍙戝嚭涓涓狥 I N鏁版嵁鍖咃紝浣嗗嚑涔庡悓鏃朵究浠庡鏂歸偅閲屾帴鏀跺埌涓涓狥 I N - A C K鍖咃紝榪欑鎯呭喌灝變細(xì)鍙戠敓銆傚湪榪欑鎯呭喌涓嬶紝瀵規(guī)柟浼?xì)纭鏀跺埌搴旂敤绋嬪簭鐨凢 I N鍖咃紝騫墮佸嚭鑷繁鐨凢 I N鍖呫傚浜庤繖涓寘錛屽簲鐢ㄧ▼搴忎細(xì)鐢ㄤ竴涓狝 C K鍖呭仛鍑哄搷搴斻?br />T I M E _ WA I T鐘舵佺殑涓昏浣滅敤鏄湪T C P榪炴帴澶勪簬2 M S L絳夊緟鐘舵佺殑鏃跺欙紝瑙勫畾鐢ㄤ簬寤虹珛閭d釜榪炴帴鐨勪竴瀵瑰鎺ュ瓧涓嶅彲琚嫆緇濄傝繖瀵瑰鎺ュ瓧鐢辨湰鍦癐 P绔彛浠ュ強(qiáng)榪滅▼I P绔彛緇勬垚銆傚鏌愪簺T C P瀹炴柦鏂規(guī)鏉ヨ錛屽畠浠笉鍏佽鎷掔粷澶勪簬T I M E _ WA I T鐘舵佷笅鐨勫鎺ュ瓧瀵逛腑鐨勪換浣曠鍙e彿銆傚湪寰蔣鐨勬柟妗堜腑錛屼笉浼?xì)瀛樺湪杩欎釜闂銆傜劧鑰岋紝鑻ヨ瘯鍥鵑氳繃涓瀵瑰凡澶勪簬T I M E _ WA I T鐘舵佺殑濂楁帴瀛楀緩绔嬭繛鎺ワ紝灝變細(xì)澶辮觸錛屽茍榪斿洖W S A E A D D R I N U S E閿欒銆傝瑙e喅榪欎竴闂錛堥櫎浜嗙瓑寰呬嬌鐢ㄩ偅涓湰鍦扮鍙f潵鑴辯T I M E _ WA I T鐘舵佺殑濂楁帴瀛楀錛夛紝涓涓姙娉曟槸浣跨敤濂楁帴瀛楅?br />欏筍 O _ R E F U S E A D D R錛屾垜浠皢鍦ㄧ9绔犲榪欎釜閫夐」榪涜璇︾粏璁ㄨ銆?br />琚姩鍏抽棴鎯呭喌涓嬶紝搴旂敤紼嬪簭浼?xì)浠庡?guī)柟閭i噷鎺ユ敹涓涓狥 I N鍖咃紝騫剁敤涓涓狝 C K鍖呭仛鍑哄搷搴斻傛鏃訛紝搴旂敤紼嬪簭鐨勫鎺ュ瓧浼?xì)鍙樻垚C L O S E _ WA I T鐘舵併傜敱浜庡鏂瑰凡鍏抽棴鑷繁鐨勫鎺ュ瓧錛屾墍浠ヤ笉鑳藉啀鍙戦佹暟鎹簡銆備絾搴旂敤紼嬪簭鍗翠笉鍚岋紝瀹冭兘涓鐩村彂閫佹暟鎹紝鐩村埌瀵規(guī)柟鐨勫鎺ュ瓧宸插叧闂負(fù)姝€傝鎯沖叧闂鏂圭殑榪炴帴錛屽簲鐢ㄧ▼搴忛渶瑕佸彂鍑鴻嚜宸辯殑F I N錛屼護(hù)搴旂敤紼嬪簭鐨勫鎺ュ瓧鐘舵佸彉鎴怢 A S T _ A C K銆傚簲鐢ㄧ▼搴忎粠瀵規(guī)柟鏀跺埌涓涓狝 C K鍖呭悗錛屽畠鐨勫鎺ュ瓧灝變細(xì)閫嗚漿鎴怌 L O S E D鐘舵併?br />瑕佹兂浜嗚ВT C P / I P鍗忚鐨勬湁鍏寵鎯咃紝璇峰弬闃匯FC 793 鏂囦歡銆傚彲鍦╤ t t p : / / w w w. r f c -e d i t o r. o rg閭i噷鎵懼埌榪欎喚鏂囦歡銆?/p>
c o n n e c t鍑芥暟鍜學(xué) S A C o n n e c t鍑芥暟
鏈鍚庝竴姝ュ氨鏄繛鎺ャ傝繖鏄氳繃璋冪敤c o n n e c t鍑芥暟鎴朩 S A C o n n e c t鍑芥暟鏉ュ畬鎴愮殑銆傛垜浠厛鏉ョ湅鐪嬭鍑芥暟鐨刉insock 1鐗堟湰錛屽叾瀹氫箟濡備笅錛?/p>
int connect(
聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽const struct sockaddr FAR * addr,
聽聽聽聽聽聽聽int namelen
聽聽聽聽聽聽);
聽
聽璇ュ嚱鏁扮殑鍙傛暟鏄浉褰撴竻妤氱殑錛?s鏄嵆灝嗗湪鍏朵笂闈㈠緩绔嬭繛鎺ョ殑閭d釜鏈夋晥T C P濂楁帴瀛楋紱 n a m e鏄拡瀵筎 C P錛堣鏄庤繛鎺ョ殑鏈嶅姟鍣級鐨勫鎺ュ瓧鍦板潃緇撴瀯錛?S O C K A D D R _ I N錛夛紱n a m e l e n鍒欐槸鍚嶅瓧鍙傛暟鐨勯暱搴︺俉insock 2鐗堟湰涓紝瀹冪殑瀹氫箟鏄繖鏍風(fēng)殑錛?/p>
int WSAConnect(
聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽const struct sockaddr FAR * addr,
聽聽聽聽聽聽聽聽int namelen,
聽聽聽聽聽聽聽聽LPWSABUF聽lpCallerData,
聽聽聽聽聽聽聽聽LPWSABUF聽lpCalleeData,
聽聽聽聽聽聽聽聽LPQOS聽聽聽lpSQOS,
聽聽聽聽聽聽聽聽LPQOS聽聽聽lpGQOS
聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽
鍓嶄笁涓弬鏁板拰connect API鍑芥暟鐨勫弬鏁版槸瀹屽叏涓鏍風(fēng)殑銆傚彟澶栦袱涓弬鏁扳攍 p C a l l e r D a t a鍜宭 p C a l l e e D a t a錛屾槸瀛椾覆緙撳啿鍖猴紝鐢ㄤ簬鏀跺彂璇鋒眰榪炴帴鏃剁殑鏁版嵁銆俵 p C a l l e r D a t a鍙傛暟鏄寚鍚戠紦鍐插尯鐨勬寚閽堬紝緙撳啿鍖哄唴鍖呭惈瀹㈡埛鏈哄悜鏈嶅姟鍣ㄥ彂鍑虹殑璇鋒眰榪炴帴鐨勬暟鎹俵 p C a l l e e D a t a鍙傛暟鍒欐寚鍚戝彟涓涓紦鍐插尯錛屽尯鍐呭寘鍚湇鍔″櫒鍚戝鎴鋒満榪斿洖鐨勫緩绔嬭繛鎺ユ椂鐨勬暟鎹傝繖涓や釜鍙傛暟閮芥槸W S A B U F緇撴瀯錛?br />鍥犳錛岃嫢鏄痩 p C a l l e r D a t a錛宭 e n瀛楁搴旇璁句負(fù)b u f瀛楁涓噯澶囦紶杈撶殑鏁版嵁闀垮害銆傝嫢鏄痩 p C a l l e e D a t a錛宭 e n瀛楁鍒欎唬琛╞ u f涓殑緙撳啿鍖洪暱搴︼紝璁句負(fù)浠庢湇鍔″櫒榪斿洖鐨勬暟鎹暱搴︺傛渶鍚庝袱涓弬鏁扳攍 p S Q O S鍜宭 p G Q O S錛岃〃紺篞 O S緇撴瀯錛岃緇撴瀯瀵瑰嵆灝嗗緩绔嬬殑榪炴帴涓婃敹鍙戞暟鎹墍闇瑕佺殑甯﹀榪涜浜嗗畾涔夈?br />l p Q O S鍙傛暟鐢ㄤ簬鎸囧畾濂楁帴瀛梥闇瑕佺殑鏈嶅姟璐ㄩ噺錛岃宭 p G Q O S鍒欑敤浜庢寚瀹氬鎺ュ瓧緇勬墍闇瑕佺殑鏈嶅姟璐ㄩ噺銆傜洰鍓嶏紝灝氭湭鎻愪緵瀵瑰鎺ュ瓧緇勭殑鏀寔銆傝嫢l p Q O S鏄┖鍊鹼紝鍒欒〃鏄庢病鏈夋煇搴旂敤涓撶敤鐨凲 O S銆?br />濡傛灉浣犳兂榪炴帴鐨勮綆楁満娌℃湁鐩戝惉鎸囧畾绔彛榪欎竴榪涚▼錛?c o n n e c t璋冪敤灝變細(xì)澶辮觸錛屽茍鍙戠敓閿欒W S A E C O N N R E F U S E D銆傚彟涓涓敊璇彲鑳芥槸W S A E T I M E D O U T錛岃繖縐嶆儏鍐典竴鑸彂鐢熷湪璇曞浘榪炴帴鐨勮綆楁満涓嶈兘鐢ㄦ椂錛堜害鍙兘鍥犱負(fù)鍒頒富鏈轟箣闂寸殑璺敱涓婂嚭鐜扮‖浠舵晠闅滄垨涓繪満鐩墠涓嶅湪緗戜笂錛夈?/p>
蹇呴』鐗㈢墷璁頒綇榪欎竴鐐癸細(xì)鎵鏈夊叧緋誨埌鏀跺彂鏁版嵁鐨勭紦鍐查兘灞炰簬綆鍗曠殑c h a r綾誨瀷銆備篃灝辨槸璇達(dá)紝榪欎簺鍑芥暟娌℃湁鈥淯 n i c o d e鈥濈増鏈?/p>
鍙﹀錛屾墍鏈夋敹鍙戝嚱鏁拌繑鍥炵殑閿欒浠g爜閮芥槸S O C K E T _ E R R O R銆備竴鏃﹁繑鍥為敊璇紝緋葷粺灝變細(xì)璋冪敤W S A G e t L a s t E r r o r鑾峰緱璇︾粏鐨勯敊璇俊鎭傛渶甯歌鐨勯敊璇槸W S A E C O N N A B O RT E D鍜學(xué) S A E C O N N R E S E T銆備袱鑰呭潎娑夊強(qiáng)鍒板嵆灝嗗叧闂繛鎺ヨ繖涓闂鈥旇涔堥氳繃瓚呮椂錛岃涔堥氳繃閫氫俊鏂瑰叧闂繛鎺ャ傚彟涓涓父瑙侀敊璇槸W S A E W O U L D B L O C K錛屼竴鑸嚭鐜板湪濂楁帴瀛楀浜庨潪鏆傚仠妯?br />寮忔垨寮傛鐘舵佹椂銆傝繖涓敊璇富瑕佹剰鍛崇潃鎸囧畾鍑芥暟鏆備笉鑳藉畬鎴愩?/p>
1. send鍜學(xué) S A S e n d
瑕佸湪宸插緩绔嬭繛鎺ョ殑濂楁帴瀛椾笂鍙戦佹暟鎹紝絎竴涓彲鐢ㄧ殑A P I鍑芥暟鏄痵 e n d錛屽叾鍘熷瀷涓猴細(xì)
int send(
聽聽聽聽聽SOCKET s,
聽聽聽聽聽const char FAR * buf,
聽聽聽聽聽int len,
聽聽聽聽聽int flags
聽聽聽聽);
S O C K E T鍙傛暟鏄凡寤虹珛榪炴帴鐨勫鎺ュ瓧錛屽皢鍦ㄨ繖涓鎺ュ瓧涓婂彂閫佹暟鎹傜浜屼釜鍙傛暟b u f錛屽垯鏄瓧絎︾紦鍐插尯錛屽尯鍐呭寘鍚嵆灝嗗彂閫佺殑鏁版嵁銆傜涓変釜鍙傛暟l(fā) e n錛屾寚瀹氬嵆灝嗗彂閫佺殑緙撳啿鍖哄唴鐨勫瓧絎︽暟銆傛渶鍚庯紝f l a g s鍙負(fù)0銆丮 S G _ D O N T R O U T E鎴朚 S G _ O O B銆傚彟澶栵紝 f l a g s榪樺彲浠ユ槸瀵歸偅浜涙爣蹇楄繘琛屾寜浣嶁滄垨榪愮畻鈥濈殑涓涓粨鏋溿侻 S G _ D O N T R O U T E鏍囧織瑕佹眰浼犻佸眰涓嶈灝嗗畠鍙戝嚭鐨勫寘璺?br />鐢卞嚭鍘匯傜敱鍩哄眰鐨勪紶閫佸喅瀹氭槸鍚﹀疄鐜拌繖涓璇鋒眰錛堜緥濡傦紝鑻ヤ紶閫佸崗璁笉鏀寔璇ラ夐」錛岃繖涓璇鋒眰灝變細(xì)琚拷鐣ワ級銆侻 S G _ O O B鏍囧織棰勭ず鏁版嵁搴旇琚甫澶栧彂閫併?br />瀵硅繑鍥炴暟鎹岃█錛宻 e n d榪斿洖鍙戦佺殑瀛楄妭鏁幫紱鑻ュ彂鐢熼敊璇紝灝辮繑鍥濻 O C K E T _ E R R O R銆傚父瑙佺殑閿欒鏄疻 S A E C O N N A B O RT E D錛岃繖涓閿欒涓鑸彂鐢熷湪铏氭嫙鍥炶礬鐢變簬瓚呮椂鎴栧崗璁湁閿欒屼腑鏂殑鏃跺欍傚彂鐢熻繖縐嶆儏鍐墊椂錛屽簲璇ュ叧闂繖涓鎺ュ瓧錛屽洜涓哄畠涓嶈兘鍐嶇敤浜嗐傝繙紼嬩富鏈轟笂鐨勫簲鐢ㄩ氳繃鎵ц寮鴻鍏抽棴鎴栨剰澶栦腑鏂搷浣滈噸鏂拌緗櫄鎷熻櫄璺椂錛屾垨榪滅▼涓繪満閲嶆柊鍚姩鏃訛紝鍙戠敓鐨勫垯鏄疻 S A E C O N N R E S E T閿欒銆傚啀嬈℃彁閱掑ぇ瀹舵敞鎰忥紝鍙戠敓榪欎竴閿欒鏃訛紝搴旇鍏抽棴榪欎釜濂楁帴瀛椼傛渶
鍚庝竴涓父瑙侀敊璇槸W S A E T I M E O U T錛屽畠鍙戠敓鍦ㄨ繛鎺ョ敱浜庣綉緇滄晠闅滄垨榪滅▼榪炴帴緋葷粺寮傚父姝繪満鑰屽紩璧風(fēng)殑榪炴帴涓柇鏃躲?br />send API鍑芥暟鐨刉insock 2鐗堟湰鏄疻 S A S e n d錛屽畠鐨勫畾涔夊涓嬶細(xì)
int WSASend(
聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽LPWSABUF lpBuffers,
聽聽聽聽聽聽聽DWORD聽聽聽dwBufferCount,
聽聽聽聽聽聽聽LPWORD聽聽lpNumberOfBytesSent,
聽聽聽聽聽聽聽DWORD聽聽聽dwFlags,
聽聽聽聽聽聽聽LPWSAOVERLAPPED聽lpOverlapped,
聽聽聽聽聽聽聽LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
聽聽聽聽聽聽);
榪欎釜濂楁帴瀛楁槸涓涓繛鎺ヤ細(xì)璇濈殑鏈夋晥鍙ユ焺銆傜浜屼釜鍙傛暟鏄寚鍚戜竴涓垨澶氫釜W S A B U F緇撴瀯鐨勬寚閽堛傚畠鏃㈠彲鏄竴涓嫭绔嬬殑緇撴瀯錛屽張鍙互鏄竴緇勭粨鏋勩傜涓変釜鍙傛暟鎸囨槑鍑嗗鎶曢掔殑W S A B U F緇撴瀯鏁般傝浣忥紝姣忎釜W S A B U F緇撴瀯鏈韓灝辨槸涓涓瓧絎︾紦鍐插拰緙撳啿闀垮害銆備負(fù)浣曟墦綆楀悓鏃跺彂閫佸涓紦鍐插憿錛熶篃璁稿ぇ瀹朵笉澶槑鐧藉叾涓殑鍘熷洜銆傝繖灝辨槸鎴戜滑紼嶅悗瑕佽鐨勨滃垎鏁i泦涓璉 / O妯″紡鈥濓紱浣嗘槸錛屽湪涓涓凡寤虹珛榪炴帴鐨勫鎺ュ瓧涓婂埄鐢ㄥ緙撳啿鏉ュ彂閫佹暟鎹椂錛岄『搴忔槸浠庣涓涓埌鏈鍚庝竴涓猈 S A B U F緇撴瀯銆俵 p N u m b e r O f B y t e s S e n t鏄寚鍚慏 W O R D錛堟槸W S A S e n d璋冪敤榪斿洖鐨勶級鐨勬寚閽堬紝鍏朵腑鍖呭惈瀛楄妭鎬誨彂閫佹暟銆俤 w F l a g s鍙傛暟鐩稿綋浜庡畠鍦╯ e n d涓殑絳夊悓鐗┿傛渶鍚庝袱涓弬鏁扳攍 p O v e r l a p p e d鍜宭 p C o m p l e t i o n R O U T I N E鈥旂敤浜庨噸鍙營 / O銆傞噸鍙營 / O鏄疻i n s o c k鏀寔鐨勫紓姝 / O妯″紡涔嬩竴錛?/p>
W S A S e n d鍑芥暟鎶妉 p N u m b e r O f B y t e s S e n t璁句負(fù)鍐欏叆鐨勫瓧鑺傛暟銆傛垚鍔熺殑璇濓紝璇ュ嚱鏁板氨榪斿洖0錛?br />鍚﹀垯灝辮繑鍥濻 O C K _ E R R O R錛屽父瑙侀敊璇拰s e n d鍑芥暟鐨勬儏褰竴鏍楓?/p>
2. WSASendDisconnect
璇ュ嚱鏁伴潪甯哥壒孌婏紝涓鑸笉鐢ㄣ傚叾鍘熷瀷鏄細(xì)
int WSASendDisconnect(聽
聽聽聽聽聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽聽聽聽聽LPWSABUF lpOUTboundDisconnectData
聽聽聽聽聽聽聽聽聽聽聽);
璇ュ嚱鏁拌搗鍒濆皢濂楁帴瀛楃疆涓哄叧闂姸鎬侊紝鍙戦佹棤榪炴帴鐨勬暟鎹傚綋鐒訛紝瀹冨彧鑳界敤浜庢敮鎸佷粠瀹瑰叧鏈哄拰鏃犺繛鎺ユ暟鎹殑浼犺緭鍗忚銆傜洰鍓嶈繕娌℃湁浼犺緭鎻愪緵鑰呮敮鎸佹棤榪炴帴鐨勬暟鎹俉 S A S e n d D i s c o n n e c t鍑芥暟鐨勮涓哄拰鍒╃敤S D _ S E N D鍙傛暟璋冪敤s h u t d o w n 鍑芥暟宸笉澶氾紝浣嗗畠鍙﹀榪樿鍙戦佸寘鍚湪b o u n d D i s c o n n e c t D a t a鍙傛暟涓殑鏁版嵁銆傚悗鏉ョ殑鏁版嵁紱佹鍦ㄨ繖涓鎺ュ瓧涓婂彂閫併傚鏋滆皟鐢ㄥけ璐ワ紝
W S A S e n d D i s c o n n e c t i o n灝變細(xì)榪斿洖S O C K E T _ E R R O R銆備嬌鐢ㄨ鍑芥暟鍙兘浼?xì)鍑虹幇s e n d鍑芥暟涓嚭鐜扮殑鏌愪簺閿欒銆?/p>
甯﹀鏁版嵁
瀵瑰凡寤虹珛榪炴帴鐨勬祦濂楁帴瀛椾笂鐨勫簲鐢ㄦ潵璇達(dá)紝濡傛灉闇瑕佸彂閫佺殑鏁版嵁姣旀祦涓婄殑鏅氭暟鎹噸瑕佸緱澶氾紝渚垮彲灝嗚繖浜涢噸瑕佹暟鎹爣璁版垚鈥滃甫澶栨暟鎹濓紙Out-of-band, OOB錛夈備綅浜庤繛鎺ュ彟涓绔殑搴旂敤鍙氳繃涓涓嫭绔嬬殑閫昏緫淇¢亾錛堜粠姒傚康涓婅錛岃閫昏緫淇¢亾涓庢暟鎹祦鏃犲叧錛夋潵鎺ユ敹鍜屽鐞哋 O B鏁版嵁銆?br />鍦═ C P涓紝O O B鏁版嵁鐢變竴涓揣鎬?浣嶆爣璁幫紙鍙綔U R G錛夊拰T C P鍒嗘澶翠腑鐨勪竴涓? 6浣嶇殑鎸囬拡緇勬垚銆傝繖閲岀殑鏍囪鍜屾寚閽堟妸鎸囧畾鐨勪笅琛屾祦瀛楄妭褰撲綔绱фユ暟鎹傚疄鐜扮揣鎬ユ暟鎹殑涓ょ鐗規(guī)畩鏂規(guī)硶鐩墠鍙兘鍦═ C P.RFC 793涓鍒幫紝璇ョ儲寮曞T C P榪涜浜嗘弿榪幫紝騫跺紩鍏ヤ簡鈥滅揣鎬ユ暟鎹濊繖涓姒傚康錛岃〃鏄嶵 C P澶翠腑鐨勭揣鎬ユ寚閽堟槸绱фユ暟鎹瓧鑺備箣鍚庨偅涓瓧鑺傜殑緇濆鍋忕Щ銆備絾鏄湪RFC 11 2 2涓紝鍗村皢绱фュ亸縐繪弿榪版垚鎸囧悜绱фュ瓧鑺傛湰韜?br />Wi n s o c k瑙勬牸涓紝涓庡崗璁棤鍏崇殑O O B鏁版嵁鍜孴 C P鐨凮 O B鏁版嵁瀹炴柦錛堢揣鎬ユ暟鎹級鍧囬噰鐢ㄤ簡O O B榪欎竴鏈銆傝鏌ョ湅寰呭彂鏁版嵁涓槸鍚﹀寘鍚揣鎬ユ暟鎹紝蹇呴』閫氳繃S I O C AT M A R K閫夐」璋冪敤i o c t l s o c k e t鍑芥暟銆傜9绔犲皢浠嬬粛S I O C AT M A R K鐨勭敤娉曘?br />Wi n s o c k鎻愪緵浜嗚幏寰楃揣鎬ユ暟鎹殑鍑犱釜鏂規(guī)硶銆備竴鏄揣鎬ユ暟鎹竴鏃﹀湪綰挎彃鍏ワ紝瀹冨氨浼?xì)鍑虹幇鍦ㄦ櫘閫氭暟鎹祦涓紱浜屾槸鍙互鍏抽棴鍦ㄧ嚎鎻掑叆錛岃繖鏍鳳紝涓嶈繛緇皟鐢ㄦ帴鏀跺嚱鏁板氨浼?xì)鍙獦q斿洖绱фユ暟鎹傝嚦浜庢帶鍒禣 O B鏁版嵁琛屼負(fù)鐨勫鎺ュ瓧閫夐」S O _ O O B I N L I N E錛屾垜浠篃灝嗗湪絎?绔犺緇嗚璁恒?/p>
Te l n e t鍜孯 l o g i n浣跨敤绱фユ暟鎹槸鏈夊師鍥犵殑銆傚敖綆″姝わ紝闄ら潪浣犺鍒掔紪鍐欒嚜宸辯殑Te l n e t鍜孯 l o g i n錛屽惁鍒欏氨搴旇榪滅绱фユ暟鎹傚洜涓哄畠涓嶅鏄撳畾涔夛紝鑰屼笖鍏朵粬騫沖彴涓婄殑瀹炴柦鎯呭喌鍙兘鍜學(xué)i n 3 2鏈夋墍涓嶅悓銆傚湪榪笉寰楀凡鐨勬儏鍐典笅浣跨敤绱фユ暟鎹紝蹇呴』鍙戜俊鍙烽氱煡閫氫俊鏂逛負(fù)绱фユ暟鎹墽琛?br />涓涓嫭绔嬬殑鎺у埗濂楁帴瀛楋紝騫朵負(fù)鏅氭暟鎹殑浼犺緭淇濈暀涓昏鐨勫鎺ュ瓧榪炴帴銆?/p>
聽typedef struct WSAData
聽{
聽聽聽WORD聽wVersion;
聽聽聽WORD聽wHighVersion;
聽聽聽char聽szDescription[WSADESCRIPTION_LEN+1];
聽聽聽char聽 saSystemStatus[WSASYS_STATUS_LEN+1];
聽聽聽unsighd short iMaxSockets;
聽聽聽unsighd short iMaxUdpDg;
聽聽聽char FAR *聽lpVendorInfo;
聽}WSADATA,FAR * LPWSADATA;
聽
聽W S A S t a r t u p鎶婄涓涓瓧孌祑 Ve r s i o n璁炬垚鎵撶畻浣跨敤鐨刉i n s o c k鐗堟湰銆倃 H i g h Ve r s i o n鍙傛暟瀹?br />綰崇殑鏄幇鏈夌殑Wi n s o c k搴撶殑鏈楂樼増鏈傝浣忥紝榪欎袱涓瓧孌典腑錛岄珮浣嶅瓧鑺備唬琛ㄧ殑鏄疻i n s o c k鍓増
鏈紝鑰屼綆浣嶅瓧孌典唬琛ㄧ殑鍒欐槸Wi n s o c k涓葷増鏈俿 z D e s c r i p t i o n鍜宻 z S y s t e m S t a t u s榪欎袱涓瓧孌電敱鐗瑰畾
鐨刉i n s o c k 瀹炴柦鏂規(guī)璁懼畾錛屼簨瀹炰笂娌℃湁鐢ㄣ備笉瑕佷嬌鐢ㄤ笅闈㈣繖涓や釜瀛楁錛?i M a x S o c k e t s鍜?br />i M a x U d p D g錛屽畠浠槸鍋囧畾鐨勫悓鏃舵渶澶氬彲鎵撳紑澶氬皯濂楁帴瀛楀拰鏁版嵁鎶ョ殑鏈澶ч暱搴︺傜劧鑰岋紝瑕佺煡閬?br />鏁版嵁鎶ョ殑鏈澶ч暱搴﹀簲璇ラ氳繃W S A E n u m P r o t o c o l s鏉ユ煡璇㈠崗璁俊鎭傚悓鏃舵渶澶氭墦寮濂楁帴瀛楃殑鏁扮洰
涓嶆槸鍥哄畾鐨勶紝寰堝ぇ紼嬪害涓婂拰鍙敤鐗╃悊鍐呭瓨鐨勫灝戞湁鍏熾傛渶鍚庯紝 l p Ve n d o r I n f o瀛楁鏄負(fù)Wi n s o c k
瀹炴柦鏂規(guī)鏈夊叧鐨勬寚瀹氬巶鍟嗕俊鎭鐣欑殑銆備換浣曚竴涓猈i n 3 2騫沖彴涓婇兘娌℃湁浣跨敤榪欎釜瀛楁銆?/p>
7.2 閿欒媯(gè)鏌ュ拰鎺у埗
瀵圭紪鍐欐垚鍔熺殑Wi n s o c k搴旂敤紼嬪簭鑰岃█錛岄敊璇鏌ュ拰鎺у埗鏄嚦鍏抽噸瑕佺殑錛屽洜姝わ紝鎴戜滑鎵撶畻鍏?br />涓哄ぇ瀹朵粙緇嶉敊璇鏌ュ拰鎺у埗銆備簨瀹炰笂錛屽Wi n s o c k鍑芥暟鏉ヨ錛岃繑鍥為敊璇槸闈炲父甯歌鐨勩傘備絾鏄紝
澶氭暟鎯呭喌涓嬶紝榪欎簺閿欒閮芥槸鏃犲叧绱ц鐨勶紝閫氫俊浠嶅彲鍦ㄥ鎺ュ瓧涓婅繘琛屻傚敖綆″叾榪斿洖鐨勫煎茍闈炰竴
鎴愪笉鍙橈紝浣嗕笉鎴愬姛鐨刉i n s o c k璋冪敤榪斿洖鐨勬渶甯歌鐨勫兼槸S O C K E T _ E R R O R銆?br />瀹為檯涓婏紝 S O C K E T _ E R R O R甯擱噺鏄? 1銆?br />濡傛灉璋冪敤涓涓猈i n s o c k鍑芥暟錛岄敊璇儏鍐靛彂鐢熶簡錛屽氨鍙敤W S A G e t L a s t E r r o r鍑芥暟鏉ヨ幏寰椾竴孌典唬鐮侊紝
榪欐浠g爜鏄庣‘鍦拌〃鏄庡彂鐢熺殑鐘跺喌銆傝鍑芥暟鐨勫畾涔夊涓嬶細(xì)
int WSAGetLastError(void);
鍙戠敓閿欒涔嬪悗璋冪敤榪欎釜鍑芥暟錛屽氨浼?xì)杩斿洖鎵鍙戠敓鐨勭壒瀹氶敊璇殑瀹屾暣浠g爜銆俉 S A G e t L a s t E r r o r
鍑芥暟榪斿洖鐨勮繖浜涢敊璇兘宸查瀹氫箟甯擱噺鍊鹼紝涓哄悇縐嶉敊璇唬鐮佸畾涔夌殑甯擱噺
錛堝甫鏈?瀹氫箟鎸囦護(hù)錛変竴鑸兘浠 S A E寮澶淬?/p>
7.3 闈㈠悜榪炴帴鐨勫崗璁?br />瀵規(guī)湇鍔″櫒鐩戝惉鐨勮繛鎺ユ潵璇達(dá)紝瀹冨繀欏誨湪涓涓凡鐭ョ殑鍚嶅瓧涓娿傚湪T C P / I P涓紝榪欎釜鍚嶅瓧灝辨槸
鏈湴鎺ュ彛鐨処 P鍦板潃錛屽姞涓婁竴涓鍙g紪鍙楓傛瘡縐嶅崗璁兘鏈変竴濂椾笉鍚岀殑瀹氬潃鏂規(guī)錛屾墍浠ユ湁涓縐嶄笉
鍚岀殑鍛藉悕鏂規(guī)硶銆傚湪Wi n s o c k涓紝絎竴姝ユ槸灝嗘寚瀹氬崗璁殑濂楁帴瀛楃粦瀹氬埌瀹冨凡鐭ョ殑鍚嶅瓧涓娿傝繖涓繃
紼嬫槸閫氳繃A P I璋冪敤b i n d鏉ュ畬鎴愮殑銆備笅涓姝ユ槸灝嗗鎺ュ瓧緗負(fù)鐩戝惉妯″紡銆傝繖鏃訛紝鐢ˋ P I鍑芥暟l(fā) i s t e n鏉?br />瀹屾垚鐨勩傛渶鍚庯紝鑻ヤ竴涓鎴鋒満璇曞浘寤虹珛榪炴帴錛屾湇鍔″櫒蹇呴』閫氳繃a c c e p t鎴朩 S A A c c e p t璋冪敤鏉ユ帴
鍙楄繛鎺ャ?br />1. bind
涓鏃︿負(fù)鏌愮鐗瑰畾鍗忚鍒涘緩浜嗗鎺ュ瓧錛屽氨蹇呴』灝嗗鎺ュ瓧緇戝畾鍒頒竴涓凡鐭ュ湴鍧銆俠 i n d鍑芥暟鍙皢
鎸囧畾鐨勫鎺ュ瓧鍚屼竴涓凡鐭ュ湴鍧緇戝畾鍒頒竴璧楓傝鍑芥暟澹版槑濡備笅錛?/p>
int bind(
聽聽聽聽聽SOCKET s,
聽聽聽聽聽const sturct sockaddr FAR * name,
聽聽聽聽聽int 聽namelen
聽聽聽聽);
聽鍏朵腑錛岀涓涓弬鏁皊浠h〃鎴戜滑甯屾湜鍦ㄤ笂闈㈢瓑寰呭鎴鋒満榪炴帴鐨勯偅涓鎺ュ瓧銆傜浜屼釜鍙傛暟鐨勭被
鍨嬫槸struct sockaddr錛屽畠鐨勪綔鐢ㄥ緢綆鍗曪紝灝辨槸涓涓櫘閫氱殑緙撳啿鍖恒傞拡瀵硅嚜宸辨墦綆椾嬌鐢ㄧ殑閭d釜鍗?br />璁紝蹇呴』鎶婅鍙傛暟瀹為檯鍦板~鍏呬竴涓湴鍧緙撳啿鍖猴紝騫跺湪璋冪敤b i n d鏃跺皢鍏墮犲瀷涓轟竴涓猻 t r u c t
s o c k a d d r銆?br />涓句釜渚嬪瓙鏉ヨ錛屼笅鍒椾唬鐮侀槓榪頒簡鍦ㄤ竴涓猅 C P榪炴帴涓婏紝濡備綍鏉ュ仛鍒拌繖涓鐐癸細(xì)
SOCKET聽聽s;
struct sockaddr_in tcpaddr;
int 聽聽port=5150;
s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
tcpaddr.sin_family = AF_INET;
tcpaddr.sin_port = htons(port);
tcpaddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(s,(SOCKADDR *)&tcpaddr,sizeof(tcpaddr));
涓鏃﹀嚭閿欙紝 b i n d 灝變細(xì)榪斿洖S O C K E T _ E R R O R 銆傚b i n d 鏉ヨ錛屾渶甯歌鐨勯敊璇槸
W S A E A D D R I N U S E銆傚浣跨敤鐨勬槸T C P / I P錛岄偅涔圵 S A E A D D R I N U S E灝辮〃紺哄彟涓涓繘紼嬪凡緇忓悓
鏈湴I P鎺ュ彛鍜岀鍙e彿緇戝畾鍒頒簡涓璧鳳紝鎴栬呴偅涓狪 P鎺ュ彛鍜岀鍙e彿澶勪簬T I M E _ WA I T鐘舵併傚亣濡備綘
閽堝涓涓鎺ュ瓧璋冪敤b i n d錛屼絾閭d釜濂楁帴瀛楀凡緇忕粦瀹氾紝渚夸細(xì)榪斿洖W S A E F FA U LT閿欒銆?/p>
2. listen
鎴戜滑鎺ヤ笅鏉ヨ鍋氱殑鏄皢濂楁帴瀛楃疆鍏ョ洃鍚ā寮忋俠 i n d鍑芥暟鐨勪綔鐢ㄥ彧鏄皢涓涓鎺ュ瓧鍜屼竴涓?br />鎸囧畾鐨勫湴鍧鍏寵仈鍦ㄤ竴璧楓傛寚紺轟竴涓鎺ュ瓧絳夊欒繘鍏ヨ繛鎺ョ殑A P I鍑芥暟鍒欐槸l i s t e n錛屽叾瀹氫箟濡備笅錛?/p>
int listen(
聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽int backlog
聽聽聽聽聽);
絎竴涓弬鏁板悓鏍鋒槸闄愬畾濂楁帴瀛椼俠 a c k l o g鍙傛暟鎸囧畾浜嗘鍦ㄧ瓑寰呰繛鎺ョ殑鏈澶ч槦鍒楅暱搴︺傝繖涓?br />鍙傛暟闈炲父閲嶈錛屽洜涓哄畬鍏ㄥ彲鑳藉悓鏃跺嚭鐜板嚑涓湇鍔″櫒榪炴帴璇鋒眰銆備緥濡傦紝鍋囧畾b a c k l o g鍙傛暟涓?銆傚
鏋滀笁涓鎴鋒満鍚屾椂鍙戝嚭璇鋒眰錛岄偅涔堝ご涓や釜浼?xì)琚攽譁ㄤ竴涓滃緟鍐斥濓紙絳夊緟澶勭悊錛夐槦鍒椾腑錛屼互渚垮簲
鐢ㄧ▼搴忎緷嬈′負(fù)瀹冧滑鎻愪緵鏈嶅姟銆傝岀涓変釜榪炴帴浼?xì)閫犳垚涓涓猈 S A E C O N N R E F U S E D閿欒銆傛敞鎰忥紝
涓鏃︽湇鍔″櫒鎺ュ彈浜嗕竴涓繛鎺ワ紝閭d釜榪炴帴璇鋒眰灝變細(xì)浠庨槦鍒椾腑鍒犲幓錛屼互渚垮埆浜哄彲緇х畫鍙戝嚭璇鋒眰銆?br />b a c k l o g鍙傛暟鍏跺疄鏈韓灝卞瓨鍦ㄧ潃闄愬埗錛岃繖涓檺鍒舵槸鐢卞熀灞傜殑鍗忚鎻愪緵鑰呭喅瀹氱殑銆傚鏋滃嚭鐜伴潪娉?br />鍊鹼紝閭d箞浼?xì)鐢ㄤ笌涔嬫渶鎺ヨ繎鐨勪竴涓悎娉曞兼潵鍙栦唬銆傞櫎姝や互澶栵紝瀵逛簬濡備綍鐭ラ亾瀹為檯鐨刡 a c k l o g鍊鹼紝
鍏跺疄騫朵笉瀛樺湪涓縐嶆爣鍑嗘墜孌點(diǎn)?br />涓巐 i s t e n瀵瑰簲鐨勯敊璇槸闈炲父鐩磋鐨勩傚埌鐩墠涓烘錛屾渶甯歌鐨勯敊璇槸W S A E I N VA L銆傝閿欒
閫氬父鎰忓懗鐫錛屼綘蹇樿鍦╨ i s t e n涔嬪墠璋冪敤b i n d銆傚惁鍒欙紝涓巄 i n d璋冪敤鐩稿弽錛屼嬌鐢╨ i s t e n鏃跺彲鑳芥敹鍒?br />W S A E A D D R I N U S E銆傝繖涓敊璇氬父鏄湪榪涜b i n d璋冪敤鏃跺彂鐢熺殑銆?/p>
3. accept鍜學(xué) S A A c c e p t
鐜板湪錛屾垜浠凡鍋氬ソ浜嗘帴鍙楀鎴瘋繛鎺ョ殑鍑嗗銆傝繖鏄氳繃a c c e p t鎴朩 S A A c c e p t鍑芥暟鏉ュ畬鎴愮殑銆?br />a c c e p t鏍煎紡濡備笅錛?/p>
SOCKET accept(
聽聽聽聽聽聽聽聽SOCKET s,
聽聽聽聽聽聽聽聽struct sockaddr FAR * addr,
聽聽聽聽聽聽聽聽int FAR * addrlen
聽聽聽聽聽聽聽);
鍏朵腑錛屽弬鏁皊鏄竴涓檺瀹氬鎺ュ瓧錛屽畠澶勫湪鐩戝惉妯″紡銆傜浜屼釜鍙傛暟搴旇鏄竴涓湁鏁堢殑
S O C K A D D R _ I N緇撴瀯鐨勫湴鍧錛岃宎 d d r l e n搴旇鏄疭 O C K A D D R _ I N緇撴瀯鐨勯暱搴︺傚浜庡睘浜庡彟涓縐?br />鍗忚鐨勫鎺ュ瓧錛屽簲褰撶敤涓庨?U嶅崗璁搴旂殑S O C K A D D R緇撴瀯鏉ユ浛鎹 O C K A D D R _ I N銆傞氳繃瀵?br />a c c p e t鍑芥暟鐨勮皟鐢紝鍙負(fù)寰呭喅榪炴帴闃熷垪涓殑絎竴涓繛鎺ヨ姹傛彁渚涙湇鍔°俛 c c e p t鍑芥暟榪斿洖鍚庯紝
a d d r緇撴瀯涓細(xì)鍖呭惈鍙戝嚭榪炴帴璇鋒眰鐨勯偅涓鎴鋒満鐨処 P鍦板潃淇℃伅錛岃宎 d d r l e n鍙傛暟鍒欐寚鍑虹粨鏋勭殑闀?br />搴︺傛澶栵紝a c c e p t浼?xì)杩斿洖涓涓柊鐨勫鎺ュ瓧鎻忚堪絎︼紝瀹冨搴斾簬宸茬粡鎺ュ彈鐨勯偅涓鎴鋒満榪炴帴銆傚浜?br />璇ュ鎴鋒満鍚庣畫鐨勬墍鏈夋搷浣滐紝閮藉簲浣跨敤榪欎釜鏂板鎺ュ瓧銆傝嚦浜庡師鏉ラ偅涓洃鍚鎺ュ瓧錛屽畠浠嶇劧鐢ㄤ簬
鎺ュ彈鍏朵粬瀹㈡埛鏈鴻繛鎺ワ紝鑰屼笖浠嶅浜庣洃鍚ā寮忋?/p>
Winsock 2寮曞叆浜嗕竴涓悕涓篧 S A A c c e p t鐨勫嚱鏁般傚畠鑳芥牴鎹竴涓潯浠跺嚱鏁扮殑榪斿洖鍊鹼紝閫夋嫨鎬?br />鍦版帴鍙椾竴涓繛鎺ャ傝繖涓柊鍑芥暟鐨勫畾涔夊涓嬶細(xì)
SOCKET WSAAccept(
聽聽聽聽聽聽聽聽聽SOCKET聽 s,
聽聽聽聽聽聽聽聽聽struct sockaddr FAR * addr,
聽聽聽聽聽聽聽聽聽LPINT addlen,
聽聽聽聽聽聽聽聽聽LPCONDITIONPROC lpfnCondition,
聽聽聽聽聽聽聽聽聽DWORD 聽dwCallbackData
聽聽聽聽聽聽聽聽);
聽
鍏朵腑錛屽ご涓変釜鍙傛暟涓巃 c c e p t鐨刉insock 1鐗堟湰鏄浉鍚岀殑銆俵 p f n C o n d i t i o n鍙傛暟鏄寚鍚戜竴涓嚱鏁?br />鐨勬寚閽堬紝閭d釜鍑芥暟鏄牴鎹鎴瘋姹傛潵璋冪敤鐨勩傝鍑芥暟鍐沖畾鏄惁鎺ュ彈瀹㈡埛鐨勮繛鎺ヨ姹傦紝瀹氫箟濡?br />涓嬶細(xì)
聽int CALLBACK ConditionFunc(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWSABUF聽lpCallerId,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWSABUF聽 lpCallerData,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPQOS聽聽聽lpSQOS,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPQOS聽聽聽lpGQOS,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWSABUF聽lpCalleeId,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LPWSABUF聽 lpCalleeData,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽GROUP FAR * g,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DWORD聽聽聽dwCallbackData
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽
聽l p C a l l e r I d鏄竴涓煎弬鏁幫紝鍏朵腑鍖呭惈榪炴帴瀹炰綋鐨勫湴鍧銆俉 S A B U F緇撴瀯鏄澶歐insock 2鍑芥暟
甯哥敤鐨勩傚瀹冪殑澹版槑濡備笅錛?/p>
typedef聽struct __WSABUF{
聽u_long聽len;
聽char FAR * buf;
聽} WSABUF,FAR * LPWSABUF;
聽瀵筶 p C a l l e r I d鏉ヨ錛宐 u f鎸囬拡鎸囧悜鐨勬槸涓涓湴鍧緇撴瀯銆傝緇撴瀯閽堝鐨勬槸寤虹珛榪炴帴鐨勯?U嶇壒瀹?br />閫氫俊鍗忚銆備負(fù)姝g‘榪斿洖淇℃伅錛屽彧欏誨皢b u f鎸囬拡寤虹珛涓烘伆褰撶殑S O C K A D D R綾誨瀷銆傚湪T C P / I P鐨勬儏
鍐典笅錛屽湪S O C K A D D R _ I N緇撴瀯涓紝褰撶劧搴旇鍖呭惈寤虹珛榪炴帴鐨勯偅涓鎴鋒満鐨処 P鍦板潃銆傚湪榪炴帴璇?br />姹傛湡闂達(dá)紝澶у鏁扮綉緇滃崗璁兘鑳芥彁渚涘鍛煎彨鑰匢 D淇℃伅鐨勬敮鎸併?br />l p C a l l e r D a t a鍙傛暟涓寘鍚簡闅忚繛鎺ヨ姹備竴閬擄紝鐢卞鎴鋒満鍙戝嚭鐨勪換浣曡繛鎺ユ暟鎹傝嫢鍏朵腑鏈寚
瀹氬懠鍙呮暟鎹紝閭d箞璇ュ弬鏁板氨榛樿涓篘 U L L銆傝娉ㄦ剰鐨勬槸錛屽澶у鏁扮綉緇滃崗璁紙濡俆 C P錛夋潵璇達(dá)紝
瀹冧滑騫朵笉鎻愪緵瀵硅繛鎺ユ暟鎹殑鏀寔銆傝嚦浜庝竴縐嶅崗璁埌搴曟槸鏀寔榪炴帴鏁版嵁錛岃繕鏄敮鎸佹柇寮鏁版嵁錛?br />鍙敤W S A E n u m P r o t o c o l s鍑芥暟瀵筗i n s o c k鐩綍涓浉搴旂殑鏉$洰榪涜鏌ヨ錛屼粠鑰屽緱鍑烘紜殑緇撹銆?/p>
l p S Q O S鍜宭 p G Q O S鍙傛暟瀵瑰鎴鋒満璇鋒眰鐨勪換浣曚竴涓湇鍔¤川閲忥紙 Q O S錛夊弬鏁拌繘琛屾寚瀹氾紝涓や釜
鍙傛暟閮藉紩鐢ㄤ簡涓涓猀 O S緇撴瀯錛岃緇撴瀯涓寘鍚殑淇℃伅鏄叧浜庢敹鍙戞暟鎹墍闇瑕佺殑甯﹀銆傚鏋滃鎴?br />鏈烘病鏈夎姹俀 O S錛岃繖浜涘弬鏁伴兘灝嗘槸N U L L銆傝繖涓や釜鍙傛暟鐨勪笉鍚屼箣澶勫湪浜巐 p S Q O S鎸囧畾鐨勬槸涓涓?br />鐙珛鐨勮繛鎺ワ紝鑰宭 p G Q O S鍒欑敤浜庡鎺ュ瓧緇勩傚湪Winsock 1鎴?涓病鏈夊疄鏂芥垨鏀寔濂楁帴瀛楃粍
l p C l a l l e e I d灞炰簬鍙︿竴縐峎 S A B U F緇撴瀯錛岃繖涓緇撴瀯涓寘鍚凡涓庡鎴鋒満闇瑕佷笌涔嬭繛鎺ョ殑鏈湴鍦?br />鍧銆傝緇撴瀯鐨刡 u f瀛楁鍚屾牱鎸囧悜鍏剁浉搴斿湴鍧瀹舵棌鐨勪竴涓猄 O C K A D D R瀵硅薄銆傚姝e湪涓涓涓繪満
鐨勬満鍣ㄤ笂榪愯鐨勬湇鍔″櫒鏉ヨ錛岃繖縐嶄俊鎭潪甯告湁鐢ㄣ傝浣忥紝濡傛灉鏈嶅姟鍣ㄥ拰I N A D D R _ A N Y鍦板潃緇?br />瀹氬湪涓璧鳳紝浠諱綍涓涓綉緇滄帴鍙i兘鍙負(fù)榪炴帴璇鋒眰鎻愪緵鏈嶅姟銆傞殢鍚庯紝璇ュ弬鏁頒細(xì)榪斿洖瀹為檯寤虹珛榪炴帴
鐨勯偅涓帴鍙c?br />l p C l a l l e e D a t a鍙傛暟鏄痩 p C a l l e r D a t a鐨勮ˉ鍏呫俵 p C a l l e e D a t a鍙傛暟鎸囧悜涓涓猈 S A B U F緇撴瀯錛屾湇鍔?br />鍣ㄥ彲鍒╃敤榪欎釜緇撴瀯鎶婃暟鎹綋浣滆繛鎺ヨ姹傝繘紼嬬殑涓閮ㄥ垎錛岃繑鍥炲鎴鋒満銆傚鏋滄湇鍔℃彁渚涜呮敮鎸佽繖
涓閫夐」錛?l e n瀛楁灝變細(xì)鎸囧嚭浣滀負(fù)榪欎釜榪炴帴璇鋒眰涓閮ㄥ垎錛屾湇鍔″櫒鏈澶氬彲鍚戝鎴鋒満榪斿洖澶氬皯瀛楄妭銆?br />榪欑鎯呭喌涓嬶紝鏈嶅姟鍣ㄤ細(xì)鏍規(guī)嵁榪欎竴鏁伴噺錛屽皢灝藉彲鑳藉鐨勫瓧鑺傚鍒跺埌W S A B U F緇撴瀯鐨刡 u f閮ㄥ垎錛屽悓
鏃剁敤l e n瀛楁鎸囧嚭瀹為檯浼犺緭浜嗗灝戜釜瀛楄妭銆傚鏋滄湇鍔″櫒涓嶆兂榪斿洖浠諱綍榪炴帴鏁版嵁錛岄偅涔堬紝鍦ㄨ繑鍥?br />涔嬪墠錛屾潯浠舵帴鍙楀嚱鏁板簲灝唋 e n瀛楁璁句負(fù)0銆傚亣濡傛彁渚涜呬笉鏀寔榪炴帴鏁版嵁錛?l e n瀛楁灝變細(xì)涓?銆傚ぇ澶?br />鏁板崗璁悓鏍烽兘涓嶆敮鎸佸湪鎺ュ彈榪炴帴涔嬪墠榪涜鏁版嵁浜ゆ崲銆備簨瀹炰笂錛?Wi n 3 2騫沖彴褰撳墠鏀寔鐨勬墍鏈夊崗璁?br />閮戒笉鏀寔榪欎竴鐗規(guī)с?br />鏈嶅姟鍣ㄥ皢浼犻掔粰鏉′歡鍑芥暟鐨勫弬鏁板鐞嗗畬涔嬪悗錛屽繀欏繪寚鍑哄埌搴曟槸鎺ュ彈銆佹嫆緇濊繕鏄歡鍚庡鎴鋒満鐨勮繛鎺ヨ姹傘傚鏋滄湇鍔″櫒鎵撶畻鎺ュ彈榪炴帴錛岄偅涔堟潯浠跺嚱鏁板氨搴旇繑鍥濩 F _ A C C E P T銆傚鏋滄嫆緇濓紝
鍑芥暟灝卞簲榪斿洖C F _ R E J E C T銆傚鏋滃嚭浜庢煇縐嶅師鍥狅紝鐜板湪榪樹笉鑳藉仛鍑哄喅瀹氾紝灝卞簲榪斿洖C F _ D E F E R銆?br />鑻ユ湇鍔″櫒鍑嗗瀵硅繖涓繛鎺ヨ姹傝繘琛屽鐞嗭紝灝卞簲璋冪敤W S A A c c c e p t銆傝娉ㄦ剰鐨勬槸錛屾潯浠跺嚱鏁板湪涓?br />W S A A c c e p t鍑芥暟鐩稿悓鐨勮繘紼嬪唴榪愯錛岃屼笖浼?xì)绔嬪崒櫩斿洖銆傚彟澶栬繕瑕佹敞鎰忕殑鏄紝瀵逛簬褰撳墠鐨?br />Wi n 3 2騫沖彴鏀寔鐨勫崗璁潵璇達(dá)紝鏉′歡鎺ュ彈鍑芥暟騫朵笉鎰忓懗鐫瀹㈡埛鏈虹殑榪炴帴璇鋒眰蹇呴』鍦ㄤ粠璇ュ嚱鏁拌繑鍥?br />涓涓間箣鍚庢墠浼?xì)寰楀埌婊…憻雬傚ぇ澶氭暟鎯呭喌涓嬶紝鏈鍩哄眰鐨勭綉緇滃爢鏍堝湪鏉′歡鎺ュ彈鍑芥暟璋冪敤鐨勯偅涓鍒伙紝
灝卞凡緇忔帴鍙椾簡榪炴帴銆傚鏋滆繑鍥濩 F _ R E J E C T鍊鹼紝鍩哄眰鍫嗘爤灝變細(xì)灝嗚繛鎺ョ畝鍗曞湴鍏抽棴浜嗕簨銆?br />濡傚彂鐢熼敊璇紝灝變細(xì)榪斿洖I N VA L I D _ S O C K E T銆傛渶甯歌鐨勯敊璇槸W S A E W O U L D B L O C K銆傚
鏋滅洃鍚鎺ュ瓧澶勪簬寮傛鐘舵佹垨闈炴殏鍋滄ā寮忥紝鍚屾椂娌℃湁瑕佹帴鍙楃殑榪炴帴鏃訛紝灝變細(xì)浜х敓姝ょ被鐨勯敊璇?br />鑻ユ潯浠跺嚱鏁拌繑鍥濩 F _ D E F E R錛學(xué) S A A c c e p t灝變細(xì)榪斿洖W S AT RY _ A G A I N閿欒銆傚鏋滄潯浠跺嚱鏁拌繑
鍥濩 F _ R E J E C T錛學(xué) S A A c c e p t閿欒灝辨槸W S A E C O N N R E F U S E D銆?/p>
聽聽聽聽
6.1 IP
緗戦檯鍗忚錛?Internet Protocol, IP錛夋槸涓縐嶇敤浜庝簰鑱旂綉鐨勭綉緇滃崗璁?
浠庡畠鐨勮璁$湅鏉ワ紝 I P鏄竴涓棤榪炴帴鐨勫崗璁紝涓嶈兘淇濊瘉鏁版嵁鎶曢掍竾
鏃犱竴澶便備袱涓瘮瀹冮珮綰х殑鍗忚錛?T C P鍜孶 D P錛夌敤浜庝緷璧朓 P鍗忚鐨勬暟鎹氫俊銆?/p>
6.1.1 TCP
闈㈠悜榪炴帴鐨勯氫俊鏄氳繃鈥滀紶杈撴帶鍒跺崗璁濓紙Transmission Control Protocol, TCP錛夋潵瀹屾垚鐨勩?br />T C P鎻愪緵涓ゅ彴璁$畻鏈轟箣闂寸殑鍙潬鏃犻敊鐨勬暟鎹紶杈撱傚簲鐢ㄧ▼搴忓埄鐢═ C P榪涜閫氫俊鏃訛紝婧愬拰鐩爣涔嬮棿浼?xì)寰忕珛涓涓櫄鎷熻繛鎺ャ傝繖涓繛鎺ヤ竴鏃﹀緩绔嬶紝涓ゅ彴璁$畻鏈轟箣闂村氨鍙互鎶婃暟鎹綋浣滀竴涓弻鍚戝瓧鑺傛祦榪涜浜ゆ崲銆?/p>
6.1.2 UDP
鏃犺繛鎺ラ氫俊鏄氳繃鈥滅敤鎴鋒暟鎹姤鍗忚鈥濓紙User Datagram Protocol, UDP錛夋潵瀹屾垚鐨勩俇 D P涓嶄繚闅滃彲闈犳暟鎹殑浼犺緭錛屼絾鑳藉鍚戣嫢騫蹭釜鐩爣鍙戦佹暟鎹紝鎺ユ敹鍙戣嚜鑻ュ共涓簮鐨勬暟鎹?br />鏁版嵁浼犺緭鏂規(guī)硶閲囩敤鐨勬槸鏁版嵁鎶ャ?br />T C P鍜孶 D P涓よ呴兘鍒╃敤I P鏉ヨ繘琛屾暟鎹紶杈擄紝涓鑸О涓篢 C P / I P鍜孶 D P / I P銆俉i n s o c k閫氳繃A F _ I N E T鍦板潃瀹舵棌涓篒 P閫氫俊瀹氬潃錛?/p>
6.1.3 瀹氬潃
Wi n s o c k涓紝搴旂敤閫氳繃S O C K A D D R _ I N緇撴瀯鏉ユ寚瀹欼 P鍦板潃鍜屾湇鍔$鍙d俊鎭紝璇ョ粨鏋勭殑鏍煎紡濡備笅錛?/p>
struct sockaddr_in
{
聽short 聽sin_family;
聽u_short sin_port;
聽struct in_addr sin_addr;
聽char聽聽聽 sin_zero[8];
}
銆備粠鏈川涓婅錛岀鍙e彿鍒嗕負(fù)涓嬮潰榪欎笁綾伙細(xì)鈥滃凡鐭モ濈鍙c佸凡娉ㄥ唽绔彛銆佸姩鎬佸拰錛堟垨錛夌鐢ㄧ鍙c?br />鈻?0 ~ 1 0 2 3鐢盜 A N A鎺у埗錛屾槸涓哄浐瀹氭湇鍔′繚鐣欑殑銆?br />鈻?1 0 2 4 ~ 4 9 1 5 1鏄疘 A N A鍒楀嚭鏉ョ殑銆佸凡娉ㄥ唽鐨勭鍙o紝渚涙櫘閫氱敤鎴風(fēng)殑鏅氱敤鎴瘋繘紼嬫垨紼嬪簭浣?br />鐢ㄣ?br />鈻?4 9 1 5 2 ~ 6 5 5 3 5鏄姩鎬佸拰錛堟垨錛夌鐢ㄧ鍙c?br />鏅氱敤鎴峰簲鐢ㄥ簲璇ラ夋嫨1 0 2 4 ~ 4 9 1 5 1涔嬮棿鐨勫凡娉ㄥ唽绔彛錛?br />S O C K A D D R _ I N緇撴瀯鐨剆 i n _ a d d r瀛楁鐢ㄤ簬鎶婁竴涓狪 P鍦板潃淇濆瓨涓轟竴涓?瀛楄妭鐨勬暟錛屽畠鏄棤絎﹀彿闀挎暣鏁扮被鍨嬨傛牴鎹繖涓瓧孌電殑涓嶅悓鐢ㄦ硶錛岃繕鍙〃紺轟竴涓湰鍦版垨榪滅▼I P鍦板潃銆侷 P鍦板潃涓鑸槸
鐢ㄢ滀簰鑱旂綉鏍囧噯鐐瑰垎琛ㄧず娉曗濓紙鍍廰 . b . c . d涓鏍鳳級鎸囧畾鐨勶紝姣忎釜瀛楁瘝浠h〃涓涓瓧鑺傛暟錛屼粠宸﹀埌鍙沖垎閰嶄竴涓?瀛楄妭鐨勬棤絎﹀彿闀挎暣鏁般傛渶鍚庝竴涓瓧孌祍in_ zero 錛屽彧鍏呭綋濉厖欏圭殑鑱岃矗錛屼互浣縎 O C K A D D R _ I N緇撴瀯鍜孲 O C K A D D R緇撴瀯鐨勯暱搴︿竴鏍楓?/p>
涓涓湁鐢ㄧ殑銆佸悕涓篿 n e t _ a d d r鐨勬敮鎸佸嚱鏁幫紝鍙妸涓涓偣寮廔 P鍦板潃杞崲鎴愪竴涓? 2浣嶇殑鏃犵鍙烽暱鏁存暟銆傚畠鐨勫畾涔夊涓嬶細(xì)
unsigned long inet_addr(
const char FAR *cp
);
榪欎釜鍑芥暟鎶奍 P鍦板潃褰撲綔涓涓寜緗戠粶瀛楄妭欏哄簭鎺掑垪鐨? 2浣嶆棤絎﹀彿闀挎暣鏁拌繑鍥?br />1. 鐗規(guī)畩鍦板潃
瀵逛簬鐗瑰畾鎯呭喌涓嬬殑濂楁帴瀛楄涓猴紝鏈変袱涓壒孌奍 P 鍦板潃鍙瀹冧滑浜х敓褰卞搷銆傜壒孌婂湴鍧I N A D D R _ A N Y鍏佽鏈嶅姟鍣ㄥ簲鐢ㄧ洃鍚富鏈鴻綆楁満涓婇潰姣忎釜緗戠粶鎺ュ彛涓婄殑瀹㈡埛鏈烘椿鍔ㄣ備竴鑸儏鍐典笅錛屽湪璇ュ湴鍧緇戝畾濂楁帴瀛楀拰鏈湴鎺ュ彛鏃訛紝緗戠粶搴旂敤鎵嶅埄鐢ㄨ繖涓湴鍧鏉ョ洃鍚繛鎺ャ傚鏋滀綘鏈変竴涓鍧緋葷粺錛岃繖涓湴鍧灝卞厑璁鎬竴涓嫭绔嬪簲鐢ㄦ帴鍙楀彂鑷涓帴鍙g殑鍥炲簲銆傜壒孌婂湴鍧I N A D D R _ B R O A D C A S T鐢ㄤ簬鍦ㄤ竴涓狪 P緗戠粶涓彂閫佸箍鎾璘 D P鏁版嵁鎶ャ傝浣跨敤榪欎釜鐗規(guī)畩鍦板潃錛岄渶瑕佸簲鐢ㄨ緗鎺ュ瓧閫夐」S O _ B R O A D C A S T銆?/p>
2. 瀛楄妭鎺掑簭
閽堝鈥滃ぇ澶粹濓紙b i g - e n d i a n錛夊拰鈥滃皬澶粹濓紙l i t t l e - e n d i a n錛夊艦寮忕殑緙栧彿錛屼笉鍚岀殑璁$畻鏈哄鐞嗗櫒鐨勮〃紺烘柟娉曟湁鎵涓嶅悓錛岃繖鐢卞悇鑷殑璁捐鍐沖畾銆傛瘮濡傦紝 Intel 86澶勭悊鍣ㄤ笂錛岀敤鈥滃皬澶粹濆艦寮忔潵琛ㄧず澶氬瓧鑺傜紪鍙鳳細(xì)瀛楄妭鐨勬帓搴忔槸浠庢渶鏃犳剰涔夌殑瀛楄妭鍒版渶鏈夋剰涔夌殑瀛楄妭銆傚湪璁$畻鏈轟腑鎶奍 P鍦板潃鍜岀鍙e彿鎸囧畾鎴愬瀛楄妭鏁版椂錛岃繖涓暟灝辨寜鈥滀富鏈哄瓧鑺傗濓紙h o s t - b y t e錛夐『搴忔潵琛ㄧず銆備絾鏄紝濡傛灉鍦ㄧ綉緇滀笂鎸囧畾I P鍦板潃鍜岀鍙e彿錛屸滀簰鑱旂綉鑱旂綉鏍囧噯鈥濇寚瀹氬瀛楄妭鍊煎繀欏葷敤鈥滃ぇ澶粹濆艦寮忔潵琛ㄧず
錛堜粠鏈鏈夋剰涔夌殑瀛楄妭鍒版渶鏃犳剰涔夌殑瀛楄妭錛夛紝涓鑸О涔嬩負(fù)鈥滅綉緇滃瓧鑺傗濓紙n e t w o r k - b y t e錛夐『搴忋?/p>
鎴戜滑鎵撶畻婕旂ず涓涓嬪浣曞埄鐢ㄤ笂闈㈡弿榪扮殑i n e t _ a d d r 鍜宧 t o n s 鍑芥暟鏉ュ垱寤?br />S O C K A D D R _ I N緇撴瀯銆?/p>
SOCKETADDR_IN聽InternetAddr;
int nPortId = 5150;
InternetAddr.sin_family = AF_INET;
InternetAddr.sin_addr.s_addr = inet_addr("198.198.10.216");
InternetAddr.sin_port = htonl(nPortId);
6.1.4 鍒涘緩濂楁帴瀛?br />鍒涘緩涓涓狪 P濂楁帴瀛楃殑濂藉鏄究浜庡簲鐢ㄨ兘澶熼氳繃T C P銆乁 D P鍜孖 P鍗忚榪涜閫氫俊銆傚瑕佺敤T C P鍗忚鎵撳紑涓涓狪 P濂楁帴瀛楋紝闇璋冪敤甯︽湁鍦板潃瀹舵棌A F _ I N E T鍜屽鎺ュ瓧綾誨瀷S O C K _ S T R E A M鐨剆 o c k e t鍑芥暟鎴朩 S A S o c k e t鍑芥暟錛屽茍鎶婂崗璁瓧孌佃鎴?錛屾柟寮忓涓嬶細(xì)
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,0);
s = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
瑕佸埄鐢║ D P鍗忚鎵撳紑I P濂楁帴瀛楋紝鍙』鎸囧畾濂楁帴瀛楃被鍨嬶紝鐢ㄨ繖涓寚瀹氱殑濂楁帴瀛楃被鍨嬩唬鏇縮 o c k e t鍑芥暟涓殑S O C K _ S T R E A M鍜屼笂闈㈢殑W S A S o c k e t璋冪敤銆傝繕鍙互鎵撳紑涓涓鎺ュ瓧閫氳繃I P鐩存帴閫氫俊銆傝繖鏄妸濂楁帴瀛楃被鍨嬭鎴怱 O C K _ R AW鏉ュ畬鎴愮殑銆?/p>
6.1.5 鍚嶅瓧瑙f瀽
Wi n s o c k搴旂敤鎵撶畻閫氳繃I P鍜屼富鏈洪氫俊鏃訛紝蹇呴』鐭ラ亾榪欎釜涓繪満鐨処 P鍦板潃銆備緷鐢ㄦ埛鐪嬫潵錛?I P鍦板潃鏄笉瀹規(guī)槗璁扮殑銆傚湪鎸囧畾鏈哄櫒鏃訛紝璁稿浜烘洿鎰挎剰鍒╃敤涓涓槗璁扮殑銆佸弸濂界殑涓繪満鍚嶈屼笉鏄疘 P鍦板潃銆俉i n s o c k鎻愪緵浜嗕袱涓敮鎸佸嚱鏁幫紝瀹冧滑鏈夊姪浜庣敤鎴鋒妸涓涓富鏈哄悕瑙f瀽鎴怚 P鍦板潃銆?br />Wi n d o w s濂楁帴瀛梘 e t h o s t b y n a m e鍜學(xué)SAAsynGetHostByName API鍑芥暟浠庝富鏈烘暟鎹簱涓彇鍥炰笌鎸囧畾鐨勪富鏈哄悕瀵瑰簲鐨勪富鏈轟俊鎭備袱涓嚱鏁板潎榪斿洖涓涓狧 O S T E N T緇撴瀯.
6.3 IPX/SPX
鈥滀簰鑱旂綉鍖呬氦鎹⑩濓紙I P X錛夊崗璁槸涓涓父瑙佸崗璁紝涓鑸負(fù)鎵挎媴Novell NetWa r e瀹㈡埛鏈猴紡鏈嶅姟鍣ㄨ仈緗戞湇鍔$殑璁$畻鏈烘墍鐢ㄣ傘侷 P X鎻愪緵涓や釜榪涚▼闂寸殑鏃犺繛鎺ラ氫俊錛涘洜姝わ紝濡傛灉涓涓伐浣滅珯鍙戝嚭涓涓暟鎹寘錛岃鍗忚鏃犳硶淇濊瘉榪欎釜鏁版嵁鍖呬細(xì)鍑嗙‘鏃犺鍦版姇閫掑埌鐩爣鍦扮偣銆傚鏋滃簲鐢ㄧ▼搴忛渶瑕佹暟鎹姇閫掍繚璇侊紝浣嗕粛鍧氭寔浣跨敤I P X錛屽畠?yōu)兗?xì)閫夌敤涓涓瘮I P X楂樼駭鐨勫崗璁紝姣斿璇粹滈『搴忓垎緇勪氦鎹⑩?br />錛圫 P X錛夊拰SPX II鍗忚錛岃繖涓や釜鍗忚涓紝 S P X鍖呴氳繃I P X鍙戦併俉i n s o c k涓哄簲鐢ㄧ▼搴忔彁渚涗簡鍦╓i n d o w s騫沖彴涓婇氳繃I P X榪涜閫氫俊鐨勮兘鍔涳紙瀹冧滑鏄疻indows 95銆乄indows 98銆乄indows NT浠ュ強(qiáng)Windows 2000錛?/p>
6.6 ATM
寮傛浼犺緭妯″紡錛圓T M錛夊崗璁槸鐩墠宸叉湁鐨勬渶鏂板崗璁箣涓錛?Windows 98鍜學(xué)indows 2000騫沖彴涓婄殑Winsock 2鍧囨敮鎸佸畠銆侫T M閫氬父鐢ㄤ簬L A N鍜學(xué)A N涓婄殑楂橀熻仈緗戯紝涔熺敤浜庡悇縐嶇被鍨嬬殑閫氫俊錛屾瘮濡傝瑕佹眰楂橀熼氫俊鐨勮闊熾佽棰戝拰鏁版嵁絳夈備竴鑸鏉ワ紝 AT M鍒╃敤緗戠粶涓婄殑铏氭嫙榪炴帴錛圴 C錛夋潵鎻愪緵鏈嶅姟璐ㄩ噺錛?Q O S錛変繚璇併傛濡傚ぇ瀹跺嵆灝嗙湅鍒扮殑閭f牱錛學(xué)i n s o c k鑳藉閫氳繃AT M鍦板潃瀹舵棌鏉ヤ嬌鐢ˋT M緗戠粶涓婄殑铏氭嫙榪炴帴銆侫T M緗戠粶錛堝鍥? - 1鎵紺猴級涓鑸敱閫氳繃浜ゆ崲鏈猴紙瀹冧滑灝?br />AT M緗戠粶妗ユ帴鍦ㄤ竴璧鳳級榪炴帴鐨勭鐐癸紙鎴栬綆楁満錛夋瀯鎴愩?br />閽堝AT M鍗忚緙栫▼鏃訛紝闇瑕佹槑鐧借繖鍑犵偣銆傞鍏堬紝 AT M鏄竴涓獟浣撶被鍨嬶紝鑰屼笉鏄竴涓湡姝g殑鍗忚銆備篃灝辨槸璇達(dá)紝 AT M綾諱技浜庣洿鎺ュ湪浠ュお緗戜笂鍐欏叆浠ュお甯с傚拰浠ュお緗戜竴鏍鳳紝 AT M鍗忚娌℃湁鎻愪緵嫻佹帶鍒躲傚畠鏄竴涓潰鍚戣繛鎺ョ殑鍗忚錛岃涔堟彁渚涙秷鎭ā寮忥紝瑕佷箞鎻愪緵嫻佹ā寮忋傝繖榪樻剰鍛崇潃濡傛灉鏁版嵁涓嶈兘蹇熷彂閫佸嚭鍘伙紝鍙戦佸簲鐢ㄥ垯鍙兘婧㈠嚭鏈湴緙撳啿銆傚悓鏍峰湴錛屾帴鏀跺簲鐢ㄥ繀欏婚綣佹姇閫掓敹鍒扮殑鏁版嵁錛氬惁鍒欙紝鎺ユ敹緙撳啿濉弧涔嬫椂錛屼換浣曚竴涓彟澶栨帴鍏ョ殑鏁版嵁閮藉彲鑳借涓㈠純銆傚鏋滀綘鐨勫簲鐢ㄩ渶瑕佹祦鎺у埗錛屾柟娉曚箣涓鏄湪AT M涓婁嬌鐢↖ P鍗忚錛堝畠鍙槸榪愯浜嶢T M緗戠粶涓婄殑I P鍗忚錛夈?br />榪欐牱涓鏉ワ紝搴旂敤渚跨揣璺熷湪涓婇潰鎻忚堪鐨処 P鍦板潃瀹舵棌涔嬪悗銆傚綋鐒訛紝 AT M鐨勭‘鎻愪緵浜嗘瘮I P濂界殑涓浜涘ソ澶勶紝姣斿璇粹滄牴寮忓鎾柟妗堚濓紙絎? 2绔犲皢瀵規(guī)榪涜璇存槑錛夛紱鐒惰岋紝瑕佹牴鎹嚜宸辯殑搴旂敤闇瑕佹潵鍐沖畾鏈閫傚悎浣犵殑閭g鍗忚銆?/p>
6.8 灝忕粨
榪欎竴绔犺榪頒簡Wi n s o c k鏀寔鐨勫崗璁湴鍧瀹舵棌錛岃鏄庝簡鍚勪釜瀹舵棌鐗規(guī)湁鐨勫畾鍧灞炴с傞拡瀵規(guī)瘡涓湴鍧瀹舵棌錛屾垜浠繕璁ㄨ浜嗗浣曞垱寤哄鎺ュ瓧鍜屽浣曡緗鎺ュ瓧鍦板潃緇撴瀯錛屼互渚垮紑濮嬮氳繃鍗忚榪涜閫氫俊銆備笅涓绔狅紝鎴戜滑灝嗘弿榪伴傜敤浜嶹i n s o c k鐨勫熀鏈氫俊鎶鏈紝騫舵妸瀹冧滑搴旂敤鍒版湰绔犺璁虹殑鎵鏈夊湴鍧瀹舵棌涓娿?/p>
絎?绔犵綉緇滃師鐞嗗拰鍗忚
寤虹珛Winsock 2瑙勮寖鐨勪富瑕佺洰鐨勬槸鎻愪緵涓涓笌鍗忚鏃犲叧鐨勪紶閫佹帴鍙c?/p>
5.1 鍗忚鐨勭壒寰?br />鏈珷絎竴灝忚妭鐫閲嶈瑙g洰鍓嶅父鐢ㄧ綉緇滀紶閫佸崗璁殑涓浜涘熀鏈壒寰併傞氳繃榪欓噷鐨勫涔?fàn)锛屽ぇ瀹跺彲鎺屾彙涓庡崗璁湄?fù)綾誨瀷鏈夊叧鐨勪竴浜涜儗鏅煡璇嗐傚悓鏃訛紝浣滀負(fù)紼嬪簭鍛橈紝鍙ぇ鑷寸煡閬撶壒瀹氬崗璁湪紼嬪簭涓殑琛屼負(fù)鏂瑰紡銆?/p>
5.1.1 闈㈠悜娑堟伅
瀵規(guī)瘡涓鏁e啓鍛戒護(hù)鏉ヨ錛屽鏋滀紶閫佸崗璁妸瀹冧滑錛堣屼笖鍙湁瀹冧滑錛夊綋鍋氫竴鏉$嫭绔嬬殑娑堟伅鍦ㄧ綉涓婁紶閫侊紝鎴戜滑灝辮璇ュ崗璁槸闈㈠悜鍗忚鐨勩傚悓鏃訛紝榪樻剰鍛崇潃鎺ユ敹绔湪鎺ユ敹鏁版嵁鏃訛紝榪斿洖鐨勬暟鎹槸鍙戦佺鍐欏叆鐨勪竴鏉$鏁f秷鎭傛帴鏀剁涓嶈兘寰楀埌鏇村鐨勬秷鎭紝浠呮鑰屽凡銆傛瘮濡傦紝鍦ㄥ浘5 - 1涓紝
宸﹁竟鐨勫伐浣滅珯鍚戝彸杈圭殑宸ヤ綔绔欐彁浜や簡涓夋潯鍒嗗埆鏄? 2 8銆? 4鍜? 2瀛楄妭鐨勬秷鎭備綔涓烘帴鏀剁鐨勫伐浣滅珯鍙戝嚭涓夋潯璇誨彇鍛戒護(hù)錛岀紦鍐插尯鏄? 5 6涓瓧鑺傘傚悗鏉ョ殑鍚勬璋冪敤榪斿洖鐨勫垎鍒槸1 2 8銆? 6 4 鍜? 2涓瓧鑺傘傜涓嬈¤鍙栬皟鐢ㄤ笉浼?xì)灏啒q欐墍鏈夌殑涓変釜鏁版嵁鍖呴兘榪斿洖錛屽嵆浣胯繖浜涙暟鎹寘宸茬粡鏀跺埌涔熷姝ゃ傝繖縐頒負(fù)鈥滀繚鎶ゆ秷鎭竟鐣屸濓紙preserving message boundaries錛夛紝錛屼竴鑸嚭鐜板湪浜ゆ崲緇撴瀯鍖栨暟鎹椂銆?br />緗戠粶娓告垙鏄滀繚鎶ゆ秷鎭竟鐣屸濈殑杈冨ソ鑼冧緥銆傛瘡涓帺瀹跺潎鍚戝埆鐨勭帺瀹跺彂鍑轟竴涓甫鏈夊湴鍥句俊鎭殑鏁版嵁鍖呫傝繖縐嶉氫俊鍚庨潰鐨勪唬鐮佸緢綆鍗曪細(xì)涓涓帺瀹惰姹備竴涓暟鎹寘錛屽彟涓涓帺瀹跺張鍑嗙‘鍦頒粠鍒殑鐜╁澶勮幏寰椾竴涓湴鍥句俊鎭暟鎹寘銆?br />
鏃犱繚鎶ゆ秷鎭竟鐣岀殑鍗忚閫氬父縐頒綔鈥滃熀浜庢祦鐨勫崗璁濄傚ぇ瀹惰鐭ラ亾鈥滃熀浜庢祦鐨勫崗璁濊繖涓鏈甯哥敤鏉ユ寚浠i檮鍔犵壒鎬с傛祦鏈嶅姟鐨勫畾涔夋槸榪炵畫鐨勬暟鎹紶杈擄紱涓嶇娑堟伅杈圭晫鏄惁瀛樺湪錛屾帴鏀剁閮戒細(xì)灝介噺鍦拌鍙栨湁鏁堟暟鎹傚鍙戦佺鏉ヨ錛屾剰鍛崇潃鍏佽緋葷粺灝嗗師濮嬫秷鎭垎瑙f垚灝忔秷鎭垨鎶婂嚑鏉℃秷鎭Н绱湪涓璧鳳紝褰㈡垚涓涓緝澶х殑鏁版嵁鍖呫傚鎺ユ敹绔潵璇達(dá)紝鍒欐槸鏁版嵁涓鍒拌揪緗戠粶鍫嗘爤錛?br />緗戠粶鍫嗘爤灝卞紑濮嬭鍙栧畠錛屽茍灝嗗畠緙撳瓨涓嬫潵絳夊欒繘紼嬪鐞嗐傚湪榪涚▼璇鋒眰澶勭悊澶ч噺鏁版嵁鏃訛紝緋葷粺浼?xì)鍦ㄤ笉婧㈠囖Z負(fù)瀹㈡埛璇鋒眰鎻愪緵鐨勭紦鍐插尯榪欎竴鍓嶆彁涓嬶紝灝介噺榪斿洖鏇村鐨勬暟鎹傚湪鍥? - 2涓紝鍙戦佺鎻愪氦浜嗕笁涓暟鎹寘錛氬垎鍒槸1 2 8銆? 4鍜? 2涓瓧鑺傦紱浣嗘槸錛屾湰鍦扮郴緇熷爢鏍堣嚜鐢卞湴鎶婅繖浜涙暟鎹仛鍚堝湪涓璧鳳紝褰㈡垚涓涓ぇ鐨勬暟鎹寘銆傝繖縐嶆儏鍐典笅錛岄噸緇勫悗鐨?涓暟鎹寘灝變細(xì)涓璧蜂紶杈撱傛槸鍚﹀皢鍚勪釜鐙珛鐨勬暟鎹寘绱Н鍦ㄤ竴璧峰彈璁稿鍥犵礌鐨勫獎(jiǎng)鍝嶏紝姣斿鏈澶т紶杈撳崟鍏冩垨N a g l e綆楁硶銆傚湪T C P / I P涓紝鍦ㄥ皢縐瘡璧鋒潵鐨勬暟鎹彂鍒扮嚎涓婁箣鍓嶏紝 N a g l e綆楁硶鍦ㄧ瓑鍊欐暟鎹Н绱殑涓繪満涓繘琛屻?br />鍦ㄩ渶瑕佸彂閫佺殑鏁版嵁縐瘡鍒頒竴瀹氭暟閲忔垨棰勫畾鏃墮棿宸茶秴榪囦箣鍓嶏紝榪欎釜涓繪満浼?xì)涓鐩寸瓑涓嬪幓銆傚疄鏂絅 a g l e綆楁硶鏃訛紝涓繪満鐨勯氫俊鏂瑰湪鍙戦佷富鏈虹‘璁や箣鍓嶏紝浼?xì)绛変竴絳夊鍑烘暟鎹紝涓繪満鐨勯氫俊鏂瑰氨涓嶅繀鍙戦佷竴涓彧鏈夌‘璁ょ殑鏁版嵁鍖呫傚彂閫佸皬鏁版嵁鍖呬笉浠呮病鏈夊灝戞剰涔夛紝鑰屼笖榪樹細(xì)寰掑閿欒媯(gè)鏌ュ拰紜錛岀浉褰撶儲浜恒?br />鍦ㄦ帴鏀剁錛岀綉緇滃爢鏍堟妸鎵鏈夎繘鏉ョ殑鏁版嵁鍖呰仛闆嗗湪涓璧鳳紝褰掑叆鏃㈠畾榪涚▼銆傛垜浠潵鐪嬬湅鍥? - 2銆?br />濡傛灉鎺ユ敹绔墽琛屼竴嬈? 5 6瀛楄妭緙撳啿鍖虹殑璇誨彇錛岀郴緇熼┈涓婂氨浼?xì)杩斿? 2 4涓瓧鑺傘傚鏋滄帴鏀剁鍙姹傝鍙? 0涓瓧鑺傦紝緋葷粺灝變細(xì)鍙繑鍥? 0涓瓧鑺傘?/p>
浼祦
浼祦錛?p s e u d o - s t r e a m錛夎繖涓湳璇父鐢ㄤ簬鏌愮緋葷粺涓紝璇ョ郴緇熶嬌鐢ㄧ殑鍗忚鏄熀浜庢秷鎭殑錛?br />鍙戦佺殑鏁版嵁鍒嗗埆鍦ㄥ悇鑷嫭绔嬬殑鏁版嵁鍖呭唴錛屾帴鏀剁璇誨彇騫舵妸娑堟伅緙撳瓨鍦ㄤ竴璧鳳紝 榪欐牱錛屾帴鏀跺簲鐢?br />紼嬪簭渚垮彲璇誨彇浠繪剰澶у皬鐨勬暟鎹潡銆傛妸鍥? - 1涓殑鍙戦佺鍜屽浘5 - 2涓殑鎺ユ敹绔粨鍚堣搗鏉ワ紝渚垮彲璇存槑
浼祦鐨勫伐浣滃師鐞嗐傚彂閫佺蹇呴』鍒嗗埆鍙戦佸悇鑷嫭绔嬬殑鏁版嵁鍖咃紝浣嗘帴鏀剁鍙互瀵規(guī)敹鍒扮殑鏁版嵁鍖呰嚜
鐢辯粍鍚堛備竴鑸儏鍐典笅錛屽彲鎶婁吉嫻佽浣滀竴涓櫘閫氱殑鈥滈潰鍚戞祦鐨勫崗璁濄?/p>
5.1.2 闈㈠悜榪炴帴鍜屾棤榪炴帴
閫氬父鎯呭喌涓嬶紝涓涓崗璁彁渚涢潰鍚戣繛鎺ョ殑鏈嶅姟錛屾垨鎻愪緵鏃犺繛鎺ョ殑鏈嶅姟銆傞潰鍚戣繛鎺ョ殑鏈嶅姟涓紝
榪涜鏁版嵁浜ゆ崲涔嬪墠錛屽繀欏諱笌閫氫俊鏂瑰緩绔嬩竴鏉¤礬寰勩傝繖鏍鋒棦紜畾浜嗛氫俊鏂逛箣闂村瓨鍦ㄨ礬鐢憋紝鍙堜繚璇佷簡閫氫俊鍙屾柟閮芥槸媧誨姩鐨勩侀兘鍙郊姝ゅ搷搴旓紝浣嗗叾鐗圭偣鏄湪閫氫俊鍙屾柟涔嬮棿寤虹珛涓涓氫俊淇¢亾闇瑕佸緢澶氬紑鏀傞櫎姝や互澶栵紝澶ч儴鍒嗛潰鍚戣繛鎺ョ殑鍗忚涓轟繚璇佹姇閫掓棤璇紝鍙兘浼?xì)鍥犱负鎵ц棰濆鐨勮绠楁潵楠岃瘉姝<嫯鎬э紝鍥犳錛岃繘涓姝ュ鍔犲紑鏀傝屾棤榪炴帴鍗忚鍗翠笉淇濊瘉鎺ユ敹绔槸鍚︽鍦ㄦ敹鍚傛棤榪炴帴鏈嶅姟綾諱技浜庨偖鏀挎湇鍔★細(xì)鍙戜俊浜烘妸淇¤鍏ラ偖綆卞嵆鍙傝嚦浜庢敹淇′漢鏄惁鎯蟲敹鍒拌繖灝佷俊鎴栭偖灞鏄惁浼?xì)鍥犱负鏆撮闆ㄦ湭鑳芥寜鏃稙畣淇′欢鎶曢掑埌鏀朵俊浜哄絳夌瓑錛屽彂淇′漢閮戒笉寰楄岀煡銆?/p>
5.1.3 鍙潬鎬у拰嬈″簭鎬?br />鍦ㄨ璁$敤浜庣壒瀹氬崗璁殑搴旂敤紼嬪簭鏉ヨ錛屽彲闈犳у拰嬈″簭鎬ф槸鎴戜滑蹇呴』浜嗚В鐨勬渶鍏峰喅瀹氭х殑鐗規(guī)с傚ぇ澶氭暟鎯呭喌涓嬶紝鍙潬鎬у拰嬈″簭鎬т笌鍗忚鏄棤榪炴帴鐨勶紝榪樻槸闈㈠悜榪炴帴鐨勫瘑鍒囩浉鍏熾?/p>
5.1.4 浠庡鍏抽棴
浠庡鍏抽棴鍙嚭鐜板湪闈㈠悜榪炴帴鐨勫崗璁腑銆傚湪榪欑鍏抽棴榪囩▼涓紝涓鏂瑰紑濮嬪叧闂氫俊浼?xì)璇濆Q屼絾鍙︿竴鏂逛粛鐒跺彲浠ヨ鍙栫嚎涓婃垨緗戠粶鍫嗘爤涓婂凡鎸傝搗鐨勬暟鎹傚鏋滈潰鍚戣繛鎺ョ殑鍗忚涓嶆敮鎸佷粠瀹瑰叧闂紝
鍙鍏朵腑涓鏂瑰叧闂簡閫氫俊淇¢亾錛岄兘浼?xì)瀵艰嚧杩炴帴绔嬪嵆涓柇锛屾暟鎹涪澶卞Q屾帴鏀剁涓嶈兘璇誨彇鏁版嵁榪欎簺鎯呭喌鍑虹幇銆?/p>
5.1.5 騫挎挱鏁版嵁
騫挎挱鏁版嵁鍗蟲暟鎹粠涓涓伐浣滅珯鍙戝嚭錛屽眬鍩熺綉鍐呯殑鍏朵粬鎵鏈夊伐浣滅珯閮借兘鏀跺埌瀹冦傝繖涓鐗瑰緛
閫傜敤浜庢棤榪炴帴鍗忚錛屽洜涓篖 A N涓婄殑鎵鏈夋満鍣ㄩ兘鍙幏寰楀茍澶勭悊騫挎挱娑堟伅銆傘備竴鑸儏鍐典笅錛岃礬鐢卞櫒閮戒笉浼?xì)浼犻佸箍鎾寘銆?聽
5.1.6 澶氭挱鏁版嵁
澶氭挱鏄寚涓涓繘紼嬪彂閫佹暟鎹殑鑳藉姏錛岃繖浜涙暟鎹嵆灝嗙敱涓涓垨澶氫釜鎺ユ敹绔繘琛屾帴鏀躲傝繘紼嬪姞鍏ヤ竴涓鎾細(xì)璇濈殑鏂規(guī)硶鍜岄噰鐢ㄧ殑鍩哄眰鍗忚鏈夊叧銆傝棰戜細(xì)璁簲鐢ㄥ父甯鎬嬌鐢ㄥ鎾?/p>
5.1.7 鏈嶅姟璐ㄩ噺
鏈嶅姟璐ㄩ噺錛?Q o S錛夋槸搴旂敤鐨勪竴縐嶈兘鍔涳紝鐢ㄤ互璇鋒眰閽堝涓撻棬鐢ㄩ斿垎閰嶇壒瀹氱殑甯﹀銆?/p>
5.1.8 閮ㄥ垎娑堟伅
閮ㄥ垎娑堟伅鍙敤浜庨潰鍚戞秷鎭殑鍗忚銆?/p>
5.1.9 璺敱閫夋嫨鐨勮冭檻
涓涓噸瑕佽冭檻灝辨槸鍗忚鏄惁鍙礬鐢便傚鏋滃崗璁彲璺敱錛屽氨鍙湪涓や釜宸ヤ綔绔欎箣闂村緩绔嬩竴鏉℃垚鍔熺殑閫氫俊璺緞錛堣涔堟槸闈㈠悜榪炴帴鐨勫洖璺紝瑕佷箞鏄暟鎹姤鐨勬暟鎹礬寰勶級錛屼笉綆¤繖涓や釜宸ヤ綔绔欎箣闂村瓨鍦ㄧ殑緗戠粶紜歡鏄粈涔堛傝礬鐢卞櫒涓嶅鍙戣嚜闈炶礬鐢卞崗璁殑鏁版嵁鍖呰繘琛岃漿鍙戯紝鍗充究鏁版嵁鍖呯殑鏃㈠畾鐩殑鍦板湪鍏惰繛鎺ョ殑瀛愮綉涓娿?/p>
5.2 鏀寔鐨勫崗璁?br />Wi n 3 2騫沖彴鎻愪緵鐨勬渶鏈夌敤鐨勭壒寰佷箣涓鏄兘澶熷悓姝ユ敮鎸佸縐嶄笉鍚岀殑緗戠粶鍗忚銆?br />鍒╃敤Wi n s o c k緙栫▼鎺ュ彛鐨勫ソ
澶勪箣涓鏄洜涓哄畠鏄竴涓笌鍗忚鏃犲叧鐨勬帴鍙c備笉綆′嬌鐢ㄧ殑鏄摢涓縐嶅崗璁紝瀹冧滑鐨勬搷浣滃ぇ澶氭暟鏄?br />鐩擱氱殑銆?/p>
瑕佹兂鑾峰緱緋葷粺涓畨瑁呯殑緗戠粶鍗忚鐨勭浉鍏充俊鎭紝璋冪敤榪欎釜鍑芥暟W S A E n u m P r o t o c o l s鍗沖彲錛?br />鎵撳紑Winsock鍦ㄥ彲浠ヨ皟鐢ㄤ竴涓猈i n s o c k鍑芥暟涔嬪墠錛屽繀欏誨厛鍔犺澆涓涓増鏈紜殑Wi n s o c k搴撱俉i n s o c k
鍚姩渚嬬▼鏄疻 S A S t a r t u p錛屽畠鐨勫畾涔夋槸錛?br />int WSAStartup(WORD wVe r s i o n R e q u e s t e d , L P W S A D ATA lpWSAData)
絎竴涓弬鏁版槸鍑嗗鍔犺澆鐨刉i n s o c k搴撶殑鐗堟湰鍙楓傚氨鐩墠鐨刉i n 3 2騫沖彴鑰岃█錛學(xué)insock 2
搴撶殑鏈鏂扮増鏈槸2 . 2銆傚敮涓鐨勪緥澶栨槸Windows CE錛屽畠鍙敮鎸乄insock 1.1鐗堛傚鏋滈渶瑕?br />Winsock 2.2鐗堬紝鎸囧畾榪欎釜鍊鹼紙 0 x 0 2 0 2錛夋垨浣跨敤瀹廙 A K E W O R D ( 2 , 2 )鍗沖彲銆傞珮浣嶅瓧鑺傛寚瀹?br />鍓増鏈紝鑰屼綆浣嶅瓧鑺傚垯鎸囧畾涓葷増鏈?br />絎簩涓弬鏁版槸W S A D ATA緇撴瀯錛屽畠鏄皟鐢ㄥ畬鎴愪箣鍚庣珛鍗寵繑鍥炵殑銆俉 S A D ATA鍖呭惈浜哤 S A S t a r t u p鍔犺澆鐨勫叧浜嶹i n s o c k鐗堟湰鐨勪俊鎭?br />澶ц嚧璇存潵錛屽湪W S A D ATA緇撴瀯涓紝榪斿洖鐨勫敮涓鏈夌敤鐨勪俊鎭槸w Ve r s i o n鍜寃 H i g h Ve r s i o n銆?br />灞炰簬鏈澶у鎺ュ瓧鍜屾渶澶 D P闀垮害鐨勬潯鐩簲璇ヤ粠鑷繁姝e湪浣跨敤鐨勭壒瀹氬崗璁洰褰曟潯鐩腑鑾峰彇銆?/p>
鍦ㄧ粨鏉焀i n s o c k搴擄紝鑰屼笖涓嶅啀闇瑕佽皟鐢ㄤ換浣昗i n s o c k鍑芥暟鏃訛紝浼?xì)鍗歌浇杩欎釜搴撳Q屽茍閲婃斁璧勬簮銆傝繖涓嚱鏁扮殑瀹氫箟鏄細(xì)
int WSACleanup (void);
璁頒綇錛屾瘡嬈¤皟鐢╓ S A S t a r t u p錛岄兘闇瑕佽皟鐢ㄧ浉搴旂殑W S A C l e a n u p錛屽洜涓烘瘡嬈″惎鍔ㄨ皟鐢ㄩ兘
浼?xì)澧炲姞瀵瑰姞铦瞁insock DLL鐨勫紩鐢ㄦ鏁幫紝瀹冭姹傝皟鐢ㄥ悓鏍峰嬈$殑W S A C l e a n u p錛屼互姝ゆ姷娑?br />寮曠敤嬈℃暟銆?/p>
5.4 Windows濂楁帴瀛?/p>
銆傛墍璋撳鎺ュ瓧錛屽氨鏄竴涓寚鍚戜紶杈撴彁
渚涜呯殑鍙ユ焺銆俉i n 3 2涓紝濂楁帴瀛椾笉鍚屼簬鏂囦歡鎻忚堪絎︼紝鎵浠ュ畠鏄竴涓嫭绔嬬殑綾誨瀷鈥擲 O C K E T銆?br />濂楁帴瀛楁槸鐢變袱涓嚱鏁板緩绔嬬殑錛?br />SOCKET WSASocket(int af,
聽聽聽聽聽聽聽聽 int type,
聽聽聽聽聽聽聽聽 int protocol,
聽聽聽聽聽聽聽聽 LPWSAPROTOCOL_INOF lpProtocolInfo,
聽聽聽聽聽聽聽聽 GROUP g,
聽聽聽聽聽聽聽聽 DWORD dwFlag
聽聽聽聽聽聽聽聽 );
SOCKET socket(int af,
聽聽聽聽聽聽聽int type,
聽聽聽聽聽聽聽int protocol
聽聽聽聽聽聽聽);
絎竴涓弬鏁癮 f錛屾槸鍗忚鐨勫湴鍧瀹舵棌銆傛瘮濡傦紝濡傛灉鎯沖緩绔嬩竴涓猆 D P鎴朤 C P濂楁帴瀛楋紝鍙敤甯擱噺A F _ I N E T鏉ユ寚浠d簰鑱旂綉鍗忚錛?I P錛夈?br />絎簩涓弬鏁皌 y p e錛屾槸鍗忚鐨勫鎺ュ瓧綾誨瀷銆傚鎺ュ瓧鐨勭被鍨嬪彲浠ユ槸涓嬮潰浜斾釜鍊鹼細(xì)
聽S O C K _ S T R E A M銆丼 O C K _ D G R A M銆丼 O C K _ S E Q PA C K E T銆丼 O C K _ R AW鍜孲 O C K _ R D M銆?br />絎笁涓弬鏁版槸p r o t o c o l銆傛寚瀹氱殑鍦板潃瀹舵棌鍜屽鎺ュ瓧綾誨瀷鏈夊涓潯鐩椂錛屽氨鍙敤
榪欎釜瀛楁鏉ラ檺瀹氫嬌鐢ㄧ壒瀹氫紶杈撱?br />
鏈鍚庝袱涓猈 S A S o c k e t鏍囧織寰堢畝鍗曘傜粍鍙傛暟濮嬬粓涓?錛屽洜涓虹洰鍓嶅皻鏃犲彲鏀寔濂楁帴瀛楃粍鐨?br />Wi n s o c k鐗堟湰銆傝鎸囧畾涓涓垨澶氫釜涓嬪垪鏍囧織錛屽彲鐢╠ w F l a g s鍙傛暟錛?br />鈻?W S A _ F L A G _ O V E R L A P P E D
鈻?W S A _ F L A G _ M U LT I P O I N T _ C _ R O O T
鈻?W S A _ F L A G _ M U LT I P O I N T _ C _ L E A F
鈻?W S A _ F L A G _ M U LT I P O I N T _ D _ R O O F
鈻?W S A _ F L A G _ M U LT I P O I N T _ D _ L E A F
絎竴涓爣蹇梂 S A _ F L A G _ O V E R L A P P E D錛岀敤浜庢寚瀹氳繖涓鎺ュ瓧鍏峰閲嶅彔I / O錛堟槸閫傜敤浜?br />Wi n s o c k鐨勫彲鑳藉疄鐜扮殑閫氫俊妯″紡涔嬩竴錛夈傝繖涓富棰樺皢鍦ㄧ8绔犺緇嗚璁恒傝皟鐢╯ o c k e t寤虹珛涓涓
鎺ュ瓧鏃訛紝 W S A _ F L A G _ O V E R L A P P E D渚挎槸榛樿璁劇疆銆備竴鑸鏉ワ紝鍦ㄤ嬌鐢╓ S A S o c k e t鏃訛紝鏈濂?br />濮嬬粓淇濇寔璁懼畾璇ユ爣蹇椼傚悗闈㈠洓涓爣蹇楃敤浜庡鐞嗗鎾鎺ュ瓧銆?/p>
鍘熷濂楁帴瀛?br />鍒╃敤W S A S o c k e t寤虹珛濂楁帴瀛楁椂錛屽彲鍚戝嚱鏁拌皟鐢ㄤ紶閫佷竴涓猈 S A P R O TO CO L _ I N F O緇撴瀯錛屼互
瀹氫箟鍑嗗寤虹珛鐨勯偅涓鎺ュ瓧鐨勭被鍨嬶紱灝界濡傛錛岃繕鏄彲寤虹珛涓浜涘鎺ュ瓧綾誨瀷錛堝湪浼犺緭鎻愪緵鑰?br />鐩綍涓紝瀹冧滑娌℃湁鐩稿簲鐨勬潯鐩級銆傛渶浣崇ず渚嬫槸I P鍗忚涓嬬殑鍘熷濂楁帴瀛椼傚師濮嬪鎺ュ瓧涓縐嶉氫俊錛?br />鍏佽浣犳妸鍏朵粬鍗忚灝佽鍦║ D P鏁版嵁鍖呬腑錛屾瘮濡傝鈥滀簰鑱旂綉鎺у埗娑堟伅鍗忚鈥濓紙I C M P錛夈侷 C M P鐨?br />鐩殑鏄姇閫掍簰鑱旂綉涓繪満闂寸殑鎺у埗銆侀敊璇拰淇℃伅鍨嬫秷鎭傜敱浜嶪 C M P涓嶆彁渚涗換浣曟暟鎹紶杈撳姛鑳斤紝
鍥犳涓嶈兘鎶婂畠涓嶶 D P鎴朤 C P鍚岀瓑鐪嬪緟錛屼絾瀹冨拰I P鏈韓灞炰簬鍚屼竴涓駭鍒?/p>
Winsock API瀹夎鍦ㄢ滀細(xì)璇濆眰鈥濆拰鈥滀紶閫佸眰鈥濅箣闂淬?/p>
5.6 閫夋嫨閫傚綋鐨勫崗璁?br />T C P / I P灝辨槸棣栭夊崗璁箣涓錛岃嚦灝戜粠鏀寔鑳藉姏鍜屽井杞殑璧炲姪榪欎竴瑙掑害鏉ョ湅錛屾槸
榪欐牱鐨?/p>
5.7 灝忕粨
閫氳繃鏈珷鐨勫涔?fàn)锛屽ぇ瀹跺凡浜嗚В湄?fù)搴旂敤紼嬪簭閫夋嫨緗戠粶浼犺緭鏃跺簲璇ョ煡閬撶殑鍩烘湰鐗規(guī)с傚湪涓烘寚100璁¤絎簩閮ㄥ垎闄刉insock API
涓嬭澆瀹氱殑鍗忚寮鍙戞垚鍔熺殑緗戠粶搴旂敤紼嬪簭鏃訛紝浜嗚В榪欎簺鐗規(guī)ф槸鑷沖叧閲嶈鐨勩傛垜浠繕鏈夎鍒掑湴娣卞叆鎺㈣浜嗗浣曡幏寰楀畨瑁呭湪緋葷粺涓殑浼犺緭鎻愪緵鑰呭垪琛ㄥ拰濡備綍鏌ヨ鐗瑰畾灞炴с傛渶鍚庯紝鎴戜滑榪樺涔?fàn)浜嗗浣曚负鎸囧畾鐨勪紶杈撳缓绔嬪鎺ュ瓧锛屾栆?guī)硶鏄負(fù)W S A S o c k e t鎴杝 o c k e t鍑芥暟鎸囧畾姝g‘鐨勫弬鏁幫紝鍐嶅埄鐢?br />W S A E n u m P r o t o c o l s鏌ヨ鐩綍鏉$洰浠ュ強(qiáng)閫氳繃W S A P R O TO C O L _ I N F O緇撴瀯錛屾妸鍑芥暟鎶曢掑埌W S A S o c k e t銆備笅涓绔狅紝鎴戜滑灝嗚繘涓姝ユ帰璁ㄥ悇涓昏鍗忚鐨勫畾鍧鏂規(guī)硶銆?/p>
聽
瑕佽浣忕殑涓涓噸鐐規(guī)槸錛屽皢鍛藉悕綆¢亾浣滀負(fù)涓縐嶇綉緇滅紪紼嬫柟妗堜嬌鐢ㄦ椂錛屽畠瀹為檯涓婂緩绔嬩竴涓畝鍗曠殑瀹㈡埛鏈猴紡鏈嶅姟鍣ㄦ暟鎹氫俊浣撶郴錛屽彲鍦ㄥ叾涓彲闈犲湴浼犺緭鏁版嵁銆?br />4.1.1 鍛藉悕綆¢亾鍛藉悕瑙勮寖鍛藉悕綆¢亾鐨勬爣璇嗘槸閲囩敤U N C鏍煎紡榪涜鐨勶細(xì)
\ \ s e r v e r \ P i p e \ [ p a t h ] n a m e
涓婅堪瀛椾覆鍙垎涓轟笁閮ㄥ垎鏉ヨ鐪嬶細(xì) \ \ s e r v e r銆乗 P i p e鍜孿 [ p a t h ] n a m e銆傜涓閮ㄥ垎\ \ s e r v e r鎸囧畾涓涓湇鍔″櫒鐨勫悕瀛椼傚懡鍚嶇閬撲究鏄湪閭d釜鏈嶅姟鍣ㄤ笂鍒涘緩鐨勶紝鑰屼笖瑕佺敱瀹冨榪涘叆鐨勮繛鎺ヨ姹傝繘琛屸滅洃鍚濄傜浜岄儴鍒哱 P i p e鏄竴涓笉鍙彉鍖栫殑鈥滅‖緙栫爜鈥濆瓧涓詫紙蹇呴』鍘熸牱鐓у綍錛屼絾涓嶇敤鍖哄垎澶у皬鍐欙級錛岀敤浜庢寚鍑鴻鏂囦歡浠庡睘浜嶯 P F S銆傝岀涓夐儴鍒哱 [ p a t h ] n a m e鍒欎嬌搴旂敤紼嬪簭鍙互鈥滃敮涓鈥濆畾涔?br />鍙?qiáng)鏍囧畾涓涓懡鍚嶇閬撶殑鍚嶅瓧錛岃屼笖鍙湪榪欓噷璁劇疆澶氱駭鐩綍銆?/p>
4.1.2 瀛楄妭妯″紡鍙?qiáng)娑堟伅妯″?br />鍛藉悕綆¢亾鎻愪緵浜嗕袱縐嶅熀鏈氫俊妯″紡錛氬瓧鑺傛ā寮忓拰娑堟伅妯″紡銆?/p>
鍛藉悕綆¢亾鏈嶅姟鍣ㄥ簲鐢ㄥ彧鑳藉湪Windows NT鎴朩indows 2000涓婂伐浣溾斺擶indows 95鍜學(xué)indows 98 涓嶅厑璁稿簲鐢ㄧ▼搴忓垱寤哄懡鍚嶇閬擄紒
4.2.2 楂樼駭鏈嶅姟鍣ㄧ殑緇嗚妭
鍦ㄥ墠闈㈢殑紼嬪簭娓呭崟4 - 1涓紝鎴戜滑灞曠ず浜嗗浣曡璁′竴涓懡鍚嶇閬撴湇鍔″櫒搴旂敤錛屼護(hù)鍏跺彧璐熻矗瀵逛竴涓閬撳疄渚嬬殑鎺у埗銆傛墍鏈堿 P I璋冪敤閮介噰鐢ㄥ悓姝ユā寮忓伐浣溿傚湪榪欑妯″紡涓嬶紝姣忎釜璋冪敤閮戒細(xì)涓鐩寸瓑鍒癐 / O璇鋒眰瀹屾垚錛屾墠浼?xì)杩斿洖銆傚懡鍚嶇閬撴湇鍔″櫒涔熻兘鎷ユ湁澶氫釜綆¢亾瀹炰緥錛屾墍浠ュ鎴鋒満鑳藉寤虹珛
鍚屾湇鍔″櫒鐨勪袱涓垨鏇村鐨勮繛鎺ワ紱綆¢亾瀹炰緥鐨勬暟閲忚鍙楀埌C r e a t e N a m e d P i p e榪欎釜A P I璋冪敤涔媙 M a x I n s t a n c e s鍙傛暟鎸囧畾鐨勬暟瀛楃殑闄愬埗銆傝鎯沖悓鏃舵帶鍒朵笉姝竴涓殑綆¢亾瀹炰緥錛屾湇鍔″櫒蹇呴』鑰冭檻浣跨敤澶氫釜綰跨▼錛屾垨鑰呬嬌鐢ㄥ紓姝in32 I/O鏈哄埗錛堟瘮濡傞噸鍙犲紡I / O浠ュ強(qiáng)瀹屾垚绔彛絳夛級錛屽垎鍒負(fù)姣忎釜綆¢亾瀹炰緥鎻愪緵鏈嶅姟銆?/p>
閲囩敤寮傛I / O鏈哄埗錛屾湇鍔″櫒鍙粠鍗曠嫭涓涓簲鐢ㄧ▼搴忕嚎紼嬩腑錛屽悓鏃朵負(fù)鎵鏈夌
閬撳疄渚嬫彁渚涙湇鍔°傚湪姝わ紝鎴戜滑灝嗚В閲婂浣曚嬌鐢ㄧ嚎紼嬩互鍙?qiáng)閲嶅彔寮廔 / O錛屾潵寮鍙戞洿楂樼駭鐨勬湇鍔″櫒搴旂敤銆?
1 . 綰跨▼
瑕佹兂寮鍙戜竴涓珮綰ф湇鍔″櫒錛屼護(hù)鍏朵嬌鐢ㄧ嚎紼嬶紝鍚屾椂鏀寔澶氫釜綆¢亾瀹炰緥錛屾暣涓繃紼嬫槸闈炲父綆鍗曠殑銆傛垜浠鍋氱殑鍞竴浜嬫儏渚挎槸涓烘瘡涓閬撳疄渚嬮兘鍒涘緩涓涓嚎紼?
2. 閲嶅彔寮廔 / O
閲嶅彔寮廔 / O鏄竴縐嶇壒孌婄殑杈撳叆錛忚緭鍑烘満鍒訛紝鍏佽Win32 API鍑芥暟錛堝R e a d F i l e鍜學(xué)r i t e F i l e錛夊湪鍙戝嚭I / O璇鋒眰涔嬪悗錛屼互寮傛鏂瑰紡宸ヤ綔銆傚叿浣撶殑宸ヤ綔鍘熺悊鏄細(xì)鍚戣繖浜汚 P I鍑芥暟浼犻掍竴涓狾 V E R L A P P E D
錛堥噸鍙犲紡錛夌粨鏋勶紝鐒跺悗浣跨敤A P I鍑芥暟G e t O v e r l a p p e d R e s u l t錛屼粠鍘熸潵閭d釜O V E R L A P P E D緇撴瀯涓紝鍙栧緱涓嬈 / O璇鋒眰鐨勭粨鏋溿傚鏋滃湪浣跨敤閲嶅彔寮忕粨鏋勭殑鍓嶆彁涓嬶紝璋冪敤涓涓猈in32 API鍑芥暟錛岄偅涔堣皟鐢ㄦ棤璁哄浣曢兘浼?xì)绔嬪崒櫩斿洖锛?/p>
3. 瀹夊叏妯℃嫙
涔嬫墍浠ヤ細(xì)閫夋嫨鍛藉悕綆¢亾浣滀負(fù)鑷繁鐨勭綉緇滅紪紼嬫柟妗堬紝涓涓渶濂界殑鐞嗙敱渚挎槸瀹冧滑渚濊禆浜嶹indows NT鍙?qiáng)Windows 2000鐨勫畨鍏ㄦ満鍒訛紝W(xué)indows NT鍜學(xué)indows 2000瀹夊叏鏈哄埗鍏鋒湁鈥滄ā鎷熲濊兘鍔涳紝鍏佽涓涓懡鍚嶇閬撴湇鍔″櫒
搴旂敤鍦ㄥ鎴鋒満鐨勫畨鍏ㄧ幆澧冧腑鎵ц銆傛墽琛屼竴涓懡鍚嶇閬撴湇鍔″櫒搴旂敤鏃訛紝瀹冮氬父浼?xì)鍦ㄧ敤浜庡惎鍔ㄨ搴旂敤鐨勯偅涓獦q涚▼鐨勫畨鍏ㄧ幆澧冭鍙駭鍒笂宸ヤ綔銆備緥濡傦紝鍋囧鎷ユ湁綆$悊鍛樻潈闄愮殑鏌愪漢鍚姩浜嗕竴涓懡鍚嶇閬撴湇鍔″櫒錛屾湇鍔″櫒渚挎湁鏉冭闂甒indows NT鎴朩indows 2000緋葷粺涓婄殑鍑犱箮浠諱綍璧勬簮銆傛鏃訛紝鍋囧鍦– r e a t e N a m e d P i p e涓寚瀹氱殑S E C U R I T Y _ D E S C R I P TO R緇撴瀯鍏佽鎵鏈夌敤鎴瘋闂繖涓?br />鍛藉悕綆¢亾錛屽氨浼?xì)鍩嬩笅鏋佸ぇ鐨勫畨鍏ㄩ殣鎮(zhèn)c?/p>
4.5 灝忕粨
鏈珷鍚戝ぇ瀹朵粙緇嶄簡鍛藉悕綆¢亾緗戠粶緙栫▼鎶鏈紝瀹冧負(fù)鎴戜滑寤虹珛浜嗕竴涓畝鍗曠殑瀹㈡埛鏈猴紡鏈嶅姟鍣ㄦ暟鎹氫俊浣撶郴錛屽彲紜繚鏁版嵁榪涜鍙潬浼犺緭銆傛帴鍙d緷璧栦簬Wi n d o w s閲嶅畾鍚戝櫒錛屼互渚塊氳繃涓涓綉緇滄潵浼犻佹暟鎹傚鍛戒護(hù)綆¢亾鑰岃█錛屽畠鏈澶х殑涓欏瑰ソ澶勪究鏄洿鎺ュ埄鐢ㄤ簡Windows NT鍙?qiáng)Wi n d o w s2 0 0 0鐨勫畨鍏ㄦ満鍒訛紝璇ユ満鍒舵槸鏈功璁插埌鐨勫叾浠栫綉緇滄妧鏈潎涓嶅叿澶囩殑涓欏瑰ソ澶勶紒涓嬮潰絎簩閮ㄥ垎灝嗗悜澶у娣卞叆璁茶ВWi n s o c k鎶鏈紝浠ヤ究搴旂敤紼嬪簭鍒╃敤涓縐嶇綉緇滀紶杈撳崗璁紝榪涜鈥滅洿鎺モ濋氫俊銆?/p>
闅忓悗錛屾垜浠瑙d簡M U P濡備綍璋冪敤涓涓綉緇滄彁渚涜咃紝浠庤屾彮紺哄嚭鎬庢牱閫氳繃涓涓噸瀹氬悜鍣紝鍦ㄢ滄湇鍔″櫒娑堟伅鍧椻濓紙Server Message Block, SMB錛夊崗璁殑甯姪涓嬶紝鍦ㄤ笉鍚岀殑璁$畻鏈轟箣闂村緩绔嬫暟鎹氫俊銆?/p>
鏈鍚庯紝鎴戜滑鎺㈣浜嗙綉緇滃畨鍏ㄦ柟闈㈢殑涓浜涢棶棰樸備嬌鐢ㄥ熀鏈殑鏂囦歡I / O鎿嶄綔錛岄氳繃緗戠粶鏉ヨ闂枃浠舵椂錛岃繖浜涘畨鍏ㄩ棶棰樻槸蹇呴』鑰冭檻鍒扮殑銆?/p>
2.1 閫氱敤鍛藉悕瑙勮寖
鈥淯 N C璺緞鈥? 涓虹綉緇滄枃浠跺強(qiáng)璁懼鐨勮闂緩绔嬩簡涓濂楃粺涓鐨勮鑼冦傚畠鏈澶х殑鐗圭偣渚挎槸涓嶅繀鎸囧畾鎴栧紩鐢ㄤ竴涓凡鏄犲皠鍒拌繙紼嬫枃浠剁郴緇熺殑鏈湴椹卞姩鍣ㄥ瓧姣嶃?/p>
U N C鍚嶅瓧瀹屽叏瑙e喅浜嗚繖浜涢棶棰橈紝瀹冪殑鏍煎紡濡備笅錛?br />\ \ [鏈嶅姟鍣╙ \ [鍏變韓鍚峕 \ [璺緞]
絎竴閮ㄥ垎鏄痋 \ [鏈嶅姟鍣╙錛屽繀欏諱互涓や釜鍙嶆枩鏉犲紑澶達(dá)紝绱ц窡鐫涓涓湇鍔″櫒鍚嶅瓧銆?br />絎簩閮ㄥ垎鏄痋 [鍏變韓鍚峕錛屽畠瀵瑰簲鐫榪滅▼鏈嶅姟鍣ㄤ笂鐨勪竴涓滃叡浜叆鍙b濇垨鑰呪滃叡浜綅緗濄?br />銆傝岀涓夐儴鍒哱 [璺緞] 瀵瑰簲鐨勬槸鍏變韓浣嶇疆涓嬬殑鏌愪釜鍏蜂綋鐩綍錛堟垨瀛愮洰褰曪級
絎?绔犻偖妲?/p>
涓縐嶇畝鍗曠殑鍗曞悜鈥滆繘紼嬮棿閫氫俊鈥濓紙interprocess communication,I P C錛夋満鍒躲傝繖涓満鍒剁殑鍚嶅瓧闈炲父鍙ゆ紝鍙綔鈥滈偖妲解濓紙M a i l s l o t錛夈傜敤鏈綆鍗曠殑璇濇潵璇達(dá)紝閫氳繃
閭Ы錛屽鎴鋒満榪涚▼鍙皢娑堟伅浼犻佹垨騫挎挱緇欎竴涓垨澶氫釜鏈嶅姟鍣ㄨ繘紼嬨傚湪鍚屼竴鍙拌綆楁満鐨勪笉鍚岃繘紼嬩箣闂達(dá)紝鎴栧湪璺ㄨ秺鏁翠釜緗戠粶鐨勪笉鍚岃綆楁満鐨勮繘紼嬩箣闂達(dá)紝鍗忓姪榪涜娑堟伅鐨勪紶杈撱傜敤閭Ы鏉ュ紑鍙戝簲鐢ㄧ▼搴忔槸涓浠墮潪甯哥畝鍗曠殑浜嬫儏錛屼笉瑕佹眰瀵筎 C P / I P鎴朓 P X榪欐牱鐨勫熀灞傜綉緇滀紶閫佸崗璁湁鐫闈炲父娣卞叆鐨勪簡瑙c傜敱浜庨偖妲芥槸鍥寸粫涓涓箍鎾氫俊浣撶郴璁捐鍑烘潵鐨勶紝鎵浠ュ綋鐒朵笉鑳芥寚鏈涜兘閫氳繃瀹冨疄鐜版暟鎹殑鈥滃彲闈犫濅紶杈撱?/p>
閭Ы鏈澶х殑涓涓己鐐逛究鏄彧鍏佽浠庡鎴鋒満鍒版湇鍔″櫒錛屽緩绔嬩竴縐嶄笉鍙潬鐨勫崟鍚戞暟鎹氫俊銆?br />鑰屽彟涓鏂歸潰錛岄偖妲芥渶澶х殑涓涓紭鐐瑰湪浜庯紝瀹冧滑浣垮鎴鋒満搴旂敤鑳藉闈炲父瀹規(guī)槗鍦板皢騫挎挱娑堟伅鍙戦佺粰涓涓垨澶氫釜鏈嶅姟鍣ㄥ簲鐢ㄣ?/p>
3.1 閭Ы瀹炴柦緇嗚妭
閭Ы鏄洿緇昗i n d o w s鏂囦歡緋葷粺鎺ュ彛璁捐鍑烘潵鐨勩傚鎴鋒満鍜屾湇鍔″櫒搴旂敤闇瑕佷嬌鐢ㄦ爣鍑嗙殑Wi n 3 2鏂囦歡緋葷粺I / O錛堣緭鍏ワ紡杈撳嚭錛夊嚱鏁幫紝姣斿R e a d F i l e鍜學(xué)r i t e F i l e絳夌瓑錛屼互渚垮湪閭Ы涓婃敹鍙戞暟鎹紝鍚屾椂鍒╃敤Wi n 3 2鏂囦歡緋葷粺鐨勫懡鍚嶈鍒欍傞偖妲藉繀欏諱緷璧朩i n d o w s閲嶅畾鍚戝櫒錛岄氳繃涓涓滈偖妲芥枃浠剁郴緇熲濓紙Mailslot File System, MSFS錛夛紝鏉ュ垱寤哄強(qiáng)鏍囪瘑閭Ы銆?/p>
3.1.1 閭Ы鐨勫悕瀛?br />瀵歸偖妲借繘琛屾爣璇嗘椂錛岄渶閬靛畧涓嬭堪鍛藉悕瑙勫垯錛?br />\ \ s e r v e r \ M a i l s l o t \ [ p a t h ] n a m e
璇峰皢涓婅堪瀛椾覆鍒嗕負(fù)涓夋鏉ョ湅錛?\ \ s e r v e r銆乗 M a i l s l o t鍜孿 [ p a t h ] n a m e銆傜涓閮ㄥ垎\ \ s e r v e r瀵瑰簲浜庢湇鍔″櫒鐨勫悕瀛楋紝鎴戜滑瑕佸湪涓婇潰鍒涘緩閭Ы錛屽茍鍦ㄥ湪涓婇潰榪愯鏈嶅姟鍣ㄧ▼搴忋傜浜岄儴鍒哱 M a i l s l o t鏄竴涓滅‖緙栫爜鈥濈殑鍥哄畾瀛椾覆錛岀敤浜庡憡璇夌郴緇熻繖涓枃浠跺悕浠庡睘浜嶮 S F S銆傝岀涓夐儴鍒哱 [ p a t h ] n a m e鍒?br />鍏佽搴旂敤紼嬪簭鐙竴鏃犱簩鍦板畾涔夊強(qiáng)鏍囪瘑涓涓偖妲藉悕銆傚叾涓紝鈥減 a t h鈥濅唬琛ㄨ礬寰勶紝鍙寚瀹氬綰х洰褰曘?br />涓句釜渚嬪瓙鏉ヨ錛屽涓涓偖妲借繘琛屾爣璇嗘椂錛屼笅闈㈣繖浜涘艦寮忕殑鍚嶅瓧閮芥槸鍚堟硶鐨勶紙娉ㄦ剰M a i l s l o t涓嶅緱鍙樺寲錛屽繀欏誨師鏂囩収杈擄紝浜﹀嵆鎵璋撶殑鈥滅‖緙栫爜鈥濓級錛?br />鐢變簬閭Ы瑕佷緷璧朩i n d o w s鏂囦歡緋葷粺鏈嶅姟鍦ㄧ綉涓婃潵鍒涘緩鍜屼紶杈撴暟鎹紝鎵浠ユ帴鍙f槸鈥滀笌鍗忚鏃犲叧鈥濈殑銆?br />瑕佹兂淇濊瘉鍚勭Wi n d o w s騫沖彴涔嬮棿鑳藉瀹屽叏姝e父鍦伴氫俊錛屽己鐑堝緩璁皢娑堟伅闀垮害闄愬埗鍦? 2 4瀛楄妭錛屾垨鑰呮洿鐭傚鏋滆繘琛岄潰鍚戣繛鎺ョ殑浼犺緭錛屽彲鑰冭檻浣跨敤鍛藉悕綆¢亾錛岃屼笉鏄畝鍗曠殑閭Ы銆?/p>
3.5 灝忕粨
鏈珷璁茶В浜嗛偖妲斤紙 M a i l s l o t錛夌綉緇滅紪紼嬫妧鏈傚埄鐢ㄨ繖涓鎶鏈紝搴旂敤紼嬪簭鍙互鍦╓i n d o w s閲嶅畾鍚戝櫒鐨勫府鍔╀笅錛屽疄鐜扮畝鍗曠殑鍗曞悜榪涚▼闂存暟鎹氫俊銆傚閭Ы鏉ヨ錛屽畠鏈鏈変環(huán)鍊肩殑涓欏瑰姛鑳戒究鏄氳繃緗戠粶錛屽皢涓鏉℃秷鎭箍鎾粰涓鍙版垨澶氬彴璁$畻鏈恒傜劧鑰岋紝閭Ы騫舵湭鎻愪緵瀵規(guī)暟鎹彲闈犱紶杈撶殑淇濋殰銆傚亣濡傚笇鏈涚敤Wi n d o w s閲嶅畾鍚戝櫒瀹炵幇鈥滃彲闈犫濈殑鏁版嵁閫氫俊錛岃鑰冭檻浣跨敤鍛藉悕綆¢亾錛岃繖鏄笅涓绔犵殑涓婚錛?/p>
netBIOS鍚嶅瓧
鍦╓i n 3 2鐜涓紝閽堝姣忎釜鍙敤鐨凩 A N A緙栧彿錛屾瘡
涓繘紼嬮兘浼?xì)湄?fù)鍏剁淮鎸佷竴寮燦 e t B I O S鍚嶅瓧琛ㄣ傝嫢涓篖ANA 0澧炴坊涓涓悕瀛楋紝鎰忓懗鐫浣犵殑搴旂敤紼嬪簭
鍙兘鍦↙ANA 0涓婂悓瀹㈡埛鏈哄緩绔嬭繛鎺ャ傚姣忎釜L A N A鏉ヨ錛岃兘澶熸坊鍔犵殑鍚嶅瓧鐨勬渶澶ф暟閲忔槸2 5 4錛?br />緙栧彿浠?鍒? 5 4錛?鍜? 5 5鐢辯郴緇熶繚鐣欙級
錛孨 e t B I O S鍚嶅瓧鍏辨湁涓や釜鎬ц川錛氬敮涓鍚嶅瓧鍜岀粍鍚?br />寰蔣緗戠粶涓殑鏈哄櫒鍛藉悕灝辨槸NetBIOS鍛藉悕銆?br />鈥滅粍鍚嶁濈殑浣滅敤鏄皢鏁版嵁鍚屾椂鍙戠粰澶氫釜鎺ユ敹鑰咃紱鎴栬呯浉鍙嶏紝鎺ユ敹鍙戠粰澶氫釜
鎺ユ敹鑰呯殑鏁版嵁銆傜粍鍚嶅茍闈炰竴瀹氳鈥滅嫭涓鏃犱簩鈥濓紝瀹冧富瑕佺敤浜庡鎾紙澶氱偣鍙戦侊級鏁版嵁閫氫俊
鑻ユ湁鈥渨indows浜掕仈緗戝懡鍚嶆湇鍔″櫒鈥濆嵆wins錛屽垯鏈夊畠綆$悊錛岃嫢鏃犲垯鍙戝箍鎾帰嫻嬫槸鍚﹂噸鍚嶃?/p>
1.1.3 NetBIOS鐗規(guī)?/p>
N e t B I O S鍚屾椂鎻愪緵浜嗏滈潰鍚戣繛鎺モ濇湇鍔′互鍙?qiáng)鈥滄棤榪炴帴鈥濇湇鍔°?/p>
1.2 NetBIOS緙栫▼鍩虹
NetBIOS API鐨勮緗紝鍙湁涓涓嚱鏁幫細(xì)
UCHAR Netbios(PNCB pNCB);
鐢ㄤ簬N e t B I O S鐨勬墍鏈夊嚱鏁板0鏄庛佸父鏁扮瓑絳夊潎鏄湪澶存枃浠禢 b 3 0 . h鍐呭畾涔夌殑銆傝嫢鎯寵繛鎺?br />N e t B I O S搴旂敤錛屽敮涓闇瑕佺殑搴撴槸N e t a p i 3 2 . l i b銆?br />璋冪敤N e t b i o s鍑芥暟鏃訛紝鍙夋嫨榪涜鍚屾璋冪敤錛岃繕鏄繘琛屽紓姝ヨ皟鐢ㄣ傛墍鏈塏 e t B I O S鍛戒護(hù)鏈韓鍧囨槸鍚屾鐨勩傝鎯沖紓姝ヨ皟鐢ㄤ竴涓懡浠わ紝闇瑕佽N e t B I O S鍛戒護(hù)鍚孉 S Y N C H鏍囧織榪涜涓嬈¢昏緫O R錛堟垨錛夎繍綆椼傚鎸囧畾浜咥 S Y N C H鏍囧織錛岄偅涔堝繀欏誨湪n c b _ p o s t瀛楁涓寚瀹氫竴涓悗渚嬬▼錛圥ost Routine錛夛紝鎴栧繀欏誨湪n c b _e v e n t瀛楁涓寚瀹氫竴涓簨浠跺彞鏌勩傛墽琛屼竴涓紓姝ュ懡浠ゆ椂錛屼粠N e t b i o s榪斿洖鐨勫兼槸N R C _ G O O D R E T( 0 x 0 0 )錛屼絾n c b _ c m d _ c p l t瀛楁浼?xì)璁句负N R C _ P E N D I N G ( 0 x F F )銆傞櫎姝や互澶栵紝 N e t b i o s鍑芥暟榪樹細(xì)灝哊 C B緇撴瀯鐨刵 c b _ c m d _ c p l t瀛楁璁句負(fù)N R C _ P E N D I N G錛堝緟鍐籌級錛岀洿鍒板懡浠ゅ畬鎴愪負(fù)姝€傚懡浠ゅ畬鎴愬悗錛宯 c b _ c m d _ c p l t瀛楁浼?xì)璁句给櫙ュ懡渥o(hù)鐨勮繑鍥炲箋侼 e t b i o s涔熶細(xì)鍦ㄥ畬鎴愬悗灝唍 c b _ r e t c o d e瀛楁璁句負(fù)鍛戒護(hù)鐨勮繑鍥炲箋?br />
1.4 鏁版嵁鎶ョ殑宸ヤ綔鍘熺悊
鈥滄暟鎹姤鈥濓紙D a t a g r a m錛夊睘浜庝竴縐嶁滄棤榪炴帴鈥濈殑閫氫俊鏂規(guī)硶銆備綔涓哄彂閫佹柟錛屽彧闇鐢ㄧ洰鏍?br />N e t B I O S鍚嶅瓧涓哄彂鍑虹殑姣忎釜鍖呭畾鍧錛岀劧鍚庣畝鍗曞湴閫佸嚭浜嗕簨銆傛鏃訛紝涓嶄細(xì)鎵ц浠諱綍媯(gè)鏌ワ紝浠ョ‘
淇濇暟鎹殑瀹屾暣鎬с佹姷杈鵑『搴忔垨鑰呬紶杈撶殑鍙潬鎬х瓑絳夈?/p>
鍙戝嚭涓涓暟鎹姤鍏辨湁涓夌鏂瑰紡銆?br />絎竴縐嶆槸鎸囨尌鏁版嵁鎶ユ姷杈句竴涓壒瀹氱殑錛堟垨鍞竴鐨勶級緇勫悕銆傝繖鎰忓懗鐫鍙兘鏈変竴涓繘紼嬭礋璐f暟鎹姤鐨勬帴鏀垛斾害鍗蟲敞鍐屼簡鐩爣鍚嶅瓧鐨勯偅涓繘紼嬨?br />絎簩縐嶆槸灝嗘暟鎹姤鍙戠粰涓涓粍鍚嶃傚彧鏈夋敞鍐屼簡鎸囧畾緇勫悕鐨勯偅浜涜繘紼嬫墠鏈夋潈鎺ユ敹娑堟伅銆?br />鏈鍚庯紝絎笁縐嶆柟寮忔槸灝嗘暟鎹姤騫挎挱鍒版暣涓綉緇溿?/p>