锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品mv在线观看,欧美日韩伦理在线免费,亚洲精品国产视频http://www.shnenglu.com/jack-wang/category/10924.html灝忕帇zh-cnTue, 28 Mar 2023 17:59:32 GMTTue, 28 Mar 2023 17:59:32 GMT60闈瀊oost鐗堟湰鐨刟sio鏃犳硶璇嗗埆asio::placeholders::error鍜宐oost::system::error_codehttp://www.shnenglu.com/jack-wang/archive/2023/03/28/229784.html灝忕帇灝忕帇Tue, 28 Mar 2023 03:01:00 GMThttp://www.shnenglu.com/jack-wang/archive/2023/03/28/229784.htmlhttp://www.shnenglu.com/jack-wang/comments/229784.htmlhttp://www.shnenglu.com/jack-wang/archive/2023/03/28/229784.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/229784.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/229784.html鏀圭敤
std::placeholders::_1

boost::system::error_code
鏀圭敤
std::error_code

O浜?img src ="http://www.shnenglu.com/jack-wang/aggbug/229784.html" width = "1" height = "1" />

灝忕帇 2023-03-28 11:01 鍙戣〃璇勮
]]>
libevent 鏃犳硶瑙f瀽鐨勫閮ㄧ鍙?__imp__WSASendhttp://www.shnenglu.com/jack-wang/archive/2016/05/04/213417.html灝忕帇灝忕帇Wed, 04 May 2016 08:27:00 GMThttp://www.shnenglu.com/jack-wang/archive/2016/05/04/213417.htmlhttp://www.shnenglu.com/jack-wang/comments/213417.htmlhttp://www.shnenglu.com/jack-wang/archive/2016/05/04/213417.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/213417.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/213417.html

灝忕帇 2016-05-04 16:27 鍙戣〃璇勮
]]>
UDT鍗忚-鍩轟簬UDP鐨勫彲闈犳暟鎹紶杈撳崗璁?http://www.shnenglu.com/jack-wang/archive/2010/04/13/112470.html灝忕帇灝忕帇Tue, 13 Apr 2010 09:14:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/04/13/112470.htmlhttp://www.shnenglu.com/jack-wang/comments/112470.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/04/13/112470.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/112470.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/112470.html杞細http://blog.csdn.net/windcsn/archive/2006/01/04/570242.aspx

1.   浠嬬粛
闅忕潃緗戠粶甯﹀鏃跺歡浜у搧(BDP)鐨勫鍔狅紝閫氬父鐨凾CP鍗忚寮濮嬪彉鐨勪綆鏁堛傝繖鏄洜涓哄畠鐨凙IMD錛坅dditive increase multiplicative decrease錛夌畻娉曞交搴曞噺灝戜簡TCP鎷ュ紿楀彛錛屼絾涓嶈兘蹇熺殑鎭㈠鍙敤甯﹀銆傜悊璁轟笂鐨勬祦閲忓垎鏋愯〃鏄嶵CP鍦˙DP澧炲姞鍒板緢楂樼殑鏃跺欐瘮杈冨鏄撳彈鍖呮崯澶辨敾鍑匯?/p>

鍙﹀錛岀戶鎵胯嚜TCP鎷ュ鎺у埗鐨勪笉鍏鉤鐨凴TT涔熸垚涓哄湪鍒嗗竷寮忔暟鎹瘑闆嗙▼搴忎腑鐨勪弗閲嶉棶棰樸傛嫢鏈変笉鍚孯TT鐨勫茍鍙慣CP嫻佸皢涓嶅叕騫沖湴鍒嗕韓甯﹀銆傚敖綆″湪灝忕殑BDP緗戠粶涓嬌鐢ㄩ氬父鐨凾CP瀹炵幇鏉ョ浉瀵瑰鉤絳夌殑鍏變韓甯﹀錛屼絾鍦ㄦ嫢鏈夊ぇ閲廈DP鐨勭綉緇滀腑錛岄氬父鐨勫熀浜嶵CP鐨勭▼搴忓氨蹇呴』鎵垮彈涓ラ噸鐨勪笉鍏鉤鐨勯棶棰樸傝繖涓猂TT鍩轟簬鐨勭畻娉曚弗閲嶇殑闄愬埗浜嗗叾鍦ㄥ箍鍩熺綉鍒嗗竷寮忚綆楃殑鏁堢巼錛屼緥濡傦細internet涓婄殑緗戞牸璁$畻銆?/p>

涓鐩村埌浠婂ぉ錛屽鏍囧噯鐨凾CP鐨勬彁楂樹竴鐩撮兘涓嶈兘鍦ㄩ珮BDP鐜涓晥鐜囧拰鍏鉤鎬ф柟闈㈣揪鍒版弧鎰忕殑紼嬪害錛堢壒鍒槸鍩轟簬RTT鐨勯棶棰橈級銆備緥濡傦細TCP鐨勪慨鏀癸紝RFC1423錛堥珮鎬ц兘鎵╁睍錛夛紝RFC2018錛圫ACK錛夈丷FC2582錛圢ew Reno錛夈丷FC2883錛圖-SACK錛夈佸拰RFC2988錛圧TO璁$畻錛夐兘鎴栧鎴栧皯鐨勬彁楂樹簡鐐規晥鐜囷紝浣嗘渶鏍規湰鐨凙IMD綆楁硶娌℃湁瑙e喅銆侶S TCP錛圧FC 3649錛夐氳繃鏍規湰涓婃敼鍙楾CP鎷ュ鎺у埗綆楁硶鏉ュ湪楂楤DP緗戠粶涓幏寰楅珮甯﹀鍒╃敤鐜囷紝浣嗗叕騫蟲ч棶棰樹粛鐒跺瓨鍦ㄣ?/p>

鑰冭檻鍒頒笂闈㈢殑鑳屾櫙錛岄渶瑕佷竴縐嶅湪楂楤DP緗戠粶鏀寔楂樻ц兘鏁版嵁浼犺緭鐨勪紶杈撳崗璁傛垜浠帹鑽愪竴涓簲鐢ㄧ▼搴忕駭鍒殑浼犺緭鍗忚錛屽彨UDT鎴栧熀浜嶶DP鐨勬暟鎹紶杈撳崗璁茍鎷ユ湁鐢ㄥ鎺у埗綆楁硶銆?/p>

鏈枃鎻忚堪涓や釜姝d氦鐨勯儴鍒嗭紝UDP鍗忚鍜孶DT鎷ュ鎺у埗綆楁硶銆備竴涓簲鐢ㄥ眰綰у埆鐨勫崗璁紝浣嶄簬UDP涔嬩笂錛屼嬌鐢ㄥ叾浠栫殑鎷ュ綆楁硶錛岀劧鑰岃繖浜涙湰鏂囦腑鎻忚堪鐨勭畻娉曚篃鍙互鍦ㄥ叾浠栧崗璁腑瀹炵幇錛屼緥濡傦細TCP銆?/p>

涓涓崗璁殑鍙傝冨疄鐜板彨[UDT]錛涜緇嗙殑鎷ュ鎺у埗綆楁硶鐨勬ц兘鍒嗘瀽鍦╗GHG04]涓彲浠ユ壘鍒般?/p>

2.   璁捐鐩爣
UDT涓昏鐢ㄥ湪灝忔暟閲忕殑bulk婧愬叡浜瘜瑁曞甫瀹界殑鎯呭喌涓嬶紝鏈鍏稿瀷鐨勪緥瀛愬氨鏄緩绔嬪湪鍏夌氦騫垮煙緗戜笂鐨勭綉鏍艱綆楋紝涓浜涚爺絀舵墍鍦ㄨ繖鏍風殑緗戠粶涓婅繍琛屼粬浠殑鍒嗗竷寮忕殑鏁版嵁瀵嗛泦紼嬪簭錛屼緥濡傦紝榪滅▼璁塊棶浠櫒銆佸垎甯冨紡鏁版嵁鎸栨帢鍜岄珮鍒嗚鯨鐜囩殑澶氬獟浣撴祦銆?/p>

UDT鐨勪富瑕佺洰鏍囨槸鏁堢巼銆佸叕騫熾佺ǔ瀹氥傚崟涓殑鎴栧皯閲忕殑UDT嫻佸簲璇ュ埄鐢ㄦ墍鏈夐珮閫熻繛鎺ユ彁渚涚殑鍙敤甯﹀錛屽嵆浣垮甫瀹藉彉鍖栫殑寰堝墽鐑堛傚悓鏃訛紝鎵鏈夊茍鍙戠殑嫻佸繀欏誨叕騫沖湴鍏變韓甯﹀錛屼笉渚濊禆浜庝笉鍚岀殑甯﹀鐡跺姴銆佽搗濮嬫椂闂淬丷TT銆傜ǔ瀹氭ц姹傚寘鍙戦侀熺巼搴旇涓鐩翠細鑱氬彲鐢ㄥ甫瀹介潪甯稿揩錛屽茍涓斿繀欏婚伩鍏嶆嫢濉炵鎾炪?/p>

UDT騫朵笉鏄湪鐡跺姴甯﹀鐩稿杈冨皬鐨勫拰澶ч噺澶氬厓鐭枃浠舵祦鐨勬儏鍐典笅鐢ㄦ潵鍙栦唬TCP鐨勩?/p>

UDT涓昏浣滀負TCP鐨勬湅鍙嬶紝鍜孴CP騫跺瓨錛孶DT鍒嗛厤鐨勫甫瀹戒笉搴旇瓚呰繃鏍規嵁MAX-MIN瑙勫垯鐨勬渶澶ф渶灝忓叕騫沖叡浜師鍒欍傦紙澶囨敞錛屾渶澶ф渶灝忚鍒欏厑璁窾DT鍦ㄩ珮BDP榪炴帴涓嬪垎閰峊CP涓嶈兘浣跨敤鐨勫彲鐢ㄥ甫瀹斤級銆傛垜浠?/p>

3.   鍗忚璇存槑
3.1. 姒傝堪
UDT鏄弻宸ョ殑錛屾瘡涓猆DT瀹炰綋鏈変袱涓儴鍒嗭細鍙戦佸拰鎺ユ敹銆傚彂閫佽呮牴鎹祦閲忔帶鍒跺拰閫熺巼鎺у埗鏉ュ彂閫侊紙鍜岄噸浼狅級搴旂敤紼嬪簭鏁版嵁銆傛帴鏀惰呮帴鏀舵暟鎹寘鍜屾帶鍒跺寘錛屽茍鏍規嵁鎺ユ敹鍒扮殑鍖呭彂閫佹帶鍒跺寘銆傚彂閫佸拰鎺ユ敹紼嬪簭鍏變韓鍚屼竴涓猆DP绔彛鏉ュ彂閫佸拰鎺ユ敹銆?/p>

鎺ユ敹鑰呬篃璐熻矗瑙﹀彂鍜屽鐞嗘墍鏈夌殑鎺у埗浜嬩歡錛屽寘鎷嫢濉炴帶鍒跺拰鍙潬鎬ф帶鍒跺拰浠栦滑鐨勭浉瀵規満鍒訛紝渚嬪RTT浼拌銆佸甫瀹戒及璁°佸簲絳斿拰閲嶄紶銆?/p>

UDT鎬繪槸璇曠潃灝嗗簲鐢ㄥ眰鏁版嵁鎵撳寘鎴愬浐瀹氱殑澶у皬錛岄櫎闈炴暟鎹笉澶熻繖涔堝ぇ銆傚拰TCP鐩鎬技鐨勬槸錛岃繖涓浐瀹氱殑鍖呭ぇ灝忓彨鍋歁SS錛堟渶澶у寘澶у皬錛夈傜敱浜庢湡鏈沀DT鐢ㄦ潵浼犺緭澶у潡鏁版嵁嫻侊紝鎴戜滑鍋囧畾鍙湁寰堝皬鐨勪竴閮ㄥ垎涓嶈鍒欑殑澶у皬鐨勫寘鍦║DT session涓侻SS鍙互閫氳繃搴旂敤紼嬪簭鏉ュ畨瑁咃紝MTU鏄叾鏈浼樺鹼紙鍖呮嫭鎵鏈夊寘澶達級銆?/p>

UDT鎷ュ鎺у埗綆楁硶灝嗛熺巼鎺у埗鍜岀獥鍙o紙嫻侀噺鎺у埗錛夊悎騫惰搗鏉ワ紝鍓嶈呰皟鏁村寘鐨勫彂閫佸懆鏈燂紝鍚庤呴檺鍒舵渶澶х殑浣嶈搴旂瓟鐨勫寘銆傚湪閫熺巼鎺у埗涓嬌鐢ㄧ殑鍙傛暟閫氳繃甯﹀浼拌鎶鏈潵鏇存柊錛屽畠緇ф壙鏉ヨ嚜鍩轟簬鎺ユ敹鐨勫寘鏂規硶銆傚悓鏃訛紝閫熺巼鎺у埗鍛ㄦ湡鏄及璁TT鐨勫父閲忥紝嫻佹帶鍒跺弬鏁頒緷璧栦簬瀵規柟鐨勬暟鎹埌杈鵑熷害錛屽彟澶栨帴鏀剁閲婃斁鐨勭紦鍐插尯鐨勫ぇ灝忋?/p>


 


 


3.2. 鍖呯粨鏋?br>UDT鏈変袱縐嶅寘錛氭暟鎹寘鍜屾帶鍒跺寘銆備粬浠氳繃鍖呭ご鐨勭涓浣嶆潵鍖哄垎錛堟爣蹇椾綅錛夈傚鏋滄槸0錛岃〃紺烘槸鏁版嵁鍖咃紝1琛ㄧず鏄帶鍒跺寘銆?/p>

3.2.1.    鏁版嵁鍖?/p>

 


 

 

 


 


鏁版嵁鍖呯粨鏋勫涓嬫樉紺猴細

0                      1                  3                       4

0  1  2 3 4  5  6  7 8  9 0  1  2  3  4 5  6 7  8  9  0 1  2  3  4 5  6 7  8  9 0  1

0
 鍖呭簭鍙?br> 
搴旂敤鏁版嵁
 

鍖呭簭鍙鋒槸UDT鏁版嵁鍖呭ご涓敮涓鐨勫唴瀹廣傚畠鏄竴涓棤絎﹀彿鏁存暟錛屼嬌鐢ㄦ爣蹇椾綅鍚庣殑31浣嶏紝UDT浣跨敤鍖呭熀紜鐨勯渶瑕侊紝渚嬪錛屾瘡涓潪閲嶄紶鐨勫寘閮藉鍔犲簭鍙?銆傚簭鍙峰湪鍒拌揪鏈澶у?^31-1鐨勬椂鍊欒鐩栥傜揣璺熷湪榪欎簺鏁版嵁鍚庨潰鐨勬槸搴旂敤紼嬪簭鏁版嵁銆?/p>

3.2.2.    鎺у埗鍖?br>鎺у埗鍖呯粨鏋勫涓嬶細

0                      1                  3                       4

0  1  2 3 4  5  6  7 8  9 0  1  2  3  4 5  6 7  8  9  0 1  2  3  4 5  6 7  8  9 0  1

1
 綾誨瀷
 淇濈暀
 ACK搴忓彿
 
鎺у埗淇℃伅瀛楁
 

鏈?縐嶇被鍨嬬殑鎺у埗鍖呭湪UDT涓紝bit1-3琛ㄧず榪欎簺淇℃伅銆傚墠32浣嶅湪鍖呭ご涓繀欏誨瓨鍦ㄣ傛帶鍒朵俊鎭瓧孌靛寘鎷?錛堜緥濡傦紝瀹冧笉瀛樺湪錛夋垨鑰呭涓?2浣嶆棤絎﹀彿鏁存暟錛岃繖鐢卞寘綾誨瀷鍐沖畾銆?/p>

UDT浣跨敤搴旂瓟瀛愬簭鍙風殑鏂規硶銆傛瘡涓狝CK/ACK2鍖呮湁涓涓棤絎﹀彿鐨?6浣嶅簭鍙鳳紝瀹冪嫭绔嬩簬鏁版嵁鍖呴渶瑕併傚畠浣跨敤浣?6-31銆傚簲絳旈渶瑕佷粠0鍒幫紙2^16-1錛夈備綅16-31鍦ㄥ叾浠栨帶鍒跺寘涓病鏈夊畾涔夈?/p>

綾誨瀷
 璇存槑
 鎺у埗淇℃伅
 
000
 鍗忚榪炴帴鎻℃墜
 1錛?2浣?UDT鐗堟湰

2錛?2浣?鍐呴儴欏哄簭鍙?/p>

3錛?2浣?MSS錛堝瓧鑺傦級

4錛?2浣?鏈澶ф祦閲忕獥鍙eぇ灝忥紙瀛楄妭錛?/p>


 


 

 
001
 淇濇椿
 娌℃湁
 
010
 搴旂瓟錛屼綅16-31鏄簲絳斿簭鍙?br> 1錛?2浣嶅寘搴忓彿錛屽厛鍓嶆帴鏀跺埌鐨勫寘搴忓彿

2錛?2浣嶏紝RTT錛堝井縐掞級

3錛?2浣嶏紝RTT 鍙橀噺鎴栬匯TTVar (寰)

4錛?2浣嶏紝嫻侀噺紿楀彛澶у皬錛堝寘鐨勬暟閲忥級

5錛?2浣嶏紝榪炴帴瀹歸噺浼拌錛堟瘡縐掑寘鐨勬暟閲忥級
 
011
 Negative搴旂瓟錛圢AK錛?br> 涓㈠け淇℃伅鐨?2浣嶆暣鏁版暟緇勶紝瑙?.9鑺?br> 
100
 淇濈暀
 榪欑綾誨瀷鐨勬帶鍒朵俊鎭繚鐣欎綔涓烘嫢濉炶鍛婁嬌鐢紝浠庢帴鏀跺埌鍙戦佺銆備竴涓嫢濉炶鍛婅兘琚獷CN鎴栧寘寤惰繜澧炲姞瓚嬪娍鐨勫害閲忔柟娉曡Е鍙戙?br> 
101
 鍏抽棴
 
 


 

 
110
 搴旂瓟涓涓簲絳旓紙ACK2錛?br> 16-31浣嶏紝搴旂瓟搴忓彿銆?br> 
111
 4-15鐨勮В閲?br> 淇濈暀灝嗘潵浣跨敤
 

娉ㄦ剰錛屽浜庢暟鎹拰鎺у埗鍖呮潵璇達紝鍙互浠嶶DP鍗忚澶翠腑寰楀埌瀹為檯鐨勫寘澶у皬銆傚寘澶у皬淇℃伅鑳借鐢ㄦ潵寰楀埌鏈夋晥鐨勬暟鎹礋杞藉拰NAK鍖呬腑鐨勬帶鍒朵俊鎭瓧孌靛ぇ灝忋?/p>

3.3. 瀹氭椂鍣?br>UDT鍦ㄦ帴鏀剁浣跨敤4涓畾鏃跺櫒鏉ヨЕ鍙戜笉鍚岀殑鍛ㄦ湡浜嬩歡錛屽寘鎷熺巼鎺у埗銆佸簲絳斻佷涪澶辨姤鍛婏紙negative搴旂瓟錛夊拰閲嶄紶/榪炴帴緇存姢銆?/p>

UDT涓殑瀹氭椂鍣ㄤ嬌鐢ㄧ郴緇熸椂闂翠綔涓烘簮銆俇DT鎺ユ敹绔富鍔ㄦ煡璇㈢郴緇熸椂闂存潵媯鏌ヤ竴涓畾鏃跺櫒鏄惁榪囨湡銆傚浜庢煇涓畾鏃跺櫒T鏉ヨ錛屽叾鎷ユ湁鍛ㄦ湡TP錛屽皢瀹氬彉閲弔鐢ㄦ潵璁板綍鏈榪慣琚緗垨澶嶄綅鐨勬椂闂淬傚鏋淭鍦ㄧ郴緇熸椂闂磘0錛坱= t0錛夎澶嶄綅錛岄偅涔堜換浣晅1錛坱1-t>=TP錛夋槸T榪囨湡鐨勬潯浠躲?/p>

鍥涗釜瀹氭椂鍣ㄦ槸錛歊C瀹氭椂鍣ㄣ丄CK瀹氭椂鍣ㄣ丯AK瀹氭椂鍣ㄣ丒XP瀹氭椂鍣ㄣ備粬浠殑鍛ㄦ湡鍒嗗埆鏄細RCTP銆丄TP銆丯TP銆丒TP銆?/p>

RC瀹氭椂鍣ㄧ敤鏉ヨЕ鍙戝懆鏈熸х殑閫熺巼鎺у埗銆侫CK瀹氭椂鍣ㄧ敤鏉ヨЕ鍙戝懆鏈熸х殑鏈夐夋嫨鐨勫簲絳旓紙搴旂瓟鍖咃級銆俁CTP鍜孉TP鏄父閲忓鹼紝鍊間負錛歊CTP=ATP=0.01縐掋?/p>

NAK琚敤鏉ヨЕ鍙憂egative搴旂瓟錛圢AK鍖咃級銆傞噸浼犲畾鏃跺櫒琚敤鏉ヨЕ鍙戜竴涓暟鎹寘鐨勯噸浼犲拰緇存姢榪炴帴鐘舵併備粬浠懆鏈熶緷璧栦簬瀵逛簬RTT鐨勪及璁°侲TP鍊間篃渚濊禆浜庤繛緇璄XP鏃墮棿婧㈠嚭鐨勬鏁般傛帹鑽愮殑RTT鍒濆鍊兼槸0.1縐掞紝鑰孨TP鍜孍TP鐨勫垵濮嬪兼槸錛歂TP=3*RTT錛孍TP=3*RTT+ATP銆?/p>

鍦ㄦ瘡嬈ounded UDP鎺ユ敹鎿嶄綔錛堝鏋滄敹鍒頒竴涓猆DP鍖咃紝涓浜涢澶栫殑蹇呴』鐨勬暟鎹鐞嗘椂闂達級鏃舵煡璇㈢郴緇熸椂闂存潵媯鏌ュ洓涓畾鏃跺櫒鏄惁宸茬粡榪囨湡銆傛帹鑽愮殑鍛ㄦ湡綺掑害鏄井縐掋俇DP鎺ユ敹鏃墮棿婧㈠嚭鍊兼槸瀹炵幇鐨勪竴涓夋嫨錛岃繖渚濊禆浜庡驚鐜煡璇㈢殑璐熸媴鍜屼簨浠跺懆鏈熺簿紜害涔嬮棿鐨勬潈琛°?/p>

閫熺巼鎺у埗浜嬩歡鏇存柊鍖呭彂閫佸懆鏈燂紝UDT鍙戦佺浣跨敤STP鏉ュ畨鎺掓暟鎹寘鐨勫彂閫併傚亣瀹氫竴涓湪鏃墮棿t0琚彂閫侊紝閭d箞涓嬩竴嬈″寘鍙戦佹椂闂存槸錛坱0+ STP錛夈傛崲鍙ヨ瘽璇達紝濡傛灉鍓嶉潰鐨勫寘鍙戦佽姳璐逛簡t’鏃墮棿錛屽彂閫佺灝嗙瓑寰咃紙STP-t’錛夋潵鍙戦佷笅涓涓暟鎹寘錛堝鏋淪TP-t’ <0錛屽氨涓嶉渶瑕佺瓑寰呬簡錛夈傝繖涓瓑寰呴棿闅旈渶瑕佷竴涓珮綺劇‘搴︾殑瀹炵幇錛屾帹鑽愪嬌鐢–PU鏃墮挓鍛ㄦ湡綺掑害銆?/p>

3.4. 鍙戦佺綆楁硶
3.4.1.    鏁版嵁緇撴瀯鍜屽彉閲?br>A錛?SND PKT鍘嗗彶紿楀彛錛氫竴涓驚鐜暟緇勮褰曟瘡涓暟鎹寘鐨勫紑濮嬫椂闂?/p>

B錛?鍙戦佺涓㈠け閾捐〃錛氬彂閫佹涓㈠け鍒楄〃鏄竴涓繛鎺ラ摼琛紝鐢ㄦ潵瀛樺偍琚帴鏀舵柟NAK鍖呬腑榪斿洖鐨勪涪澶卞寘搴忓彿銆傝繖浜涙暟瀛椾互澧炲姞鐨勯『搴忓瓨鍌ㄣ?/p>

3.4.2.    鏁版嵁鍙戦佺畻娉?br>A錛?濡傛灉鍙戦佺鐨勪涪澶遍摼琛ㄦ槸闈炵┖鐨勶紝閲嶄紶絎竴涓湪list涓殑鍖咃紝騫跺垹闄よ鎴愬憳錛屽埌5銆?/p>

B錛?絳夊緟鏈夊簲鐢ㄧ▼搴忔暟鎹渶瑕佸彂閫?/p>

C錛?濡傛灉鏈簲絳旂殑鍖呮暟閲忚秴榪囦簡涓ら噺紿楀彛鐨勫ぇ灝忥紝杞埌1銆傚鏋滀笉鏄寘瑁呬竴涓柊鐨勫寘騫跺彂閫佸畠銆?/p>

D錛庡鏋滃綋鍓嶅寘鐨勫簭鍙鋒槸16n錛宯鏄竴涓暣鏁幫紝杞2姝ャ?/p>

E錛?鍦⊿ND PKT鍘嗗彶紿楀彛涓褰曞寘鐨勫彂閫佹椂闂?/p>

F錛?濡傛灉榪欐槸鑷笂嬈″彂閫侀熺巼闄嶄綆涔嬪悗鐨勭涓涓寘錛岀瓑澶朣YN鏃墮棿銆?/p>

G錛庣瓑澶栵紙STP – t錛夋椂闂達紝t鏄1鍒扮4姝ヤ箣闂寸殑鎬繪椂闂達紝鐒跺悗杞埌1銆?/p>

3.5. 鎺ユ敹绔畻娉?br>3.5.1.    鏁版嵁緇撴瀯鍜屽彉閲?br>A錛?鎺ユ敹绔涪澶遍摼琛細鏄竴涓猟uple榪炴帴閾捐〃錛屽厓绱犵殑鍊煎寘鎷細涓㈠け鏁版嵁鍖呯殑搴忓彿銆佹渶榪戜涪澶卞寘鐨勫弽棣堟椂闂村拰鍖呭凡緇忚鍙嶉鐨勬鏁般傚間互鍖呭簭鍙峰搴忕殑鏂瑰紡瀛樺偍銆?/p>

B錛?搴旂瓟鍘嗗彶紿楀彛錛氭瘡涓彂閫丄CK鐨勫拰鏃墮棿涓涓驚鐜暟緇勶紱鐢變簬鍏跺驚鐜殑鐗規э紝鎰忓懗鐫濡傛灉鏁扮粍涓病鏈夋洿澶氱┖闂寸殑鏃跺欐柊鐨勫煎皢瑕嗙洊鑰佺殑鍊箋?/p>

C錛?RCV PKT鍘嗗彶紿楀彛錛氫竴涓敤鏉ヨ褰曟瘡涓寘鍒拌揪鏃墮棿鐨勫驚鐜暟緇勩?/p>

D錛庡鍖呯獥鍙o細涓涓敤鏉ヨ褰曟瘡涓帰嫻嬪寘瀵逛箣闂寸殑鏃墮棿闂撮殧銆?/p>

E錛?LRSN錛氫竴涓敤鏉ヨ褰曟渶澶ф帴鏀舵暟鎹寘闇瑕佺殑鍙橀噺銆侺RSN琚垵濮嬪寲涓哄垵濮嬪簭鍙峰噺1銆?/p>

3.5.2.    鏁版嵁鎺ユ敹綆楁硶
A錛?鏌ヨ緋葷粺鏃墮棿鏉ユ鏌C銆丄CK銆丯AK銆佹垨EXP瀹氭椂鍣ㄦ槸鍚﹁繃鏈熴傚鏋滀換涓瀹氭椂鍣ㄨ繃鏈燂紝澶勭悊浜嬩歡錛堟湰鑺備笅闈粙緇嶏級騫跺浣嶈繃鏈熺殑瀹氭椂鍣ㄣ?/p>

B錛?鍚姩涓涓椂闂碽ounded UDP鎺ユ敹銆傚鏋滄瘡涓寘鍒幫紝杞?銆?/p>

C錛?璁劇疆exp-count涓?錛屽茍鏇存柊ETP涓猴細ETP=RTT+4*RTTVar + ATP銆?/p>

D錛庡鏋滄墍鏈夌殑鍙戦佹暟鎹寘宸茬粡琚簲絳旓紝澶嶄綅EXP鏃墮棿鍙橀噺銆?/p>

E錛?媯鏌ュ寘澶寸殑鏍囧織浣嶃傚鏋滄槸涓涓帶鍒跺寘錛屾牴鎹被鍨嬪鐞嗗畠錛岀劧鍚庤漿1銆?/p>

F錛?濡傛灉褰撳墠鏁版嵁鍖呯殑闇瑕佹槸16n+1錛宯鏄竴涓暣鏁幫紝璁板綍褰撳墠鍖呭拰涓婁釜鍦ㄥ鍖呯獥鍙d腑鏁版嵁鍖呯殑鏃墮棿闂撮殧銆?/p>

G錛庡湪PKT鍘嗗彶紿楀彛涓褰曞寘鍒拌揪鏃墮棿

H錛?濡傛灉褰撳墠鏁版嵁鍖呯殑搴忓彿澶т簬LRSN+1錛屽皢鎵鏈夊湪錛堜絾涓嶅寘鎷級榪欎袱涓間箣闂寸殑搴忓彿鏀懼叆鎺ユ敹涓㈠け閾捐〃錛屽茍鍦ㄤ竴涓狽AK鍖呬腑灝嗚繖浜涘簭鍙峰彂閫佺粰鍙戦佺銆傚鏋滃簭鍙峰皬浜嶭RSN錛屼粠鎺ユ敹涓㈠け閾捐〃涓垹闄ゅ畠銆?/p>

I錛?nbsp;  鏇存柊LRSN錛岃漿1銆?/p>

3.5.3.    RC瀹氭椂鍣ㄥ埌
閫氳繃閫熺巼鎺у埗綆楁硶鏉ユ洿鏂癝TP錛堣3.6鑺傦級銆?/p>

榪囩▼濡備笅錛?/p>

A錛?鎸夌収涓嬮潰鐨勫師鍒欐煡鎵炬帴鏀剁鎵鎺ユ敹鍒扮殑鎵鏈夊寘涔嬪墠鐨勫簭鍙鳳細濡傛灉鎺ユ敹鑰呬涪澶遍摼琛ㄦ槸絀虹殑錛孉CK鍙風爜鏄疞RSN+1錛屽惁鍒欐槸鍦ㄦ帴鏀朵涪澶遍槦鍒椾腑鐨勬渶灝忓簭鍙楓?/p>

B錛?濡傛灉搴旂瓟鍙蜂笉澶т簬鏇劇粡琚獳CK2搴旂瓟鐨勬渶澶у簲絳斿彿錛屾垨絳変簬涓婃搴旂瓟鐨勫簲絳斿彿騫朵笖涓ゆ搴旂瓟涔嬮棿鐨勬椂闂撮棿闅斿皬浜嶳TT+4*RTTVar錛屽仠姝紙涓嶅彂閫佸簲絳旓級銆?/p>

C錛?鍒嗛厤榪欎釜搴旂瓟涓涓敮涓澧炲姞鐨凙CK搴忓垪鍙鳳紝鎺ㄨ崘閲囩敤ACK搴忓垪鍙鋒寜姝ラ1澧炲姞錛屽茍涓旈噸鍙犲湪杈懼埌鏈澶у間箣鍚庛?/p>

D錛庢牴鎹笅闈㈢殑綆楁硶鏉ヨ綆楀寘鐨勬姷杈鵑熷害錛氫嬌鐢≒KT鍘嗗彶紿楀彛涓殑鍊艱綆楁渶榪?6涓寘鎶佃揪闂撮殧錛圓I錛変腑鍊箋傚湪榪?6涓間腑錛屽垹闄ら偅浜涘ぇ浜嶢I*8鎴栧皬浜嶢I*8鐨勫寘錛屽鏋滄渶鍚庡墿浣?涓鹼紝璁$畻浠栦滑鐨勫鉤鍧囧?AI’)錛屽寘鎶佃揪閫熷害鏄?/AI’錛堟瘡縐掑寘鐨勬暟閲忥級錛屽惁鍒欐槸0銆?/p>

E錛?鏍規嵁3.7鑺備腑鐨勫唴瀹逛負姣忕錛圵錛夎綆楁祦閲忕獥鍙c傜劧鍚庤綆楁湁鏁堢殑嫻侀噺紿楀彛澶у皬涓猴細鏈澶э紙W錛屽彲鐢ㄦ帴鏀舵柟緙撳啿澶у皬錛夛紝2錛夈?/p>

F錛?鏍規嵁涓嬮潰鐨勭畻娉曟潵璁$畻榪炴帴瀹歸噺浼拌銆傚鏋滄祦閲忔帶鍒跺揩鍚姩闃舵錛?.7錛変竴鐩寸戶緇紝榪斿洖0錛屽惁鍒欒綆楁渶榪?6涓鍖呴棿闅旓紙PI錛夛紝榪欎簺鍊煎湪瀵瑰寘紿楀彛涓紝閭d箞榪炴帴瀹歸噺灝辨槸1/PI錛堟瘡縐掑寘鐨勬暟閲忥級銆?/p>

G錛庢墦鍖呭簲絳斿簭鍒楀彿錛屽簲絳斿彿錛孯TT錛孯TT 鍙橀噺錛屾湁鏁堢殑嫻侀噺紿楀彛澶у皬騫朵及璁¤繛鎺ワ紝灝嗕粬浠斁鍏CK鍖呬腑錛岀劧鍚庡彂閫佸嚭鍘匯?/p>

H錛?璁板綍ACK搴忓垪鍙鳳紝搴旂瓟鍙峰拰榪欎釜搴旂瓟鐨勫紑濮嬫椂闂達紝騫舵斁鍏ュ巻鍙茬獥鍙d腑銆?/p>

3.5.4.    澶勭悊NAK瀹氭椂鍣ㄥ埌鏃?br>Ø       鏌ユ壘鎺ュ彈鏂圭殑涓㈠け閾捐〃錛屾壘鍒版墍鏈変笂嬈″弽棣堟椂闂存槸錛坘*錛圧TT+4*RTTVar ) 錛夊墠鐨勫寘錛宬褰撳墠榪欎釜鍖呯殑鍙嶉嬈℃暟鍔?錛屽鏋滄病鏈夊弽棣堜涪澶憋紝鍋滄銆?/p>

Ø       鍘嬬緝絎竴姝ヤ腑寰楀埌鐨勫簭鍙鳳紙瑙?.9錛夛紝鐒跺悗鍦ㄤ竴涓狽AK鍖呬腑鍙戦佷粬浠埌鍙戦佹柟銆?/p>

Ø       濡傛灉涓嶆槸鍋滄嫻侀噺鎺у埗蹇惎鍔ㄩ樁孌點?/p>

3.5.5.    澶勭悊EXP瀹氭椂鍣?br>A錛?nbsp;  濡傛灉鍙戦佺鐨勪涪澶遍摼琛ㄤ笉鏄┖鐨勶紝鍋滄

B錛?nbsp;  灝嗘墍鏈夋湭搴旂瓟鐨勫寘鏀懼埌鍙戦佺鐨勪涪澶遍摼琛ㄤ腑

C錛?濡傛灉(exp-count>16)騫朵笖鑷笂嬈′粠瀵規柟鎺ユ敹鍒頒竴涓寘浠ユ潵鐨勬繪椂闂磋秴榪?縐掞紝鎴栬呰繖涓椂闂村凡緇忚秴榪?鍒嗛挓浜嗭紝榪欒璁や負鏄繛鎺ュ凡緇忔柇寮錛屽叧闂璘DT榪炴帴銆?/p>

D錛庡鏋滄病鏈夋暟鎹紝涔熷氨娌℃湁搴旂瓟錛屽彂閫佷竴涓繚媧誨寘緇欏绔紝鍚﹀垯灝嗘墍鏈夋湭搴旂瓟鍖呯殑搴忓彿鏀懼叆鍙戦佷涪澶卞垪琛ㄤ腑銆?/p>

E錛?nbsp;  鏇存柊exp-count涓猴細exp-count= exp-count+1

F錛?nbsp;  鏇存柊ETP涓猴細ETP=exp-count*錛圧TT+4*RTTVar錛?ATP銆?/p>

3.5.6.    鏀跺埌搴旂瓟鍖?br>A錛?nbsp;  鏇存柊鏈澶х殑搴旂瓟搴忓彿

B錛?鏇存柊RTT鍜孯TTVar涓猴細RTT = rtt錛?RTTVar = rv錛況tt鍜宺v鏄疉CK鍖呬腑鐨凴TT鍜孯TTVar鍊箋?/p>

C錛?nbsp;  鏇存柊NTP鍜孍TP涓猴細NTP=RTT+4*RTTVar錛汦TP=exp-count*錛圧TT+4*RTTVar錛?ATP銆?/p>

D錛?nbsp; 鏇存柊榪炴帴瀹歸噺浼拌錛欱=錛圔*7+b錛?8錛宐鏄疉CK鍖呭甫鐨勫箋?/p>

E錛?nbsp;  鏇存柊嫻侀噺紿楀彛澶у皬涓篈CK涓殑鍊箋?/p>

F錛?nbsp;  鍙戦丄CK2鍖咃紝騫惰緗笌ACK搴忓彿鐩稿悓鐨勫簲絳斿彿鍒板绔?/p>

G錛?nbsp; 澶嶄綅EXP瀹氭椂鍣?/p>

3.5.7.    褰撴敹鍒癗AK鍖呯殑鏃跺?br>A錛?灝嗘墍鏈塏AK鍖呬腑甯︾殑搴忓彿鏀懼叆鍙戦佹柟鐨勪涪澶卞垪琛ㄤ腑

B錛?閫氳繃閫熺巼鎺у埗鏉ユ洿鏂癝TP錛堣3.6錛?/p>

C錛?澶嶄綅EXP瀹氭椂鍣?/p>

3.5.8.    褰撴敹鍒癆CK2鍖?br>Ø         鍦ˋCK鍘嗗彶紿楀彛涓牴鎹帴鏀跺埌鐨凙CK2搴忓垪鍙鋒煡鎵捐钀ョ殑ACK鍖呫?/p>

Ø         鏇存柊鏇劇粡琚簲絳旂殑鏈澶у簲絳斿彿

Ø       鏍規嵁ACK2鐨勫埌杈炬椂闂村拰ACK紱誨紑鏃墮棿璁$畻鏂扮殑rtt鍊鹼紝騫朵笖鏇存柊RTT鍜孯TTVar鍊間負錛?/p>

RTTVar = (RTTVar *3 +abs(rtt-RTT)/4

RTT = (RTT *7+rtt)/8

RTT鍜孯TTVar鐨勫垵濮嬪兼槸0.1縐掑拰0.05縐掋?/p>

Ø       鏇存柊NTP鍜孍TP涓猴細

NTP = RTT錛?/p>

ETP = (exp-count +1)* RTT+ATP

3.5.9.    褰撴敹鍒頒繚媧誨寘鐨勬椂鍊?br>浠涔堜篃涓嶅仛

3.5.10.             褰撴敹鍒拌繛鎺ユ彙鎵嬪拰鍏抽棴鍖呯殑鏃跺?br>瑙?.8鑺?/p>

3.6. 閫熷害鎺у埗綆楁硶
3.6.1.    閫熺巼鎺у埗蹇惎鍔?br>STP琚垵濮嬩負鏈灝忕殑鏃墮棿綺懼害錛?涓狢PU鍛ㄦ湡鎴?姣錛夈傝繖鏄湪蹇惎鍔ㄩ樁孌碉紝涓鑸敹鍒頒竴涓狝CK鍖呭叾鎼哄甫鐨勪及璁″甫瀹藉ぇ浜?榪欎釜闃舵灝卞仠姝簡銆傚寘鐨勫彂閫佸懆鏈熻璁劇疆涓?/W錛學鏄疉CK鎼哄甫鐨勬祦閲忕獥鍙g殑澶у皬銆?/p>

蹇惎鍔ㄩ樁孌典粎浠呭湪寮濮嬩竴涓猆DT榪炴帴鐨勬椂鍊欏彂鐢燂紝涓斾笉浼氬湪UDT榪炴帴鐨勪互鍚庡啀鍑虹幇銆傚湪蹇惎鍔ㄩ樁孌典箣鍚庯紝涓嬮潰鐨勭畻娉曞氨瑕佸伐浣滀簡銆?/p>

3.6.2.    褰揜C瀹氭椂鍣ㄦ椂闂村埌
1錛?nbsp; 濡傛灉鍦ㄤ笂涓涓猂CTP鏃墮棿鍐咃紝娌℃湁鏀跺埌涓涓狝CK錛屽仠姝?/p>

2錛?nbsp; 璁$畻鍦ㄤ笂涓猂CTP鏃墮棿鍐呯殑涓㈠け鐜囷紝璁$畻鏂規硶鏄牴鎹誨叡鍙戦佺殑鍖呬笌NAK鍙嶉涓誨叡涓㈠け鍖呯殑鏁伴噺銆傚鏋滀涪澶辯巼澶т簬0.1%錛屽仠姝€?/p>

3錛?nbsp; 涓嬩釜RCTP鏃墮棿鍐呭彂閫佸寘鐨勫鍔犳暟閲忓涓嬭綆楋細(inc)

If (B<=C) inc = 1/MSS

Else inc = max (10^(ceil(log10((B-C)*MSS*8)))*Beta/MSS,1/MSS)

B鏄繛鎺ュ閲忎及璁★紝C鏄綋鍓嶇殑鍙戦侀熷害銆備袱涓兘璁$畻涓烘瘡縐掑灝戜釜鍖呫侻SS鏄互瀛楄妭璁$畻鐨勶紱Beta鏄間負0.0000015鐨勫父閲忋?/p>

4錛?nbsp; 鏇存柊STP錛歋TP=錛圫TP*RCTP錛?錛圫TP*inc + RCTP錛?/p>

5錛?nbsp; 璁$畻鐪熸鐨勬暟鎹彂閫佸懆鏈燂紙rsp錛夛紝浠嶴ND PKT鍘嗗彶紿楀彛涓緱鍒幫紝濡傛灉錛圫TP<0.5 *rsp錛夎緗甋TP涓猴紙0.5 * rsp錛夈?/p>

6錛?nbsp; 濡傛灉錛圫TP<1.0錛夛紝璁劇疆STP涓?.0銆?/p>

3.6.3.    褰撴敹鍒癗AK鍖呮椂
3.6.3.1.          鏁版嵁緇撴瀯鍜屽彉閲?br>1錛?nbsp; LSD錛氳嚜涓婃閫熺巼闄嶄綆鍚庡彂閫佺殑鏈澶у簭鍙?/p>

2錛?nbsp; NumNAK錛氳嚜涓婃LSD鏇存柊浠ュ悗鐨凬AK鏁伴噺

3錛?nbsp; AvgNAK錛氬綋鏈澶у簭鍙峰ぇ浜嶭SD鏃朵袱嬈′簨浠朵箣闂寸殑NAK縐誨姩鐨勫鉤鍧囨暟銆?/p>

4錛?nbsp; DR錛氬湪1鍒癆vgNAK涔嬮棿鐨勯殢鏈哄鉤鍧囨暟銆?/p>

3.6.3.2.          綆楁硶
1錛?nbsp; 濡傛灉NAK涓渶澶х殑涓㈠け搴忓垪鍙峰ぇ浜嶭SD錛?/p>

澧炲姞STP涓猴細STP=STP*錛?+1/8錛?/p>

鏇存柊AvgNAK涓猴細AvgNAK = 錛圓vgNAK *7 +NumNAK錛?8

鏇存柊DR

澶嶄綅 NumNAK = 0

璁板綍LSD

2錛?nbsp; 鍚﹀垯錛屽鍔燦umNAK鎸夌収1涓楠ゅ鍔狅紱濡傛灉NumNAK % DR = 0錛涘鍔燬TP涓猴細STP=STP*錛?+1/8錛夛紱璁板綍LSD銆?/p>

3.7. 嫻侀噺鎺у埗綆楁硶
嫻侀噺鎺у埗紿楀彛澶у皬錛圵錛夊垵濮嬪兼槸16銆?/p>

3.7.1.    褰揂CK瀹氭椂鍣ㄥ埌鐨勬椂鍊?br>1錛?nbsp; 嫻侀噺鎺у埗蹇惎鍔細濡傛灉娌℃湁NAK浜х敓鎴栬匴娌℃湁鍒拌揪鎴栬秴榪?5涓寘錛屽茍涓擜S>0錛屾祦閲忕獥鍙eぇ灝忔洿鏂頒負搴旂瓟鍖呯殑鎬繪暟閲忋?/p>

2錛?nbsp; 鍚﹀垯錛屽鏋滐紙AS>0錛夛紝W鏇存柊涓猴細錛圓S鏄寘鐨勫埌杈鵑熷害錛?/p>

W= ceil (W *0.875+AS* (RTT +ATP) *0.125)

3錛?nbsp; 闄愬埗W鍒板鏂規渶澶ф祦閲忕獥鍙eぇ灝忋?/p>

3.8. 榪炴帴寤虹珛鍜屽叧闂?br>涓涓猆DT瀹炰綋棣栧厛浣滀負涓涓猄ERVER鍚姩錛屽綋涓涓鎴風闇瑕佽繛鎺ョ殑鏃跺欏叾鍙戦佹彙鎵嬪寘銆傚鎴風鍦ㄤ粠鏈嶅姟绔帴鏀跺埌涓涓彙鎵嬪搷搴斿寘鎴栨椂闂存孩鍑轟箣鍓嶏紝搴旇姣忛殧涓孌墊椂闂村彂閫佷竴涓彙鎵嬪寘錛堟椂闂撮棿闅旂敱鍝嶅簲鏃墮棿鍜岀郴緇無verhead鏉ユ潈琛★級銆?/p>

鎻℃墜鍖呮湁濡備笅淇℃伅錛?/p>

1錛?nbsp; UDT鐗堟湰錛氳繖涓兼槸鍏煎鐨勭洰鐨勩傚綋鍓嶇殑鐗堟湰鏄?

2錛?nbsp; 鍒濆搴忓彿錛氳繖鏄彂閫佽繖涓猆DT瀹炰綋灝嗘潵鐢ㄤ簬鍙戦佹暟鎹寘鐨勮搗濮嬪簭鍙楓傚畠蹇呴』鏄竴涓湪1鍒幫紙2^31-1錛変箣闂寸殑闅忔満鍊箋傚彟澶栵紝寤鴻榪欎釜鍊煎湪鍚堢悊鐨勬椂闂村巻鍙茬獥鍙d腑涓嶅簲璇ラ噸澶嶃?/p>

3錛?nbsp; MSS錛氭暟鎹寘鐨勫ぇ灝忥紙閫氳繃IP鏈夋晥璐熻澆鏉ュ害閲忥級

4錛?nbsp; 鏈澶х殑嫻侀噺紿楀彛澶у皬錛氳繖鏄帴鏀跺埌鎻℃墜淇℃伅鐨刄DT瀹炰綋鍏佽鐨勬渶澶ф祦閲忕獥鍙eぇ灝忥紝紿楀彛澶у皬閫氬父闄愬埗涓烘帴鏀剁鐨勬暟鎹粨鏋勫ぇ灝忋?/p>

鏈嶅姟鍣ㄦ帴鏀跺埌涓涓彙鎵嬪寘涔嬪悗錛屾瘮杈僊SS鍊煎拰浠栬嚜宸辯殑鍊煎茍璁劇疆瀹冭嚜宸辯殑鍊間負杈冨皬鐨勫箋傜粨鏋滃間篃鍦ㄦ彙鎵嬪搷搴斾腑琚彂閫佸埌瀹㈡埛绔紝鍙﹀榪樻湁鏈嶅姟鍣ㄧ殑鐗堟湰淇℃伅錛屽垵濮嬪簭鍒楀彿錛屾渶澶ф祦閲忕獥鍙eぇ灝忋?/p>

鐗堟湰瀛楁鐢ㄦ潵媯鏌ヤ袱绔殑鍏煎鎬с傚垵濮嬪簭鍒楀彿鍜屾渶澶ф祦閲忕獥鍙eぇ灝忕敤浜庡垵濮嬪寲鎺ユ敹鍒拌繖涓彙鎵嬪寘鐨刄DT瀹炰綋鍙傛暟銆?/p>

鏈嶅姟鍣ㄥ湪絎竴姝ュ畬鎴愪互鍚庡氨鍑嗗鍙戦佹垨鎺ユ敹鏁版嵁銆傜劧鑰岋紝鍙浠庡悓涓涓鎴風鎺ユ敹浠諱綍鎻℃墜鍖咃紝鍏跺簲璇ュ彂閫佸搷搴斿寘銆?/p>

瀹㈡埛绔竴鏃﹀緱鍒版湇鍔″櫒鐨勪竴涓彙鎵嬪搷搴斿叾灝辮繘鍏ュ彂閫佸拰鎺ユ敹鏁版嵁鐘舵併傝緗畠鑷繁鐨凪SS涓烘彙鎵嬪搷搴斿寘涓殑鍊煎茍鍒濆鍖栫浉搴旂殑鍙傛暟涓哄寘涓殑鍊鹼紙搴忓垪鍙楓佹渶澶ф祦閲忕獥鍙o級銆傚鏋滄敹鍒頒換浣曞叾浠栫殑鎻℃墜淇℃伅錛屼涪鎺夊畠銆?/p>

濡傛灉鍏朵腑鐨刄DT瀹炰綋瑕佸叧闂紝瀹冨皢鍙戦佷竴涓叧闂俊鎭埌瀵圭錛涘鏂規敹鍒拌繖涓俊鎭互鍚庡皢鑷繁鍏抽棴銆傝繖涓叧闂俊鎭氳繃UDP浼犺緭錛屼粎浠呭彂閫佷竴嬈★紝騫朵笉淇濊瘉涓瀹氭敹鍒般傚鏋滄秷鎭病鏈夋敹鍒幫紝瀵規柟灝嗘牴鎹椂闂存孩鍑烘満鍒舵潵鍏抽棴榪炴帴銆?/p>

3.9. 涓㈠け淇℃伅鐨勫帇緙╂柟妗?br>NAK鍖呬腑鎼哄甫鐨勪涪澶變俊鎭槸涓涓?2-bit鏁存暟鐨勬暟緇勩傚鏋滄暟緇勭殑涓暟瀛楁槸涓涓甯哥殑搴忓彿錛堢1浣嶆槸0錛夛紝榪欐剰鍛崇潃榪欎釜搴忓彿鐨勫寘涓㈠け浜嗭紝濡傛灉絎?浣嶆槸1錛屾剰鍛崇潃浠庤繖涓彿鐮佸紑濮嬶紙鍖呮嫭璇ュ彿鐮侊級鍒頒笅涓涓暟緇勪腑鐨勫厓绱狅紙鍖呮嫭榪欎釜鍏冪礌鍊鹼級涔嬮棿鐨勫寘錛堝畠鐨勭1浣嶅繀欏繪槸0錛夐兘涓㈠け銆?/p>

渚嬪錛屼笅闈㈢殑NAK涓惡甯︾殑淇℃伅錛?/p>

0x00000002, 0x80000006, 0x0000000B, 0x0000000E

涓婇潰鐨勪俊鎭〃鏄庡簭鍙蜂負錛?錛?錛?錛?錛?錛?0錛?1錛?4鐨勫寘閮戒涪浜嗐?/p>

4.   鏁堢巼鍜屽叕騫蟲?br>UDT鑳藉鍏呭垎鍒╃敤褰撳墠鏈夌嚎緗戠粶鐨勭嫭绔嬩簬榪炴帴瀹歸噺鐨勫彲鐢ㄥ甫瀹?銆丷TT銆佸悗鍙板叡瀛樻祦銆佺粰瀹氱殑榪炴帴姣旂壒閿欒鐜囥俇DT鍦ㄦ病鏈夋暟鎹寘涓㈠け鐨勬儏鍐典笅浠?bits/s鍒?0%甯﹀闇瑕佷竴涓父閲忔椂闂達紝榪欎釜鏃墮棿鏄?.5縐掋俇DT騫朵笉閫傚悎鏃犵嚎緗戠粶銆?/p>

UDT鐨勭‘婊¤凍鍗曠摱鍔茬綉緇滄嫇鎵戠殑鏈澶?鏈灝忓叕騫蟲с傚湪澶氫釜鐡跺姴鎯呭喌涓嬶紝鏍規嵁鏈澶ф渶灝忓師鍒欏畠鑳戒繚璇佽緝灝忕摱鍔茶繛鎺ユ垨鑰呰嚦灝戜竴鍗婄殑騫崇瓑鍏變韓(it guarantees that flows over smaller bottleneck links obtain at least half of their fair share according to max-min rule)銆俁TT瀵瑰叕騫蟲ч兘涓鐐瑰獎鍝嶃?/p>

褰撳拰澶у潡鐨凾CP嫻佸叡瀛樼殑鏃跺欙紝TCP鑳藉崰鐢ㄦ瘮UDT鏇村鐨勫甫瀹斤紝闄や簡涓夌鎯呭喌錛?/p>

1錛?nbsp;     緗戠粶BDP闈炲父澶э紝TCP涓嶈兘鍒╃敤浠栦滑鐨勫叕騫沖叡浜甫瀹姐傝繖縐嶆儏鍐典笅錛孶DT灝嗗崰鐢═CP涓嶈兘鍒╃敤鐨勫甫瀹姐?/p>

2錛?nbsp;     榪炴帴瀹歸噺鏄姝ょ殑灝忥紝浠庤屽鑷碪DT鐨勫甫瀹戒及璁℃妧鏈笉鑳芥渶鏈夌殑宸ヤ綔錛涙ā鎷熸樉紺鴻繖涓瀬闄愯繛鎺ュ閲忓ぇ綰︽槸100kb/s銆?/p>

3錛?nbsp;     鍦ㄤ嬌鐢‵IFO闃熷垪浣滀負緗戠粶璺緞鐨勭綉緇滀腑錛屽鏋滈槦鍒楀ぇ灝忓ぇ浜嶣DP錛孴CP鐨勫叡浜甫瀹介殢鐫闃熷垪澶у皬鐨勫鍔犺岄檷浣庛傜劧鑰岋紝鎶佃揪UDT鐨勫叡浜甫瀹芥槸錛岄槦鍒楀ぇ灝忛氬父瓚呰繃瀹為檯璺敱鍣?浜ゆ崲鏈烘彁渚涚殑鏁伴噺銆?/p>

褰撶煭錛坱imewise錛夌被浼紈eb鐨凾CP嫻佸拰灝忕殑騫跺彂UDT嫻佸叡瀛樼殑鏃跺欙紝UDT鍦═CP嫻佷笂鐨勬晥鏋滈潪甯稿皬銆?/p>

鏇村鐨勫垎鏋愬湪[GHG03]銆?/p>

5.   瀹夊叏鑰冭檻
UDT騫舵病鏈変嬌鐢ㄧ壒瀹氱殑瀹夊叏鏈哄埗錛岀浉鍙嶏紝瀹冧緷璧栦簬搴旂敤紼嬪簭鎻愪緵鐨勬巿鏉冨拰搴曞眰鎻愪緵鐨勫畨鍏ㄦ満鍒躲?/p>

鐒惰岋紝鐢變簬UDP鏄棤榪炴帴鐨勶紝UDT瀹炵幇搴旇媯鏌ユ墍鏈夎揪鍒扮殑鍖呮槸鍚︽槸棰勬湡鐨勬潵婧愩傝繖鏄粠socket鐨凙PI榪炴帴姒傚康涓戶鎵胯屾潵錛屽叾榪炴帴鍙槸鎺ユ敹鎸囧畾鏉ユ簮鐨勬暟鎹?/p>


6.UDT SOURCE CODE LINK
      http://sourceforge.net/projects/dataspace


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



灝忕帇 2010-04-13 17:14 鍙戣〃璇勮
]]>
(TCP-over-UDP library)鍩轟簬UDP鍗忚涔嬩笂瀹炵幇閫氱敤銆佸彲闈犮侀珮鏁堢殑TCP鍗忚http://www.shnenglu.com/jack-wang/archive/2010/04/12/112342.html灝忕帇灝忕帇Mon, 12 Apr 2010 08:35:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/04/12/112342.htmlhttp://www.shnenglu.com/jack-wang/comments/112342.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/04/12/112342.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/112342.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/112342.html杞細http://www.shnenglu.com/fwxjj/archive/2009/03/17/76923.html

闅忕潃浜掕仈緗戝簲鐢ㄥ箍娉涙帹騫匡紝鍑虹幇浜嗚秺鏉ヨ秺澶氱殑緗戠粶搴旂敤錛屽叾涓熀浜巔2p鎬濇兂鐨勫悇縐嶇綉緇滄妧鏈殑浜у搧涔熻秺鏉ヨ秺澶氱殑鍑虹幇鍦ㄦ垜浠殑瑙嗛噹褰撲腑銆備粠鏈鏃╅椈鍚嶇殑Napster鍒扮幇鍦ㄧ殑Bittorrent銆乪Mule銆乻kype絳変駭鍝侊紝P2P榪欑緗戠粶搴旂敤妯″紡宸茬粡浠庡悇涓柟闈㈡繁鍏ヤ漢蹇冦傝繖浜涗駭鍝佸湪鍚勮嚜鐨勭綉緇滃疄鐜版妧鏈笂錛岄兘浠ュ悇鑷殑鏂規硶瑙e喅鐫鍚屾牱闈復鐨勪竴涓棶棰橈紝濡備綍璁╀粬浠殑杞歡浜у搧鍦ㄥ悇寮傜殑緗戠粶鎷撴墤緇撴瀯涓『鍒╃殑榪涜P2P閫氫俊銆?br> 浼楁墍鍛ㄧ煡錛屽湪褰撲粖鐨勭綉緇滄嫇鎵戠粨鏋勪腑錛屾櫘閬嶅瓨鍦ㄤ嬌鐢∟AT璁懼鏉ヨ繘琛岀綉緇滃湴鍧杞崲錛岃岃搴旂敤紼嬪簭鑳借法瓚婅繖浜汵AT璁懼榪涜鍏ㄥ弻宸ョ殑閫氫俊錛屽氨鎴愪負闈炲父閲嶈鐨勪竴涓棶棰樸傚浜庡疄鐜拌法瓚奛AT閫氫俊鍙互閲囧彇寰堝縐嶅姙娉曪紙瀵逛簬鑳藉鐩存帴榪炴帴銆佸弽鍚戣繛鎺ョ殑鎯呭喌涓嶅湪姝ゅ垪錛夛細棣栧厛鏄氳繃鏈嶅姟鍣ㄨ繘琛岃漿鍙戯紝榪欐槸姣旇緝綺楁毚鐨勬柟娉曪紝鑰屼笖鍦ㄧ敤鎴烽噺澶х殑鏃跺欙紝杞彂鏈嶅姟鍣ㄩ渶瑕佷粯鍑虹浉褰撳ぇ鐨勪唬浠鳳紱絎簩錛屽彲浠ヤ嬌鐢∟AT絀塊忔妧鏈傝屽ぇ瀹剁煡閬撳叧浜嶯AT絀塊忎腑錛孶DP絀塊忕殑鎴愬姛鐜囨瘮璧稵CP絀塊忚楂樺嚭璁稿錛岃繖涓鐐硅繖閲屽皢涓嶅仛澶氳堪錛屽彲浠ュ弬鑰傿ryan Ford鐨勬枃绔犮奝eer-to-Peer Communication Across Network Address Translators銆嬶紙http://www.brynosaurus.com/pub/net/p2pnat/錛夈傚洜姝ゅ湪UDP鍗忚涓婃瀯寤轟竴浜涘ぇ鍨嬬殑緗戠粶搴旂敤紼嬪簭鍙兘浼氭垚涓哄緢澶氫漢鐨勯渶姹傘?br> 褰撶劧涔熷彲鑳藉熀浜庢洿澶氱殑鍘熷洜錛屼細鏈夊緢澶氫漢甯屾湜鑳藉湪UDP鍗忚涓婅繘琛屽ぇ鍨嬪簲鐢ㄧ▼搴忕殑鏋勫緩銆傜劧鑰孶DP鍗忚鏈韓瀛樺湪鐫涓嶉氫俊涓嶅彲闈犵殑緙虹偣錛屼簬鏄浜庡熀浜嶶DP榪涜鍙潬閫氫俊鐨勯渶姹傚氨嫻幇鍑烘潵浜嗐傜洰鍓嶅湪緗戠粶涓婃湁璁稿浜烘鍋氱潃榪欎竴宸ヤ綔錛孶DT銆丷akNet銆乪Net絳夐兘鏄瀯寤哄湪UDP涔嬪悗緗戠粶鍙潬閫氫俊寮鍙戝簱銆傜劧鍚庤繖浜涘簱寮鍙戞椂閮介拡瀵逛簡涓浜涚壒孌婂簲鐢ㄦ潵榪涜璁捐鐨勶紝涓嶅叿澶囬氱敤鎬с傛瘮濡俁akNet鏄負娓告垙搴旂敤鑰岃璁★紝瀵逛簬瀹炴椂鎬х瓑娓告垙鐩稿叧鐨勭綉緇滈渶姹傛湁寰堝ソ鐨勬敮鎸侊紝瀵逛簬澶ф壒閲忔暟鎹紶杈撳嵈鏈夌偣鍔涙墍涓嶅強銆傝孶DT鍩轟簬涓縐嶅熀浜庡甫瀹介熺巼鎺у埗鐨勬嫢濉炴帶鍒剁畻娉曡繘琛岃璁★紙http://udt.sourceforge.net/doc/draft-gg-udt-01.txt錛夛紝涓昏鐢ㄥ湪灝忔暟閲忕殑bulk婧愬叡浜瘜瑁曞甫瀹界殑鎯呭喌涓嬶紝鏈鍏稿瀷鐨勪緥瀛愬氨鏄緩绔嬪湪鍏夌氦騫垮煙緗戜笂鐨勭綉鏍艱綆楋紝鑰屽湪ISP鎻愪緵甯﹀鏈夐檺鐨勬儏鍐典笅榪愯鍗存樉寰楁秷鑰楄祫婧愬茍鎬ц兘涓嶈凍銆傜敋鑷沖彲鑳借闃茬伀澧欙紝鎴朓SP鏈嶅姟鍟嗗垽鏂負鎭舵剰甯﹀浣跨敤鏀誨嚮銆傝繖浜涢兘浣跨敤寰椾粬浠笉鑳借騫挎硾鍦扮敤浜庡悇縐嶇綉緇滃簲鐢ㄧ▼搴忋傚彟澶栧ぇ瀹朵篃闄嗙畫鍙戠幇鐩墠鐨刄DT瀹炵幇鐗堟湰瀛樺湪鐨勪竴浜涢棶棰樸傛瘮濡俇DT鍋氭湇鍔$鎺ユ敹榪炴帴鏃訛紝鎬繪槸鏂板紑涓涓鍙d笌瀹㈡埛绔繘琛岃繛鎺ワ紝榪欐牱浼氬甫鏉ュ嚑涓棶棰橈細1錛夎緝澶氬鎴風榪炴帴涓婃潵鏃訛紝鏈嶅姟绔柊鎵撳紑鐨勪紬澶氱鍙d腑鍙兘鏈夌殑绔彛浼氳闃茬伀澧欐嫤鎴屽鑷撮氫俊澶辮觸錛?錛夊鏋滃鎴風澶勪簬Symmetric NAT鍜孭ort-Restricted Cone NAT鍚庨潰鏃訛紝灝嗗鑷存湇鍔″櫒绔笌瀹㈡埛绔繛鎺ユ棤娉曟垚鍔熷緩绔嬶紝3錛夌敱浜巙dp绔彛鏁版渶澶у兼湁闄愶紝鎵浠DT鏈嶅姟鍣ㄧ鍙帴鏀剁殑榪炴帴鏁頒篃鍥犱簺鍙楅檺銆傚啀鏈夊氨鏄笉浠呬粎鏄疷DT搴擄紝鍩烘湰涓婃墍鏈夌殑UDP-based鍙潬閫氫俊搴擄紝閮芥湭鎻愪緵絀胯秺proxy浠g悊鐨勫姛鑳斤紙socks5錛夛紱鍐嶆湁灝辨槸瀵筓DP鎵撴礊鎶鏈湁鐨勬敮鎸佸緱涓嶅畬鍠勬垨騫朵笉鏀寔銆?br> 鍩轟簬榪欎簺鍘熷洜錛屼嬌寰楁垜闇瑕佸紑鍙戜竴涓熀浜嶶DP鍗忚涔嬩笂瀹炵幇涓涓彲闈犮侀珮鏁堛侀氱敤鐨勯氫俊搴擄紝鏉ユ弧瓚蟲垜鐩墠鎵寮鍙戠殑欏圭洰鐨勯渶瑕併俆CP鍗忚綆楁硶宸茬粡鏄粡榪囧鏂歸潰鍙婂騫寸殑楠岃瘉錛屾槸鏈鍏烽氱敤鎬э紝涓斿彲闈犻珮鏁堢殑銆傝櫧鐒禪DT絳夊悇縐嶅簱鎸囧嚭TCP鍦ㄨ繖鏍鋒垨閭f牱鐨勭綉緇滅幆澧冧笅瀛樺湪涓嶈凍錛屼絾浼楀瀹炵幇褰撲腑浠栦粛鐒舵槸鏈閫氱敤銆佸彲闈犮侀珮鏁堢殑銆傜浉淇℃湁璁稿浜鴻窡鎴戜竴鏍鳳紝闇瑕佽繖涔堜竴涓紑鍙戝簱錛屾墍浠ユ垜鎵撶畻鍦ㄥ紑鍙戣繃紼嬩腑錛岄檰緇叕寮鐩稿叧鐨勬枃妗e強榪欎釜寮鍙戝簱銆?br> 
浜屻佽璁$洰鏍?br> 
 TDP涓昏鐨勭洰鏍囧氨鏄湪UDP灞備箣涓婂疄鐜癟CP鐨勫崗璁畻娉曪紝浣垮緱搴旂敤紼嬪簭鑳藉鍦║DP灞備箣涓婅幏寰楅氱敤銆佸彲闈犮侀珮鏁堢殑閫氫俊鑳藉姏銆?br> TDP緗戠粶寮鍙戝簱鎵瀹炵幇鐨勭畻娉曪紝閮芥潵鑷箙緇忚冮獙鐨凾CP鍗忚綆楁硶錛岀綉涓婃湁鐫闈炲父澶氱殑鍙傝冭祫鏂欍傚湪瀹炵幇褰撲腑錛屽弬鑰冩渶澶氱殑鏄疪ichard Stevens鐨勩奣CP/IP璇﹁В銆嬨?br> TDP鎻愪緵鐨勭敤浜庡紑鍙戠殑搴旂敤紼嬪簭鎺ュ彛涓嶴ocket API闈炲父鐩稿儚錛屽涓旂О涔嬩負TDP Socket API錛屽熀鏈笂鐨勫嚱鏁板悕涓庡弬鏁扮瓑閮戒笌Socket API鐩鎬竴鑷達紝浣嗘槸TDP Socket API鐨凙PI鎺ュ彛閮戒綅浜庡懡鍚嶇┖闂碩DP褰撲腑銆傚彧瑕佷嬌鐢ㄨ繃Socket API榪涜寮鍙戣繃鐨勬湅鍙嬶紝灝嗛兘浼氫嬌鐢═DP搴撹繘琛屽紑鍙戙備笅鍥句負TDP鍙奣DP Socket API鎵澶勫湪鐨勫崗璁爤搴旂敤涓殑浣嶇疆錛屼互鍙婁笌TCP鍗忚鏍堝簲鐢ㄧ殑瀵規瘮銆?br> 
 
涓夈佸崗璁鏄?br> 
 1錛庡崗璁牸寮?br> 
 TDP鐨勫疄鐜扮殑綆楁硶铏界劧涓嶵CP瀹炵幇鐨勭畻娉曟槸澶ц嚧鐩稿悓鐨?浣員DP鐨勫崗璁牸寮忓彧鏄粠TCP鍗忚鏍煎紡鑾峰緱鍙傝冿紝浣嗗茍涓嶅畬鍏ㄤ笌浠栫浉鍚屻俆DP鐨勫崗璁牸寮忓涓嬶細
 
 
 
 鎺ヤ笅鏉ヤ粙緇嶄竴涓嬪崗璁牸寮忕殑鍚勪釜瀛楁鍚箟銆?br> 4浣嶉閮ㄩ暱搴︼細琛ㄧず鐢ㄦ埛鏁版嵁鍦ㄦ暟鎹寘涓殑璧峰浣嶇疆銆?br> LIV錛氳繛鎺ヤ繚媧繪爣蹇楋紝鐢ㄤ簬琛ㄧずTDP榪炴帴閫氳礬瀛樻椿鐘舵併?br> ACK錛氱‘璁ゅ簭鍙鋒湁鏁堛?br> PSH錛氭帴鏀舵柟搴旇灝藉揩灝嗚繖涓姤鏂囨浜ょ粰搴旂敤灞傘?br> RST錛氶噸寤鴻繛鎺ャ?br> SYN錛氬悓姝ュ簭鍙風敤鏉ュ彂璧蜂竴涓繛鎺ャ?br> FIN錛氬彂绔畬鎴愬彂閫佷換鍔°?br> 16浣嶇獥鍙eぇ灝忥細鎺ユ敹绔彲鎺ユ敹鏁版嵁鐨勭獥鍙eぇ灝忋?br> 閫夐」錛氬彧鏈変竴涓夐」瀛楁錛屼負鏈闀挎姤鏂囧ぇ灝忥紝鍗矼SS銆俆DP閫夐」鏍煎紡涓嶵CP閫夐」鏍煎紡涓鑷達紝kind=0鏃惰〃紺洪夐」緇撴潫錛宬ind=1鏃惰〃紺烘棤鎿嶄綔錛宬ind=2鏃惰〃紺烘渶澶ф姤鏂囨闀垮害銆傚涓嬪浘錛?br> 
 
 
 鏁版嵁錛氱敤鎴烽氳繃TDP浼犺緭鐨勬暟鎹?br> 
 2錛嶵DP榪炴帴寤虹珛涓庣粓姝?br> 
 TDP鐨勮繛鎺ュ緩绔嬩笌緇堟鍙互鍙傝僒CP鐨勭姸鎬佸彉榪佸浘(姝ゅ浘鐨勮緇嗚В閲婅鍙傝冦奣CP/IP璇﹁В 鍗蜂竴銆嬬18绔?錛屽涓嬶細
 
 
 2.1榪炴帴寤虹珛
 
 2.1.1涓夋鎻℃墜
 榪炴帴寤虹珛鍒嗚緇忚繃涓夋鎻℃墜榪囩▼錛?)瀹㈡埛绔彂閫佷竴涓猄YN孌靛埌鎸囨槑瀹㈡埛鎵撶畻榪炴帴鐨勬湇鍔″櫒鐨勭鍙o紝鎶ユ枃孌典腑瑕佽緗鎴風鍒濆搴忓彿銆?錛夋湇鍔″櫒鍙戝洖鍖呭惈鏈嶅姟鍣ㄧ殑鍒濆搴忓彿鐨凷YN鎶ユ枃孌典綔涓哄簲絳斻傚悓鏃訛紝灝嗙‘璁ゅ簭鍙瘋緗負瀹㈡埛鐨勫垵濮嬪簭鍙峰姞1,騫惰緗瓵CK浣嶆爣蹇楁姤鏂囨涓虹‘璁ゆ姤鏂囨銆?錛夊鎴風蹇呴』灝嗙‘璁ゅ簭鍙瘋緗負鏈嶅姟鍣ㄥ垵濮嬪簭鍙峰姞1,瀵規湇鍔″櫒鐨凷YN鎶ユ枃孌佃繘琛岀‘璁ゃ?br> TDP鍦ㄥ叏灞緇存姢涓涓垵濮嬪簭鍙風瀛愶紝榪欎釜鍒濆搴忓彿涓洪殢鏃朵駭鐢熺殑32浣嶆暣鏁般?br> 榪炴帴寤虹珛鐨勮秴鏃跺拰閲嶄紶鍒濆鍊間負3縐掞紝瓚呮椂閲囩敤鎸囨暟閫閬跨畻娉曪紝3縐掕秴鏃跺悗瓚呮椂鍊間負6縐掞紝鐒跺悗鏄?2縐掞紝24縐?#8230;…銆傝繛鎺ュ緩绔嬫渶闀挎椂闂撮檺鍒朵負75縐掋?br> 
 2.1.2 NAT UDP PUNCH妯″紡
 褰揟DP宸ヤ綔妯″紡鏄疦AT UDP PUNCH鏃訛紝鍦ㄤ笁嬈℃彙鎵嬩箣鍓嶏紝鍚戝绔疦AT绔彛鍙婇嫻嬬鍙i棿闅旈粯璁?ms鍙戦侀粯璁や負10涓狶IV鎶ユ枃孌碉紝涓鏉ョ敤浜庢墦寮鑷凡鐨凬AT绔彛錛屼簩鏉ユ槸鐢ㄤ簬榪涘叆瀵圭NAT绔彛銆傞粯璁ゅ煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆銆傝繖鏃剁殑LIV鎶ユ枃孌典腑鍒濆搴忓彿鍙婄‘璁ゅ簭鍙烽兘涓?銆?br> 褰撴帴鏀跺埌瀵圭LIV鎶ユ枃孌靛悗錛岀珛鍗沖仠姝IV鎶ユ枃孌靛彂閫侊紝鍙戝嚭SYN鎶ユ枃孌佃繘琛岃繛鎺ュ緩绔嬨傝繖鏃舵湁涓ょ鍙兘錛氬叾涓鏄彟涓绔洿鍒版帴鏀跺埌璇YN鎶ユ枃孌典箣鍓嶏紝閮芥病鏈夋帴鏀跺埌LIV鎶ユ枃孌碉紝鎴栨槸鍒氭帴鏀跺埌浣嗘病鏈夋潵寰楀強鍙戦丼YN鎶ユ枃孌碉紝姝ゆ椂灝嗕細濡備笂鏂囨弿榪扮殑姝e父妯″紡涓嬭繛鎺ュ緩绔嬬殑榪囩▼涓鑷達紝灝嗙粡鍘嗕笁嬈℃彙鎵嬨傚熀浜屾槸鍙︿竴绔湪鎺ユ敹鍒拌SYN鎶ユ枃孌典箣鍓嶏紝涔熷凡緇忓彂閫佸嚭SYN鎶ユ枃孌碉紝姝ゆ椂鍙屾柟閮介渶瑕佸SYN鎶ユ枃孌佃繘琛岀‘璁わ紝鍙互縐頒箣涓哄洓嬈℃彙鎵嬨?

 2.1.3 鏈澶т紶杈撴姤鏂囧ぇ灝忥紙MSS錛?br> TCP鎶ユ枃孌靛湪榪炴帴寤虹珛鏃墮渶瑕侀氭姤MSS錛屽湪TDP鐨勫疄鐜頒腑涔熻繘琛岄氭姤錛岄粯璁ら氭姤涓?460瀛楄妭錛堢鍚堜互澶綉鏍囧噯錛岃繖涓粯璁ゅ煎厑璁?0瀛楄妭鐨処P棣栭儴銆?瀛楄妭鐨刄DP棣栭儴鍜?2瀛楄妭鐨凾DP棣栭儴錛屼互閫傚悎 1500瀛楄妭鐨処P鏁版嵁鎶ワ級榛樿鍊煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆銆?br> TCP鍦ㄥ绔湴鍧涓洪潪鏈湴IP鏃訛紝榛樿閫氭姤涓?36瀛楄妭銆俆DP涔嬫墍浠ラ粯璁ら氭姤涓?460錛屾槸鍥犱負TDP鍦ㄦ暟鎹紶杈撹繃紼嬩腑錛屽疄鐜頒簡璺緞MTU鍙戠幇鎶鏈紝閫氳繃瀹為檯鍙戠幇鐨凪TU錛岃繘琛孧SS鐨勫姩鎬佽皟鏁達紝浠ュ敖閲忛伩鍏嶆姤鏂囨鍦ㄧ綉緇滀腑鐨勪紶杈撲駭鐢熷垎鐗囩殑鎯呭喌銆傝礬寰凪TU鍙戠幇鎶鏈湪浼犺緭鏁版嵁嫻佷竴鑺備腑榪涜鎻忚堪銆?br> 
 2.1.4 鍗婃墦寮榪炴帴鍙婅繛鎺ヤ繚媧?br> 鍗婃墦寮榪炴帴鏄寚瀵圭寮傚父鍏抽棴錛屽緗戠嚎鎷旀帀銆佺獊鐒舵柇鐢電瓑鎯呭喌灝嗗紩鍙戜竴绔婕斿叧闂紝鑰屽彟涓绔殑榪炴帴鍗翠粛鐒惰涓鴻繛鎺ュ浜庢墦寮褰撲腑錛岃繖縐嶆儏鍐電О涔嬩負鍗婃墦寮榪炴帴銆俆DP涓殑涓涓猅DP SOCKET鎻忚堪絎︾敱鏈湴IP銆佹湰鍦扮鍙c佽繙绔疘P銆佽繙绔鍙e敮涓紜畾銆傚綋榪滅瀹㈡埛绔繛鎺ヨ姹傚埌鏉ユ椂錛屾湇鍔$灝嗘帴鏀跺埌涓涓柊鐨凾DP SOCKET鎻忚堪絎︼紝褰撹繖涓涓弿榪扮鍞竴紜畾淇℃伅宸茬粡瀛樺湪鏃訛紝瀵規柊鐨勮繛鎺ヨ姹傚彂閫丷ST鎶ユ枃孌碉紝閫氱煡鍏墮噸緗繛鎺ヨ姹傘傚浜庢棫鐨勮繛鎺ワ紝鐢變繚媧繪満鍒惰嚜鍔ㄥ彂鐜版槸鍚︿負鍗婃墦寮榪炴帴錛屽鏋滄槸鍗婃墦寮榪炴帴錛屽垯鑷姩鍏抽棴璇ヨ繛鎺ャ傝繖閲孯ST鎶ユ枃孌典笌TCP涓殑RST鎶ユ枃孌墊湁浜涗笉涓鏍鳳紝TCP鐨凴ST鎶ユ枃孌靛伐浣滄弿榪拌鍙傝冦奣CP/IP璇﹁В 鍗蜂竴銆嬨?br> 榪炴帴寤虹珛涔嬪悗錛孴DP榪炴帴闇瑕佸惎鍔ㄤ繚媧繪満鍒躲俆CP榪炴帴鍦ㄦ病鏈夋暟鎹氫俊鐨勬儏鍐典笅涔熻兘淇濇寔榪炴帴錛屼絾TDP榪炴帴涓嶈銆俆DP榪炴帴鍦ㄤ竴瀹氭椂闂存鍐呭鏋滄病鏈夋暟鎹氦浜掔殑璇濓紝灝嗕富鍔ㄥ彂閫佷繚媧籐IV鎶ユ枃孌點傝繖涓椂闂存鏍規嵁TDP榪炴帴宸ヤ綔妯″潡涓嶅悓鏈夋墍宸紓錛屽湪NAT UDP PUNCH妯″紡涓嬶紝榪欎釜鏃墮棿孌甸粯璁ゅ間負1鍒嗛挓錛堝ぇ澶氭暟鐨凬AT涓紝UDP浼氳瘽瓚呮椂鏃墮棿涓?錛?鍒嗛挓宸﹀彸錛夛紱鑰屽湪甯歌妯″潡涓嬭繖涓椂闂存榛樿鍊間負5鍒嗛挓銆傞粯璁ゅ煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆錛岀敤鎴風▼搴忛渶瑕佹寚鏄庝袱縐嶆ā鍧椾笅鐨勪繚媧繪椂闂村懆鏈熴傝繖閲孴DP鐨勪繚媧繪満鍒朵笌TCP涓殑淇濇椿鏈哄埗瀹屽叏涓嶄竴鏍鳳紝TCP鐨勪繚媧繪満鍒舵弿榪拌鍙傝冦奣CP/IP璇﹁В 鍗蜂竴銆嬨?br> 
 2.2榪炴帴鍏抽棴
 
 TDP榪炴帴涓嶵CP榪炴帴涓鏍鋒槸鍏ㄥ弻宸ョ殑錛屽洜姝ゆ瘡涓柟鍚戝繀欏誨崟鐙湴榪涜鍏抽棴銆傚鎴鋒満緇欐湇鍔″櫒涓涓狥IN鎶ユ枃孌碉紝鐒跺悗鏈嶅姟鍣ㄨ繑鍥炵粰瀹㈡埛绔竴涓‘璁CK鎶ユ枃錛屽茍涓斿彂閫佷竴涓狥IN鎶ユ枃孌碉紝褰撳鎴鋒満鍥炲ACK鎶ユ枃鍚庯紙鍥涙鎻℃墜錛夛紝榪炴帴灝辯粨鏉熶簡銆?br> TDP榪炴帴鐨勪竴绔帴鏀跺埌FIN鎶ユ枃孌墊椂錛屽鏋滆繕鏈夋暟鎹鍙戦侊紝闇瑕佺戶緇皢鏁版嵁榪涜鍙戦佸畬鎴愶紝鐒跺悗鎵嶅彂鍑篎IN鎶ユ枃孌碉紱濡傛灉榪樻湁鏁版嵁鏈粠緙撳瓨涓彇鍑猴紝灝嗗彇鍑烘暟鎹紝騫惰繘琛岀‘璁わ紝鐩村埌鎵鏈夌‘璁ゅ畬鎴愪箣鍚庯紝鐒跺悗鎵嶅彂鍑篎IN鎶ユ枃孌碉紙姝ゆ椂濡傛灉鏈変貢搴忕殑鎶ユ枃孌墊儏鍐典笉榪涜澶勭悊錛夈備笂闈㈢殑鎻忚堪涔熻〃鐜板嚭錛孴DP鏄敮鎸佸崐鍏抽棴鐨勶紝褰撲竴绔彂鍑篎IN鎶ユ枃孌墊椂錛屼粛鐒跺厑璁告帴鏀跺彟涓绔暟鎹備絾鏄崐鍏抽棴鍙兘瀵艱嚧榪炴帴姘歌繙鍋滅暀鍦ㄧ姸鎬佸浘涓璅IN_WAIT_2鐘舵佷腑錛屾鏃朵繚媧繪満鍒朵粛鐒跺湪宸ヤ綔褰撲腑錛屽鏋滃绔凡緇忓叧闂紝閭d箞淇濇椿鏈哄埗灝嗗湪媯嫻嬪埌鏃剁珛鍗沖叧闂繖涓榪炴帴銆?br> 
 涓嬪浘鏄竴涓吀鍨嬬殑榪炴帴寤虹珛涓庤繛鎺ュ叧闂殑紺烘剰鍥撅紝姝ゅ浘鎽樿嚜銆奣CP/IP璇﹁В 鍗蜂竴銆嬨?br> 
 
 
鍥涖乀DP浼犺緭鏁版嵁嫻?br> 
 1錛庝紶杈撶殑鎶ユ枃孌?br> 
 鍦═DP宸ヤ綔榪囩▼涓紶杈撶殑鎵鏈夋姤鏂囨錛屽彧鏈塖YN鎶ユ枃孌點丗IN鎶ユ枃孌點佹暟鎹姤鏂囨鏄彲闈犵殑涔嬪錛屽叾瀹冩姤鏂囨濡侫CK鎶ユ枃孌點丩IV鎶ユ枃孌點丷ST鎶ユ枃孌電瓑閮戒笉鏄彲闈犵殑銆係YN鎶ユ枃孌典笌FIN鎶ユ枃孌典紶杈撲腑閮藉崰鐢ㄤ竴涓簭鍙鳳紝鏁版嵁鎶ユ枃孌靛湪浼犺緭涓牴鎹紶杈撶殑鏁版嵁瀛楄妭鏁板崰鐢ㄧ浉搴旂殑搴忓彿錛屽叾瀹冩姤鏂囨涓嶅崰鐢ㄤ紶杈撳簭鍙楓?br> 鎴愬姛鎺ユ敹鏁版嵁鎶ユ枃孌碉紝搴斿綋灝嗘寜搴忓涓嬩竴涓湡鏈涚殑鏁版嵁鎶ユ枃孌電殑搴忓彿浣滀負紜搴忓彿鍙戦丄CK鎶ユ枃孌佃繘琛岀‘璁ゃ傚綋鍑虹幇鎺ユ敹鍒頒貢搴忕殑鏁版嵁鎶ユ枃孌墊椂錛屽皢涔卞簭鏁版嵁鎶ユ枃孌墊寜搴忕紦瀛橈紝騫跺彂閫佹湡鏈涙姤鏂囨鐨凙CK鎶ユ枃孌佃繘琛岀‘璁ゃ侫CK鎶ユ枃孌電殑鍙戦佸茍闈炲嵆鏃剁殑錛屼篃騫墮潪鏄搴旀帴鏀舵暟鎹姤榪涜涓瀵逛竴紜鍙戦併侫CK鎶ユ枃孌電敱200ms瀹氭椂瑙﹀彂鍙戦侊紝涔熷氨鏄ACK鎶ユ枃孌佃緇忓彈鏈澶?00ms鐨勬椂寤惰繘琛屽彂閫併侫CK鎶ユ枃孌靛姝ゆ椂鏈熸湜鐨勬暟鎹簭鍙瘋繘琛岀‘璁わ紝鍥犳騫朵笉鏄笌鎺ユ敹鏁版嵁鎶ョ浉瀵瑰簲銆侫CK鎶ユ枃孌墊槸涓嶅彲闈犵殑錛屽綋涓㈠け鏃跺绔皢鏃犳硶浜嗚В鎺ユ敹鎯呭喌錛屽洜姝ゅ彂閫佹柟灝嗕細鏈変竴涓秴鏃舵満鍒訛紝濡傛灉鍙戠幇紜鐨凙CK鎶ユ枃孌佃秴鏃訛紝鍙戦佹柟灝嗛噸鍙戣鏁版嵁鎶ワ紝榪欎竴鐐瑰湪絎簲鑺傝繘琛岃緇嗘弿榪般?br> 
 2錛庤礬寰凪TU鍙戠幇鍙奙SS閫氬憡
 
 鍓嶉潰宸茬粡鎻愬埌瑕佸湪榪炴帴寤虹珛榪囩▼涓細閫氬憡鍒濆MSS錛岃繖涓煎彲浠ョ敱鐢ㄦ埛紼嬪簭榪涜璁劇疆銆備絾榪欎釜鍒濆鍊兼槸涓涓潤鎬佺殑銆傚綋閫氫俊鐨勪袱涓鐐逛箣闂磋法瓚婂涓綉緇滄椂錛屼嬌鐢ㄨ緗殑MSS榪涜鎶ユ枃孌靛彂閫佹椂錛屽彲鑳藉鑷翠紶杈撶殑IP鎶ユ枃鍒嗙墖鎯呭喌鐨勪駭鐢熴備負浜嗛伩鍏嶅垎鐗囨儏鍐電殑浜х敓錛孴DP鍦ㄦ暟鎹紶杈撹繃紼嬩腑榪涜鍔ㄦ佺殑璺緞MTU鍙戠幇錛屽茍榪涜MSS鐨勬洿鏂板強閫氬憡銆?br> TDP鍒涘緩UDP SOCKET鏃訛紝鍗沖皢鎻忚堪絎﹁緗甀P閫夐」涓轟笉鍏佽榪涜鍒嗙墖錛坰etsockopt (clientSock, IPPROTO_IP, IP_DONTFRAGMENT,(char*)&dwFlags, sizeof(dwFlags))錛夈傚湪鍙戦佹暟鎹椂浠ュ綋鍓峂SS澶у皬鍊艱繘琛屾暟鎹彂閫侊紝濡傛灉榪斿洖鍊間負閿欒鐮乄SAEMSGSIZE錛?0040錛夎〃紺轟負鎶ユ枃孌靛敖瀵稿ぇ浜嶮TU錛岄渶瑕佽繘琛孖P鍒嗙墖浼犺緭銆傛鏃訛紝緙╁噺MSS澶у皬鍐嶆榪涜鎶ユ枃孌靛彂閫侊紝鐩磋嚦涓嶅啀榪斿洖閿欒鐮乄SAEMSGSIZE錛?0040錛夈傚綋MSS鍙樻洿騫惰兘鎴愬姛鍙戦佹姤鏂囨鍚庯紝闇瑕佸悜瀵圭閫氭姤鏂扮殑MSS鍊箋傛瘡嬈SS緙╁皬鍚庯紝榛樿闅?0縐掞紝TDP灝嗛粯璁ゆ墿澶SS澶у皬錛屼互媯鏌ユ槸鍚﹁礬寰凪TU澧炲ぇ浜嗭紙榛樿鍊煎彲浠ョ敱鐢ㄦ埛紼嬪簭璁劇疆錛夛紝涔嬪悗闅?0*2縐掋?0*2*2縐掕繘琛屾嫻嬶紝濡傛灉涓夋閮芥湭鍙戠幇MTU澧炲ぇ鍒欏仠姝㈣繘琛屾嫻嬨傝RFC1191鎻忚堪錛岀綉緇滀腑MTU鍊肩殑涓暟鏄湁闄愮殑錛屽涓嬪浘鎻忚堪錛堟憳鑷猂FC1191錛夈傚洜姝SS鐨勬墿澶у強緙╁噺錛屽彲渚濇嵁涓浜涚敱榪戜技鍊兼寜搴忔瀯鎴愮殑琛紝渚濈収姝よ〃绱㈠紩榪涜MSS鍊肩殑鎵╁ぇ涓庣緝鍑忚綆椼?br> 
 TDP涓璏SS涓嶮TU涔嬮棿鍏崇郴鐨勮綆楀叕寮忓涓嬶細
 MSS = MTU – 20(IP棣栭儴) – 8(UDP棣栭儴) – 12(TDP棣栭儴)銆?br> 
 3錛嶯agle綆楁硶
 
 鏈変簺浜鴻璁や負緇忓彈鏃跺歡鐨勬崕甯CK鍙戦佹槸Nagle綆楁硶錛屽叾瀹炰笉鏄傜粡鍙楁椂寤剁殑鎹庡甫ACK鍙戦佹槸TCP鐨勯氬父瀹炵幇錛屽湪TDP涓篃鏄姝ゃ傝孨agle綆楁硶鏄姹備竴涓猅CP錛圱DP涔熸槸濡傛錛夎繛鎺ヤ笂鏈澶氬彧鑳芥湁涓涓湭琚‘璁ょ殑鏈畬鎴愮殑鎶ユ枃孌碉紝鍦ㄨ鎶ユ枃孌電殑紜鍒拌揪涔嬪墠涓嶈兘鍙戦佸叾浠栫殑鎶ユ枃孌點傜浉鍙嶏紝TCP錛圱DP涔熸槸濡傛錛夊湪榪欎釜鏃跺欐敹闆嗚繖浜涙姤鏂囨錛屽叧鍦ㄧ‘璁ゅ埌鏉ユ椂鍚堝茍浣滀負涓涓姤鏂囨鍙戦佸嚭鍘匯侼agle綆楁硶瀵逛簬澶勭悊搴旂敤紼嬪簭浜х敓澶ч噺灝忔姤鏂囨鐨勬儏鍐碉紝鏈夊埄浜庨伩鍏嶇綉緇滀腑鐢變簬鍙戦佸お澶氱殑鍖呰岃繃杞斤紙榪欎究鏄彂閫佺鐨勭硦娑傜獥鍙g患鍚堢棁錛屽叧浜庣硦娑傜獥鍙g患鍚堢棁鍦ㄤ笅鏂囧皢鍋氭洿璇︾粏鎻忚堪錛夈?br> Nagle綆楁硶閫傜敤浜庝駭鐢熷ぇ閲忓皬鎶ユ枃孌電殑鎯呭喌錛屼絾鏈夋椂鎴戜滑闇瑕佸叧闂璑agle綆楁硶銆備竴涓吀鍨嬬殑渚嬪瓙鏄疿紿楀彛緋葷粺鏈嶅姟鍣細灝忔秷鎭紙榧犳爣縐誨姩錛夊繀欏繪棤鏃跺歡鍦板彂閫侊紝浠ヤ究涓鴻繘琛屾煇縐嶆搷浣滅殑浜や簰鐢ㄦ埛鎻愪緵瀹炴椂鐨勫弽棣堛?br> 榛樿鐨凾DP瀹炵幇涓璑agle綆楁硶鏄叧闂殑錛岀敤鎴風▼搴忓彲浠ヨ緗墦寮瀹冦?br> 
 4錛庣獥鍙eぇ灝忛氬憡涓庢粦鍔ㄧ獥鍙?br> 
 鍙屾柟鎺ユ敹妯″潡闇瑕佷緷鎹悇鑷殑緙撳啿鍖哄ぇ灝忥紝鐩鎬簰閫氬憡榪樿兘鎺ュ彈瀵規柟鏁版嵁鐨勫昂瀵搞傚弻鏂瑰彂閫佹ā鍧楀垯蹇呴』鏍規嵁瀵規柟閫氬憡鐨勬帴鏀剁獥鍙eぇ灝忥紝榪涜鏁版嵁鍙戦併傝繖縐嶆満鍒剁О涔嬭皳婊戝姩紿楀彛錛屽畠鏄疶DP鎺ユ敹鏂圭殑嫻侀噺鎺у埗鏂規硶銆傚畠鍏佽鍙戦佹柟鍦ㄥ仠姝㈠茍絳夊緟紜鍓嶅彲浠ヨ繛緇彂閫佸涓垎緇勶紙渚濇嵁婊戝姩紿楀彛鐨勫ぇ灝忥級錛岀敱浜庡彂閫佹柟涓嶅繀姣忓彂涓涓垎緇勫氨鍋滀笅鏉ョ瓑寰呯‘璁わ紝鍥犳鍙互鍔犻熸暟鎹殑浼犺緭銆?br> 鍙傜収銆奣CP/IP璇﹁В 鍗蜂竴 20.3婊戝姩紿楀彛銆嬩竴鑺傦紝婊戝姩紿楀彛鍦ㄦ帓搴忔暟鎹祦涓婁笉鏃剁殑鍚戝彸縐誨姩錛岀獥鍙d袱涓竟娌跨殑鐩稿榪愬姩澧炲姞鎴栧噺灝戜簡紿楀彛鐨勫ぇ灝忥紝鍏充簬紿楀彛杈規部鐨勮繍鍔ㄦ湁涓変釜鏈錛氱獥鍙e悎鎷紙褰撳乏杈規部鍚戝彸杈規部闈犺繎錛夈佺獥鍙e紶寮錛堝綋鍙寵竟娌垮悜鍙崇Щ鍔級銆佺獥鍙f敹緙╋紙褰撳彸杈規部鍚戝乏縐誨姩錛夈俁FC鏂囨。寮虹儓寤鴻涓嶈鍦ㄥ疄鐜板綋涓嚭鐜扮獥鍙f敹緙╃殑鎯呭喌鍑虹幇錛屽湪鎴戜滑鐨勫疄鐜頒腑涔熷皢涓嶄細鍑虹幇銆?br> 褰撻亣鍒板揩鐨勫彂閫佹柟涓庢參鐨勬帴鏀舵柟鐨勬儏鍐墊椂錛屾帴鏀舵柟鐨勭獥鍙d細寰堝揩琚彂閫佹柟鐨勬暟鎹~婊★紝姝ゆ椂鎺ユ敹鏂瑰皢閫氬憡紿楀彛澶у皬涓?,鍙戦佹柟鍒欏仠姝㈠彂閫佹暟鎹傜洿鍒版帴鏀舵柟鐢ㄦ埛紼嬪簭鍙栬蛋鏁版嵁鍚庢洿鏂扮獥鍙eぇ灝忥紝鍙戦佹柟鍙互緇х畫鍙戦佹暟鎹紱鍙﹀錛屽洜涓篈CK鎶ユ枃孌墊湁鍙兘涓㈠け錛屽彂閫佹柟鍙兘娌℃湁鎴愬姛鎺ユ敹鍒版洿鏂扮殑紿楀彛澶у皬錛屽洜姝ゅ彂閫佹柟灝嗗惎鍔ㄤ竴涓潥鎸佸畾鏃跺櫒錛屽綋鍧氭寔瀹氭椂鍣ㄨ秴鏃訛紝鍙戦佹柟灝嗗彂閫佷竴涓瓧鑺傜殑鏁版嵁鍒版帴鏀舵柟錛屽皾璇曟鏌ョ獥鍙eぇ灝忕殑鏇存柊銆?br> 鍦∟agle綆楁硶涓帴鍒拌繃緋婃秱紿楀彛緇煎悎鐥囷紝鍦ㄨ繖閲岃榪涗竴姝ヨ繘琛屾弿榪般傜硦娑傜獥鍙g患鍚堢棁鏄寚浼楀灝戦噺鏁版嵁鐨勬姤鏂囨灝嗛氳繃榪炴帴榪涜浜ゆ崲錛岃屼笉鏄弧闀垮害鐨勬姤鏂囨錛岃繖灝嗗鑷磋繛鎺ュ崰鐢ㄨ繃澶氬甫瀹斤紝闄嶄綆浼犺緭閫熺巼銆傜硦娑傜獥鍙g患鍚堢棁浜х敓鏄垎涓ょ鐨勶紝鎺ユ敹鏂瑰彲浠ラ氬憡涓涓皬鐨勭獥鍙o紙鑰屼笉鏄竴鐩寸瓑鍒版湁澶х殑紿楀彛鏃舵墠閫氬憡錛夛紝鍙戦佹柟涔熷彲浠ュ彂閫佸皯閲忕殑鏁版嵁錛堣屼笉鏄瓑寰呭叾浠栫殑鏁版嵁浠ヤ究鍙戦佷竴涓ぇ鐨勬姤鏂囨錛夈傝浠ラ噰鐢ㄥ涓嬫柟娉曢伩鍏嶈繖涓鐜拌薄錛?br> 1錛夋帴鏀舵柟涓嶉氬憡灝忕獥鍙c傞氬父鐨勭畻娉曟槸鎺ユ敹鏂逛笉閫氬憡涓涓瘮褰撳墠紿楀彛澶х殑紿楀彛錛堝彲浠ヤ負0錛夛紝闄ら潪紿楀彛鍙互澧炲姞涓涓姤鏂囨澶у皬(涔熷氨鏄皢瑕佹帴鏀剁殑MSS)鎴栬呭彲浠ュ鍔犵紦瀛樼┖闂寸殑涓鍗婏紝涓嶈瀹為檯鏈夊灝戙?br> 2錛夊彂閫佹柟閬垮厤鍑虹幇緋婃秱紿楀彛緇煎悎鐥囩殑鎺柦鏄彧鏈変互涓嬫潯浠朵箣涓婊¤凍鏃舵墠鍙戦佹暟鎹細(a)鍙互鍙戦佷竴涓弧闀垮害鐨勬姤鏂囨錛?b)鍙互鍙戦佽嚦灝戞槸鎺ユ敹鏂歸氬憡紿楀彛澶у皬涓鍗婄殑鎶ユ枃孌碉紱(c)鍙互鍙戦佷換浣曟暟鎹茍涓斾笉甯屾湜鎺ユ敹ACK錛堜篃灝辨槸璇達紝鎴戜滑娌℃湁榪樻湭琚‘璁ょ殑鏁版嵁錛夋垨鑰呰榪炴帴涓婁笉鑳戒嬌鐢∟agle綆楁硶銆?br> 
 5錛嶱USH鏍囧織
 
 PSUH鏍囧織鐨勪綔鐢ㄦ槸鍙戦佹柟浣跨敤PUSH鏍囧織閫氱煡鎺ユ敹鏂瑰皢鎵鏀跺埌鐨勬暟鎹叏閮ㄦ彁浜ょ粰鎺ユ敹榪涚▼銆傚湪TDP瀹炵幇涓紝鐢ㄦ埛紼嬪簭騫朵笉闇瑕佸叧蹇働USH鏍囧織銆傚洜涓篢DP瀹炵幇浠庝笉灝嗘帴鏀跺埌鐨勬暟鎹帹榪熶氦浠樼粰鐢ㄦ埛紼嬪簭錛屽洜姝よ繖涓爣蹇楀湪TDP鐨勫疄鐜頒腑鏄蹇界暐鐨勩?br> 
浜斻乀DP瓚呮椂涓庨噸浼?br> 
 1錛庡甫瀹芥椂寤朵箻縐笌鎷ュ
 
 姣忎釜緗戠粶閫氶亾閮芥湁涓瀹氱殑瀹歸噺錛屽彲浠ヨ綆楅氶亾鐨勫閲忓ぇ灝忥細
 Capacity(bit) = bandwidth(b/s) * round-trip time(s)
 榪欎釜鍊間竴鑸О涔嬩負甯﹀鏃跺歡涔樼Н銆傝繖涓間緷璧栦簬緗戠粶閫熷害鍜屼袱绔殑RTT錛屽彲浠ユ湁寰堝ぇ鐨勫彉鍔ㄣ備笉璁烘槸甯﹀榪樻槸鏃跺歡鍧囦細褰卞搷鍙戦佹柟涓庢帴鏀舵柟涔嬮棿閫氳礬鐨勫閲忋?br> 褰撴暟鎹埌杈句竴涓ぇ鐨勭綉緇滈氶亾騫跺悜涓涓皬鐨勭綉緇滈氶亾鍙戦侊紝灝嗗彂鐢熸嫢濉炵幇璞°傚彟澶栧綋澶氫釜杈撳叆嫻佸埌杈句竴涓礬鐢卞櫒錛岃岃礬鐢卞櫒鐨勮緭鍑烘祦灝忎簬榪欎簺杈撳叆嫻佺殑鎬誨拰鏃朵篃浼氬彂鐢熸嫢濉炪俆DP瓚呮椂涓庨噸浼犳満鍒跺垰閲囩敤TCP鐨勬嫢濉炴帶鍒剁畻娉曟潵榪涜鍙戦佺鐨勬祦閲忔帶鍒躲?br> 
 2錛庡線榪旀椂闂翠笌閲嶄紶瓚呮椂鏃墮棿嫻嬮噺
 
 瓚呮椂涓庨噸浼犱腑鏈閲嶈鐨勯儴鍒嗗氨鏄涓涓粰瀹氳繛鎺ョ殑寰榪旀椂闂達紙RTT錛夌殑嫻嬮噺銆傜敱浜庤礬鐢卞櫒鍜岀綉緇滄祦閲忓潎浼氬彂鐢熷彉鍖栵紝鍥犳涓鑸涓篟TT鍙兘緇忓父浼氬彂鐢熷彉鍖栵紝TDP搴旇璺熻釜榪欎簺鍙樺寲騫剁浉搴斿湴鏀瑰彉鐩稿簲鐨勮秴鏃舵椂闂淬?br> 棣栧厛鏄繀欏繪祴閲忓湪鍙戦佷竴涓甫鏈夌壒鍒簭鍙風殑瀛楄妭鍜屾帴鏀跺埌鍖呭惈瀛楄妭鐨勭‘璁や箣闂寸殑RTT銆傜敱浜庢暟鎹姤鏂囨涓嶢CK涔嬮棿閫氬父娌℃湁涓涓瀵瑰簲鐨勫叧緋伙紝濡備笅鍥撅紙鎽樿嚜銆奣CP/IP璇﹁В 鍗蜂竴銆嬪浘20.1錛変腑錛岃繖鎰忓懗鐫鍙戦佹柟鍙互嫻嬮噺鍒扮殑涓涓猂TT錛屾槸鍦ㄥ彂閫佹姤鏂囨4鍜屾帴鏀舵姤鏂囨7涔嬮棿鐨勬椂闂達紝鐢∕琛ㄧず鎵嫻嬮噺鍒扮殑RTT銆?br> 鏍規嵁[Jacobson 1988]鎻忚堪錛堣銆奣CP/IP璇﹁В 鍗蜂竴銆嬪弬鑰冩枃鐚級錛岀敤A琛ㄧず琚鉤婊戠殑RTT錛堝潎鍊間及璁″櫒錛夛紝鐢―琛ㄧず琚鉤婊戠殑鍧囧煎亸宸紝鐢‥rr琛ㄧず鍒氬緱鍒扮殑嫻嬮噺緇撴灉M涓庡綋鍓峈TT浼拌鍣ㄤ箣宸紝鍒欏彲浠ヨ綆椾笅涓涓秴鏃墮噸浼犳椂闂達紙鐢≧TO琛ㄧず涓嬩竴涓秴鏃墮噸浼犳椂闂達級銆?br> A = 0 錛堟湭榪涜嫻嬮噺寰榪旀椂闂翠箣鍓嶏紝A鐨勫垵濮嬪鹼級
 D = 3 錛堟湭榪涜嫻嬮噺寰榪旀椂闂翠箣鍓嶏紝D鐨勫垵濮嬪鹼級
 RTO = A + 2D = 6 錛堟湭榪涜嫻嬮噺寰榪旀椂闂翠箣鍓嶏紝RTO鐨勫垵濮嬪鹼級
 A = M + 0.5 (絎竴嬈℃祴閲忓埌寰榪旀椂闂寸粨鏋滐紝瀵筊TT浼拌鍣ㄨ綆楀垵濮嬪?
 D = A / 2 錛堢涓嬈℃祴閲忓埌寰榪旀椂闂寸粨鏋滐紝瀵瑰潎鍊煎亸宸瓺璁$畻鍒濆鍊鹼級
 RTO = A + 4D 錛堢涓嬈℃祴閲忓埌寰榪旀椂闂寸粨鏋滐紝瀵瑰潎鍊煎亸宸甊TO璁$畻鍒濆鍊鹼級
 涔嬪悗鐨勮綆楁柟娉曞涓嬶細
 Err = M – A
 A <- A + gErr
 D <- D + h(|Err| - D)
 RTO = A + 4D
 鍏朵腑g鏄父閲忓閲忥紝鍙栧間負1/8(0.125)錛沨涔熸槸甯擱噺澧為噺錛屽彇鍊間負1/4(0.25)銆?br> 
 
 
 Karn綆楁硶錛欿arn綆楁硶鏄В鍐蟲墍璋撶殑閲嶄紶澶氫箟鎬ч棶棰樼殑銆俒Karn and Partridge 1987]瑙勫畾錛堣銆奣CP/IP璇﹁В 鍗蜂竴銆嬪弬鑰冩枃鐚級錛屽綋涓涓秴鏃跺拰閲嶄紶鍙戠敓鏃訛紝鍦ㄩ噸浼犳暟鎹殑紜鏈鍚庡埌杈句箣鍓嶏紝涓嶈兘鏇存柊RTT浼拌鍣紝鍥犱負鎴戜滑騫朵笉鐭ラ亾ACK瀵瑰簲鍝浼犺緭錛堜篃璁哥涓嬈′紶杈撹寤惰繜鑰屽茍娌℃湁琚涪寮冿紝涔熸湁鍙兘鏄涓嬈′紶杈撶殑ACK琚歡榪熶涪寮冿級銆傚茍涓旓紝鐢變簬鏁版嵁琚噸浼狅紝RTO宸茬粡寰楀埌浜嗕竴涓寚鏁伴閬匡紝鎴戜滑鍦ㄤ笅涓嬈′紶杈撴椂浣跨敤榪欎釜閫閬垮悗鐨凴TO銆傚涓涓病鏈夎閲嶄紶鐨勬姤鏂囨鑰岃█錛岄櫎闈炴敹鍒頒簡涓涓‘璁わ紝鍚﹀垯涓嶈璁$畻鏂扮殑RTO銆?br> 鍦ㄤ換浣曟椂鍊欏姣忎釜榪炴帴騫惰浠呮祴閲忎竴嬈TT鍊鹼紝鍦ㄥ彂閫佷竴涓姤鏂囨鏃訛紝濡傛灉緇欏畾榪炴帴鐨勫畾鏃跺櫒宸茬粡琚嬌鐢紝鍒欒鎶ユ枃孌典笉琚鏃訛紝鍙嶄箣濡傛灉緇欏畾榪炴帴鐨勫畾鏃跺櫒鏈浣跨敤錛屽垯寮濮嬭鏃朵互嫻嬮噺RTT鍊箋傚嵆騫墮潪姣忎釜鍙戝嚭鎶ユ枃孌甸兘榪涜嫻嬮噺RTT鍊鹼紝鍚屼竴鏃墮棿孌甸噷鍙兘鏈変竴涓猂TT鍊兼祴閲忚涓鴻繘琛岋紝涓嶄細騫惰榪涜澶氫釜RTT鍊兼祴閲忋?br> 
 3錛庢參鍚姩
 
 濡傛灉鍙戦佹柟涓寮濮嬩究鍚戠綉緇滃彂閫佸涓姤鏂囨錛岀洿鑷寵揪鍒版帴鏀舵柟閫氬憡紿楀彛澶у皬涓烘銆傚綋鍙戦佹柟涓庢帴鏀舵柟鍦ㄥ悓涓灞鍩熺綉鏃訛紝榪欑鏂瑰紡鏄彲浠ョ殑銆備絾濡傛灉鍦ㄥ彂閫佹柟涓庢帴鏀舵柟涔嬮棿瀛樺湪澶氫釜璺敱鍣ㄥ拰閫熺巼杈冩參鐨勯摼璺椂錛屽氨鍙兘鍑虹幇闂銆備竴浜涗腑闂磋礬鐢卞櫒蹇呴』緙撳瓨鍒嗙粍錛屽茍鏈夊彲鑳借楀敖瀛樺偍鍣ㄧ殑絀洪棿錛屽皢鏉ュ緱闄嶄綆TCP榪炴帴鐨勫悶鍚愰噺銆備簬鏄渶瑕佷竴縐嶅彨“鎱㈠惎鍔?#8221;鐨勬嫢濉炴帶鍒剁畻娉曘?br> 鎱㈠惎鍔ㄤ負鍙戦佹柟澧炲姞涓涓嫢濉炵獥鍙o紝璁頒負cwnd錛屽綋涓庡彟涓涓綉緇滅殑涓繪満寤虹珛榪炴帴鏃訛紝鎷ュ紿楀彛琚垵濮嬪寲涓?涓姤鏂囨銆傛瘡鏀跺埌涓涓狝CK錛屾嫢濉炵獥鍙e氨澧炲姞涓涓姤鏂囨錛坈wnd浠ュ瓧鑺備負鍗曚綅錛屼絾鎱㈠惎鍔ㄤ互鎶ユ枃孌靛ぇ灝忎負鍗曚綅榪涜澧炲姞錛夈傚彂閫佹柟鍙栨嫢濉炵獥鍙d笌閫氬憡紿楀彛涓殑鏈灝忓間綔涓哄彂閫佷笂闄愩傛嫢濉炵獥鍙f槸鍙戦佹柟浣跨敤鐨勬祦閲忔帶鍒訛紝鑰岄氬憡紿楀彛鏄帴鏀舵柟浣跨敤鐨勬祦閲忔帶鍒躲?br> 鍙戦佹柟寮濮嬫椂鍙戦佷竴涓姤鏂囨錛岀劧鍚庣瓑寰匒CK銆傚綋鏀跺埌璇CK鏃訛紝鎷ュ紿楀彛浠?澧炲姞鍒?,鍗沖彲浠ュ彂閫佷袱涓姤鏂囨銆傚綋鏀跺埌榪欎袱涓姤鏂囨鐨凙CK鏃訛紝鎷ュ紿楀彛灝卞鍔犱負4銆傝繖鏄竴縐嶆寚鏁板鍔犵殑鍏崇郴銆?br> 
 4錛庢嫢濉為伩鍏?br> 
 鎱㈠惎鍔ㄧ畻娉曞鍔犳嫢濉炵獥鍙eぇ灝忓埌鏌愪簺鐐逛笂鍙兘杈懼埌浜嗕簰鑱旂綉鐨勫閲忥紝浜庢槸涓棿璺敱鍣ㄥ紑濮嬩涪寮冨垎緇勩傝繖灝遍氱煡鍙戦佹柟瀹冪殑鎷ュ紿楀彛寮寰楀お澶с傛嫢濉為伩鍏嶇畻娉曟槸涓縐嶅鐞嗕涪澶卞垎緇勭殑鏂規硶銆傝綆楁硶鍋囧畾鐢變簬鍒嗙粍鍙楀埌鎹熷潖寮曡搗鐨勪涪澶辨槸闈炲父灝戠殑錛堣繙灝忎簬1錛咃級錛屽洜姝ゅ垎緇勪涪澶卞氨鎰忓懗鐫鍦ㄦ簮涓繪満鍜岀洰鏍囦富鏈轟箣闂寸殑鏌愬緗戠粶涓婂彂鐢熶簡鎷ュ銆傛湁涓ょ鍒嗙粍涓㈠け鐨勬寚紺猴細鍙戠敓瓚呮椂鍜屾帴鏀跺埌閲嶅鐨勭‘璁ゃ傛嫢濉為伩鍏嶇畻娉曚笌鎱㈠惎鍔ㄧ畻娉曟槸涓や釜鐙珛鐨勭畻娉曪紝浣嗗疄闄呬腑榪欎袱涓畻娉曢氬父鍦ㄤ竴璧峰疄鐜般?br> 鎷ュ閬垮厤綆楁硶鍜屾參鍚姩綆楁硶闇瑕佸姣忎釜榪炴帴緇存寔涓や釜鍙橀噺錛氫竴涓嫢濉炵獥鍙wnd鍜屼竴涓參鍚姩闂ㄩ檺ssthresh銆傜畻娉曠殑宸ヤ綔榪囩▼濡備笅錛?br> 1) 瀵逛竴涓粰瀹氱殑榪炴帴錛屽垵濮嬪寲cwnd涓?涓姤鏂囨錛宻sthresh涓?5535涓瓧鑺傘?br> 2) TCP杈撳嚭渚嬬▼鐨勮緭鍑轟笉鑳借秴榪嘽wnd鍜屾帴鏀舵柟閫氬憡紿楀彛鐨勫ぇ灝忋傛嫢濉為伩鍏嶆槸鍙戦佹柟浣跨敤鐨勬祦閲忔帶鍒訛紝鑰岄氬憡紿楀彛鍒欐槸鎺ユ敹鏂硅繘琛岀殑嫻侀噺鎺у埗銆傚墠鑰呮槸鍙戦佹柟鎰熷彈鍒扮殑緗戠粶鎷ュ鐨勪及璁★紝鑰屽悗鑰呭垯涓庢帴鏀舵柟鍦ㄨ榪炴帴涓婄殑鍙敤緙撳瓨澶у皬鏈夊叧銆?br> 3) 褰撴嫢濉炲彂鐢熸椂錛堣秴鏃舵垨鏀跺埌閲嶅紜錛夛紝ssthresh琚緗負褰撳墠紿楀彛澶у皬鐨勪竴鍗婏紙cwnd鍜屾帴鏀舵柟閫氬憡紿楀彛澶у皬鐨勬渶灝忓鹼紝浣嗘渶灝戜負2涓姤鏂囨錛夈傛澶栵紝濡傛灉鏄秴鏃跺紩璧蜂簡鎷ュ錛屽垯cwnd琚緗負1涓姤鏂囨錛堣繖灝辨槸鎱㈠惎鍔級銆?br> 4) 褰撴柊鐨勬暟鎹瀵規柟紜鏃訛紝灝卞鍔燾wnd錛屼絾澧炲姞鐨勬柟娉曚緷璧栦簬鎴戜滑鏄惁姝e湪榪涜鎱㈠惎鍔ㄦ垨鎷ュ閬垮厤銆傚鏋渃wnd灝忎簬鎴栫瓑浜巗sthresh錛屽垯姝e湪榪涜鎱㈠惎鍔紝鍚﹀垯姝e湪榪涜鎷ュ閬垮厤銆傛參鍚姩涓鐩存寔緇埌鎴戜滑鍥炲埌褰撴嫢濉炲彂鐢熸椂鎵澶勪綅緗殑鍗婃椂鍊欐墠鍋滄錛堝洜涓烘垜浠褰曚簡鍦ㄦ楠?涓粰鎴戜滑鍒墮犻夯鐑︾殑紿楀彛澶у皬鐨勪竴鍗婏級錛岀劧鍚庤漿涓烘墽琛屾嫢濉為伩鍏嶃?br> 鎱㈠惎鍔ㄧ畻娉曞垵濮嬭緗甤wnd涓?涓姤鏂囨錛屾鍚庢瘡鏀跺埌涓涓‘璁ゅ氨鍔?銆傝繖浼氫嬌紿楀彛鎸夋寚鏁版柟寮忓闀匡細鍙戦?涓姤鏂囨錛岀劧鍚庢槸2涓紝鎺ョ潃鏄?涓?#8230;…銆傛嫢濉為伩鍏嶇畻娉曡姹傛瘡嬈℃敹鍒頒竴涓‘璁ゆ椂灝哻wnd澧炲姞1/cwnd銆備笌鎱㈠惎鍔ㄧ殑鎸囨暟澧炲姞姣旇搗鏉ワ紝榪欐槸涓縐嶅姞鎬у闀褲傛垜浠笇鏈涘湪涓涓線榪旀椂闂村唴鏈澶氫負cwnd澧炲姞1涓姤鏂囨錛堜笉綆″湪榪欎釜RT T涓敹鍒頒簡澶氬皯涓狝CK錛夛紝鐒惰屾參鍚姩灝嗘牴鎹繖涓線榪旀椂闂翠腑鎵鏀跺埌鐨勭‘璁ょ殑涓暟澧炲姞cwnd銆?br> 澶勪簬鎷ュ閬垮厤鐘舵佹椂錛屾嫢濉炵獥鍙g殑璁$畻鍏紡濡備笅錛堝紩鍏紡鍙傜収BSD鐨勫疄鐜幫紝segsize/8鐨勫兼槸涓涓尮閰嶈ˉ鍏呴噺錛屼笉鍦ㄧ畻娉曟弿榪板綋涓級錛?br> cwnd <- cwnd + segsize * segsize / cwnd + segsize / 8
 
 5錛庡揩閫熼噸浼犱笌蹇熸仮澶?br> 
 鐢變簬鎴戜滑涓嶇煡閬撲竴涓噸澶嶇殑ACK鏄敱涓涓涪澶辯殑鎶ユ枃孌靛紩璧風殑錛岃繕鏄敱浜庝粎浠呭嚭鐜頒簡鍑犱釜鎶ユ枃孌電殑閲嶆柊鎺掑簭錛屽洜姝ゆ垜浠瓑寰呭皯閲忛噸澶嶇殑ACK鍒版潵銆傚亣濡傝繖鍙槸涓浜涙姤鏂囨鐨勯噸鏂版帓搴忥紝鍒欏湪閲嶆柊鎺掑簭鐨勬姤鏂囨琚鐞嗗茍浜х敓涓涓柊鐨凙CK涔嬪墠錛屽彧鍙兘浜х敓1 ~ 2涓噸澶嶇殑ACK銆傚鏋滀竴榪炰覆鏀跺埌3涓垨3涓互涓婄殑閲嶅ACK錛屽氨闈炲父鍙兘鏄竴涓姤鏂囨涓㈠け浜嗐備簬鏄垜浠氨閲嶄紶涓㈠け鐨勬暟鎹姤鏂囨錛岃屾棤闇絳夊緟瓚呮椂瀹氭椂鍣ㄦ孩鍑恒傝繖灝辨槸蹇熼噸浼犵畻娉曘傛帴涓嬫潵鎵ц鐨勪笉鏄參鍚姩綆楁硶鑰屾槸鎷ュ閬垮厤綆楁硶銆傝繖灝辨槸蹇熸仮澶嶇畻娉曘?br> 榪欎釜綆楁硶閫氬父鎸夊涓嬭繃紼嬭繘琛屽疄鐜幫細
 1) 褰撴敹鍒扮3涓噸澶嶇殑ACK鏃訛紝灝唖sthresh璁劇疆涓哄綋鍓嶆嫢濉炵獥鍙wnd鐨勪竴鍗娿傞噸浼犱涪澶辯殑鎶ユ枃孌點傝緗甤wnd涓簊sthresh鍔犱笂3鍊嶇殑鎶ユ枃孌靛ぇ灝忋?br> 2) 姣忔鏀跺埌鍙︿竴涓噸澶嶇殑ACK鏃訛紝cwnd澧炲姞1涓姤鏂囨澶у皬騫跺彂閫?涓垎緇勶紙濡傛灉鏂扮殑cwnd鍏佽鍙戦侊級銆?br> 3) 褰撲笅涓涓‘璁ゆ柊鏁版嵁鐨凙CK鍒拌揪鏃訛紝璁劇疆cwnd涓簊sthresh錛堝湪絎?姝ヤ腑璁劇疆鐨勫鹼級銆傝繖涓狝CK搴旇鏄湪榪涜閲嶄紶鍚庣殑涓涓線榪旀椂闂村唴瀵規楠?涓噸浼犵殑紜銆傚彟澶栵紝榪欎釜ACK涔熷簲璇ユ槸瀵逛涪澶辯殑鍒嗙粍鍜屾敹鍒扮殑絎?涓噸澶嶇殑A C K涔嬮棿鐨勬墍鏈変腑闂存姤鏂囨鐨勭‘璁ゃ傝繖涓姝ラ噰鐢ㄧ殑鏄嫢濉為伩鍏嶏紝鍥犱負褰撳垎緇勪涪澶辨椂鎴戜滑灝嗗綋鍓嶇殑閫熺巼鍑忓崐銆?br> 
鍏佷唬鐞唖ocks5鏀寔
 
 鍙傜収RFC1928銆丷FC1929錛屽湪TDP瀹炵幇涓紝鏀寔鍖垮悕閫氳繃socks5浠g悊浠ュ強鐢ㄦ埛鍚?瀵嗙爜楠岃瘉鏂瑰紡閫氳繃socks5浠g悊銆?br> 鐢變簬socks5浠g悊鏄伐浣滀簬榪愯緭灞備笂錛屽洜姝よ繛鎺ュ綋涓IP灞傞夐」鐨勮緗兘灝嗘病鏈夋晥鏋溿俿ocks5浠g悊璧峰埌鐨勪綔鐢ㄥ彧鏄簲鐢ㄦ暟鎹殑杞彂錛屼絾榪欏凡緇忓熀鏈笂鑳芥敮鎸佸ぇ閮ㄥ垎鐢ㄦ埛紼嬪簭鐨勫簲鐢ㄩ渶姹傘傚湪浣跨敤socks5浠g悊榪涜宸ヤ綔涓紝璺緞MTU鐨勫彂鐜版満鍒訛紝灝嗘棤娉曟湁鏁堝伐浣滐紝姝ゆ椂MSS榛樿涓?36錛圡TU榛樿涓?76錛?鐢ㄦ埛紼嬪簭鍙互淇敼浣跨敤鐨凪SS鍊箋?br> 
涓冦佸畨鍏ㄨ冭檻
 
 TDP鍗忚鍙婄畻娉曟柟闈㈠茍涓嶅鏁版嵁鐨勫畨鍏ㄦу仛浠諱綍鑰冭檻錛岀敤鎴風▼搴忓湪浼犺緭鏁版嵁鏃跺鏋滃瀹夊叏鎬ф湁瑕佹眰錛屽彲浠ヨ嚜琛屽湪搴旂敤鏁版嵁灞傚仛鐩稿簲鐨勫伐浣溿備絾TDP瀹炵幇涓紝浼氭彁渚涗竴涓畝鍗曠殑AES256浣嶅姞瑙e瘑鏂規硶錛屾彁渚涚粰鐢ㄦ埛紼嬪簭浣跨敤銆傜敤鎴風▼搴忓彲浠ヨ皟鐢ㄨ鍔犺В瀵嗘柟娉曪紝瀵規暟鎹繘琛屽姞瀵嗙劧鍚庡啀閫氳繃緗戠粶榪涜鍙戦侊紝鎺ユ敹鏃跺皢鍔犲瘑鏁版嵁嫻佽繘琛岃В瀵嗗啀灝嗕細鐢ㄦ埛紼嬪簭鏁版嵁閫昏緫澶勭悊妯″潡榪涜澶勭悊銆?br> 
鍏佸畾鏃跺櫒
 
 濡侭SD鐨凾CP瀹炵幇綾諱技錛孴DP涔熶負姣忔潯榪炴帴寤虹珛浜嗗叚涓畾鏃跺櫒錛岀畝瑕佷粙緇嶅涓嬶細
 1錛?#8220;榪炴帴寤虹珛”瀹氭椂鍣紝鍦ㄥ彂閫丼YN鎶ユ枃孌靛緩绔嬩竴鏉℃柊鐨勮繛鎺ユ椂鍚姩銆傚鏋滄病鏈夊湪75縐掑唴鏀跺埌鍝嶅簲錛岃繛鎺ュ緩绔嬪皢涓銆?br> 2錛?#8220;閲嶄紶”瀹氭椂鍣紝鍦ㄥ彂閫佹暟鎹椂璁懼畾銆傚鏋滃畾鏃跺櫒宸茶秴鏃惰屽绔殑紜榪樻湭鍒拌揪錛屽皢閲嶄紶鏁版嵁銆傞噸浼犲畾鏃跺櫒鐨勫兼槸鍔ㄦ佽綆楃殑錛屽彇鍐蟲潵RTT涓庤鎶ユ枃孌佃閲嶄紶鐨勬鏁般?br> 3錛?#8220;寤惰繜ACK”瀹氭椂鍣紝鏀跺埌蹇呴』紜浣嗘棤闇椹笂鍙戝嚭紜鐨勬暟鎹椂璁懼畾銆傜瓑寰?00ms鍚庡彂閫佺‘璁ゅ搷搴斻傚鏋滐紝鍦ㄨ繖200ms鍐咃紝鏈夋暟鎹鍦ㄨ榪炴帴涓婂彂閫侊紝寤惰繜鐨凙CK鍝嶅簲灝卞彲闅忔暟鎹竴璧峰彂閫佸洖瀵圭錛岀О涓烘崕甯︾‘璁ゃ?br> 4錛?#8220;鍧氭寔”瀹氭椂鍣紝鍦ㄨ繛鎺ュ绔氬憡鎺ユ敹紿楀彛涓?,闃繪緇х畫鍙戦佹暟鎹椂璁懼畾銆傚潥鎸佸畾鏃跺櫒鍦ㄨ秴鏃跺悗鍚戝绔彂閫?瀛楄妭鐨勬暟鎹紝鍒ゅ畾瀵圭鎺ユ敹紿楀彛鏄惁宸茬粡鎵撳紑銆傚潥鎸佸畾鏃跺櫒鐨勫兼槸鍔ㄦ佺殑璁$畻鐨勶紝鍙栧喅浜嶳TT鍊鹼紝鍦?縐掍笌60縐掍箣闂村彇鍊箋?br> 5錛?#8220;淇濇椿”瀹氭椂鍣ㄣ俆DP榪炴帴鍦ㄤ竴瀹氭椂闂存鍐呭鏋滄病鏈夋暟鎹氦浜掔殑璇濓紝灝嗕富鍔ㄥ彂閫佷繚媧籐IV鎶ユ枃孌點傚嵆褰?#8220;淇濇椿”瀹氭椂鍣ㄨ秴鏃訛紝璇存槑娌℃湁鏁版嵁浜や簰錛屽垯鍙戦佷繚媧繪暟鎹寘銆備繚媧誨畾鏃跺櫒榛樿鏃墮棿涓?鍒嗛挓錛岀敤鎴風▼搴忓彲浠ヨ繘琛岃緗?br> 6錛塗IME_WAIT瀹氭椂鍣?涔熷彲縐頒負2MSL瀹氭椂鍣紙瀹炵幇涓紝涓涓狹SL涓?鍒嗛挓錛夈傚綋榪炴帴鐘舵佽漿縐誨埌TIME_WAIT鏃訛紝鍗寵繛鎺ヤ富鍔ㄥ叧闂椂錛屽畾鏃跺櫒鍚姩銆?br> 
涔濄佸紑鍙戞帴鍙?br> 
 浣跨敤TDP榪涜緗戠粶紼嬪簭寮鍙戞槸闈炲父瀹規槗鐨勶紝瀹冪殑寮鍙戞帴鍙o紙API錛変笌socket API鏄潪甯哥浉浼肩殑錛屽挨鍏舵槸瀵瑰簲鍔熻兘鐨勫嚱鏁板悕縐伴兘鏄竴鑷寸殑錛岄渶瑕佹敞鎰忕殑鏄疶DP鐨勬墍鏈堿PI閮藉浜庡悕縐扮┖闂碩DP涔嬩笅銆傚紑鍙戞帴鍙h涓嬭〃錛?br> 
鍑芥暟 鎻忚堪 
TDP::accept 鎺ュ彈涓涓摼鎺?nbsp;
TDP::bind 緇戝畾鏈湴鍦板潃鍒頒竴涓猅DP::SOCKET鍙ユ焺 
TDP::cleanup 娓呴櫎TDP鍏ㄥ眬璧勬簮錛屼竴涓繘紼嬩腑鍙渶瑕佽皟鐢ㄤ竴嬈?nbsp;
TDP::close 鍏抽棴宸叉墦寮鐨凾DP::SOCKET鍙ユ焺錛屽茍鍏抽棴榪炴帴 
TDP::connect 榪炴帴鍒版湇鍔″櫒绔?nbsp;
TDP::getlasterror 鑾峰緱TDP鏈鍚庣殑涓涓敊璇?nbsp;
TDP::getpeername 璇誨彇榪炴帴鐨勫绔殑鍦板潃淇℃伅 
TDP::getsockname 璇誨彇榪炴帴鐨勬湰鍦扮殑鍦板潃淇℃伅 
TDP::getsockopt 璇誨彇TDP鐨勯夐」淇℃伅 
TDP::listen 絳夊緟瀹㈡埛绔潵榪炴帴 
TDP::recv 鎺ユ敹鏁版嵁 
TDP::select 絳夊緟闆嗗悎涓殑TDP SOCKET鏀瑰彉鐘舵?nbsp;
TDP::send 鍙戦佹暟鎹?nbsp;
TDP::setsockopt 淇敼TDP鐨勯夐」淇℃伅 
TDP::shutdown 鎸囧畾鍏抽棴榪炴帴涓婂弻宸ラ氫俊鐨勯儴鍒嗘垨鍏ㄩ儴 
TDP::socket 鍒涘緩涓涓猅DP SOCKET 
TDP::startup 鍒濆鍖朤DP鍏ㄥ眬淇℃伅錛屼竴涓繘紼嬩腑鍙渶瑕佽皟鐢ㄤ竴嬈?nbsp;
 



灝忕帇 2010-04-12 16:35 鍙戣〃璇勮
]]>
TCP鐭繛鎺ヤ笌闀胯繛鎺?/title><link>http://www.shnenglu.com/jack-wang/archive/2010/03/24/110419.html</link><dc:creator>灝忕帇</dc:creator><author>灝忕帇</author><pubDate>Wed, 24 Mar 2010 03:32:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2010/03/24/110419.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/110419.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2010/03/24/110419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/110419.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/110419.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">  <br>  </p> <p style="FONT-SIZE: 10pt">鍒氭帴瑙CP/IP閫氫俊璁捐鐨勪漢鏍規嵁鑼冧緥鍙互寰堝揩緙栧嚭涓涓氫俊紼?<br>搴忥紝鎹涓浜涗漢鍙兘浼氳涓篢CP/IP緙栫▼寰堢畝鍗曘傚叾瀹炰笉鐒訛紝 <br>TCP/IP緙栫▼鍏鋒湁杈冧負涓板瘜鐨勫唴瀹廣傚叾緙栫▼鐨勪赴瀵屾т富瑕佷綋鐜板湪 <br>閫氫俊鏂瑰紡鍜屾姤鏂囨牸寮忕殑澶氭牱鎬т笂銆?</p> <p style="FONT-SIZE: 10pt"><br>涓銆傞氫俊鏂瑰紡 </p> <p style="FONT-SIZE: 10pt">涓昏鏈変互涓嬩笁澶х被: </p> <p style="FONT-SIZE: 10pt">(涓)SERVER/CLIENT鏂瑰紡 </p> <p style="FONT-SIZE: 10pt">1.涓涓狢lient鏂硅繛鎺ヤ竴涓猄erver鏂癸紝鎴栫О鐐瑰鐐?peer to peer)錛?<br>2.澶氫釜Client鏂硅繛鎺ヤ竴涓猄erver鏂癸紝榪欎篃鏄氬父鐨勫茍鍙戞湇鍔″櫒鏂瑰紡銆?<br>3.涓涓狢lient鏂硅繛鎺ュ涓猄erver鏂癸紝榪欑鏂瑰紡寰堝皯瑙侊紝涓昏 <br>鐢ㄤ簬涓涓鎴峰悜澶氫釜鏈嶅姟鍣ㄥ彂閫佽姹傛儏鍐點?</p> <p style="FONT-SIZE: 10pt"><br>(浜?榪炴帴鏂瑰紡 </p> <p style="FONT-SIZE: 10pt">1.闀胯繛鎺?</p> <p style="FONT-SIZE: 10pt">Client鏂逛笌Server鏂瑰厛寤虹珛閫氳榪炴帴錛岃繛鎺ュ緩绔嬪悗涓嶆柇寮錛?<br>鐒跺悗鍐嶈繘琛屾姤鏂囧彂閫佸拰鎺ユ敹銆傝繖縐嶆柟寮忎笅鐢變簬閫氳榪炴帴涓鐩?<br>瀛樺湪錛屽彲浠ョ敤涓嬮潰鍛戒護鏌ョ湅榪炴帴鏄惁寤虹珛錛?</p> <p style="FONT-SIZE: 10pt">netstat –f inet|grep 绔彛鍙?濡?678)銆?</p> <p style="FONT-SIZE: 10pt">姝ょ鏂瑰紡甯哥敤浜庣偣瀵圭偣閫氳銆?</p> <p style="FONT-SIZE: 10pt"><br>2.鐭繛鎺?</p> <p style="FONT-SIZE: 10pt">Client鏂逛笌Server姣忚繘琛屼竴嬈℃姤鏂囨敹鍙戜氦鏄撴椂鎵嶈繘琛岄氳榪?<br>鎺ワ紝浜ゆ槗瀹屾瘯鍚庣珛鍗蟲柇寮榪炴帴銆傛縐嶆柟寮忓父鐢ㄤ簬涓鐐瑰澶氱偣 <br>閫氳錛屾瘮濡傚涓狢lient榪炴帴涓涓猄erver. </p> <p style="FONT-SIZE: 10pt"><br>(涓?鍙戦佹帴鏀舵柟寮?</p> <p style="FONT-SIZE: 10pt">1.寮傛 </p> <p style="FONT-SIZE: 10pt">鎶ユ枃鍙戦佸拰鎺ユ敹鏄垎寮鐨勶紝鐩鎬簰鐙珛鐨勶紝浜掍笉褰卞搷銆傝繖縐嶆柟 <br>寮忓張鍒嗕袱縐嶆儏鍐碉細 </p> <p style="FONT-SIZE: 10pt">(1)寮傛鍙屽伐錛氭帴鏀跺拰鍙戦佸湪鍚屼竴涓▼搴忎腑錛屾湁涓や釜涓嶅悓鐨?<br>瀛愯繘紼嬪垎鍒礋璐e彂閫佸拰鎺ユ敹 <br>(2)寮傛鍗曞伐錛氭帴鏀跺拰鍙戦佹槸鐢ㄤ袱涓笉鍚岀殑紼嬪簭鏉ュ畬鎴愩?</p> <p style="FONT-SIZE: 10pt">2.鍚屾 </p> <p style="FONT-SIZE: 10pt">鎶ユ枃鍙戦佸拰鎺ユ敹鏄悓姝ヨ繘琛岋紝鏃㈡姤鏂囧彂閫佸悗絳夊緟鎺ユ敹榪斿洖鎶ユ枃銆?<br>鍚屾鏂瑰紡涓鑸渶瑕佽冭檻瓚呮椂闂錛屽嵆鎶ユ枃鍙戜笂鍘誨悗涓嶈兘鏃犻檺絳?<br>寰咃紝闇瑕佽瀹氳秴鏃舵椂闂達紝瓚呰繃璇ユ椂闂村彂閫佹柟涓嶅啀絳夊緟璇昏繑鍥炴姤 <br>鏂囷紝鐩存帴閫氱煡瓚呮椂榪斿洖銆?nbsp; </p> <p style="FONT-SIZE: 10pt"><br>瀹為檯閫氫俊鏂瑰紡鏄繖涓夌被閫氫俊鏂瑰紡鐨勭粍鍚堛傛瘮濡備竴鑸功涓婃彁渚涚殑 <br>TCP/IP鑼冧緥紼嬪簭澶ч兘鏄悓姝ョ煭榪炴帴鐨凷ERVER/CLIENT紼嬪簭銆傛湁鐨?<br>緇勫悎鏄熀鏈笉鐢ㄧ殑錛屾瘮杈冨父鐢ㄧ殑鏈変環鍊肩殑緇勫悎鏄互涓嬪嚑縐嶏細 </p> <p style="FONT-SIZE: 10pt">鍚屾鐭繛鎺erver/Client <br>鍚屾闀胯繛鎺erver/Client <br>寮傛鐭繛鎺erver/Client <br>寮傛闀胯繛鎺ュ弻宸erver/Client <br>寮傛闀胯繛鎺ュ崟宸erver/Client </p> <p style="FONT-SIZE: 10pt">鍏朵腑寮傛闀胯繛鎺ュ弻宸ユ槸鏈涓哄鏉傜殑涓縐嶉氫俊鏂瑰紡錛屾湁鏃跺欑粡 <br>甯鎬細鍑虹幇鍦ㄤ笉鍚岄摱琛屾垨涓嶅悓鍩庡競涔嬮棿鐨勪袱濂楃郴緇熶箣闂寸殑閫氫俊銆?<br>姣斿閲戝崱宸ョ▼銆傜敱浜庤繖鍑犵閫氫俊鏂瑰紡姣旇緝鍥哄畾錛屾墍浠ュ彲浠ラ <br>鍏堢紪鍒惰繖鍑犵閫氫俊鏂瑰紡鐨勬ā鏉跨▼搴忋?</p> <p style="FONT-SIZE: 10pt"><br>浜?鎶ユ枃鏍煎紡 </p> <p style="FONT-SIZE: 10pt">閫氫俊鎶ユ枃鏍煎紡澶氭牱鎬ф洿澶氾紝鐩稿簲鍦板氨蹇呴』璁捐瀵瑰簲鐨勮鍐欐姤鏂囩殑鎺?<br>鏀跺拰鍙戦佹姤鏂囧嚱鏁般?</p> <p style="FONT-SIZE: 10pt">(涓)闃誨涓庨潪闃誨鏂瑰紡銆 </p> <p style="FONT-SIZE: 10pt">1.闈為樆濉炴柟寮?</p> <p style="FONT-SIZE: 10pt">璇誨嚱鏁頒笉鍋滃湴榪涜璇誨姩浣滐紝濡傛灉娌℃湁鎶ユ枃鎺ユ敹鍒幫紝絳夊緟涓孌墊椂闂村悗 <br>瓚呮椂榪斿洖錛岃繖縐嶆儏鍐典竴鑸渶瑕佹寚瀹氳秴鏃舵椂闂淬?</p> <p style="FONT-SIZE: 10pt">2.闃誨鏂瑰紡 </p> <p style="FONT-SIZE: 10pt">濡傛灉娌℃湁鎶ユ枃鎺ユ敹鍒幫紝鍒欒鍑芥暟涓鐩村浜庣瓑寰呯姸鎬侊紝鐩村埌鏈夋姤鏂囧埌杈俱?</p> <p style="FONT-SIZE: 10pt"> </p> <p style="FONT-SIZE: 10pt">(浜?寰幆璇誨啓鏂瑰紡 <br>  </p> <p style="FONT-SIZE: 10pt">1.涓嬈$洿鎺ヨ鍐欐姤鏂?</p> <p style="FONT-SIZE: 10pt">鍦ㄤ竴嬈℃帴鏀舵垨鍙戦佹姤鏂囧姩浣滀腑涓嬈℃т笉鍔犲垎鍒湴鍏ㄩ儴璇誨彇鎴栧叏閮?<br>鍙戦佹姤鏂囧瓧鑺傘?</p> <p style="FONT-SIZE: 10pt">2.涓嶆寚瀹氶暱搴﹀驚鐜鍐?</p> <p style="FONT-SIZE: 10pt">榪欎竴鑸彂鐢熷湪鐭繛鎺ヨ繘紼嬩腑錛屽彈緗戠粶璺敱絳夐檺鍒訛紝涓嬈¤緝闀跨殑鎶?<br>鏂囧彲鑳藉湪緗戠粶浼犺緭榪囩▼涓鍒嗚В鎴愪簡濂藉嚑涓寘銆備竴嬈¤鍙栧彲鑳戒笉 <br>鑳藉叏閮ㄨ瀹屼竴嬈℃姤鏂囷紝榪欏氨闇瑕佸驚鐜鎶ユ枃錛岀洿鍒拌瀹屼負姝€?</p> <p style="FONT-SIZE: 10pt">3.甯﹂暱搴︽姤鏂囧ご寰幆璇誨啓 </p> <p style="FONT-SIZE: 10pt">榪欑鎯呭喌涓鑸槸鍦ㄩ暱榪炴帴榪涚▼涓紝鐢變簬鍦ㄩ暱榪炴帴涓病鏈夋潯浠惰兘澶?<br>鍒ゆ柇寰幆璇誨啓浠涔堟椂鍊欑粨鏉燂紝鎵浠ュ繀欏昏鍔犻暱搴︽姤鏂囧ご銆傝鍑芥暟 <br>鍏堟槸璇誨彇鎶ユ枃澶寸殑闀垮害錛屽啀鏍規嵁榪欎釜闀垮害鍘昏鎶ユ枃.瀹為檯鎯呭喌涓紝 <br>鎶ュご鐨勭爜鍒舵牸寮忚繕緇忓父涓嶄竴鏍鳳紝濡傛灉鏄潪ASCII鐮佺殑鎶ユ枃澶達紝榪樺繀欏?<br>杞崲鎴怉SCII,甯歌鐨勬姤鏂囧ご鐮佸埗鏈夛細 <br>(1)n涓瓧鑺傜殑ASCII鐮?<br>(2)n涓瓧鑺傜殑BCD鐮?<br>(3)n涓瓧鑺傜殑緗戠粶鏁村瀷鐮?</p> <p style="FONT-SIZE: 10pt"> </p> <p style="FONT-SIZE: 10pt">浠ヤ笂鏄嚑縐嶆瘮杈冨吀鍨嬬殑璇誨啓鎶ユ枃鏂瑰紡錛屽彲浠ヤ笌閫氫俊鏂瑰紡妯℃澘涓璧?<br>棰勫厛鎻愪緵涓浜涘吀鍨嬬殑API璇誨啓鍑芥暟銆傚綋鐒跺湪瀹為檯闂涓紝鍙兘榪?<br>蹇呴』緙栧啓涓庡鏂規姤鏂囨牸寮忛厤濂楃殑璇誨啓API. </p> <p style="FONT-SIZE: 10pt">鍦ㄥ疄闄呮儏鍐典腑錛屽線寰闇瑕佹妸鎴戜滑鑷繁鐨勭郴緇熶笌鍒漢鐨勭郴緇熻繘琛岃繛鎺ワ紝 <br>鏈変簡浠ヤ笂妯℃澘涓嶢PI,鍙互璇磋繛鎺ヤ換浣曟柟寮忕殑閫氫俊紼嬪簭閮戒笉瀛樺湪闂銆?</p> <p style="FONT-SIZE: 10pt"><br>鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/wgl_suc102/archive/2008/01/23/2060828.aspx</a></p> <img src ="http://www.shnenglu.com/jack-wang/aggbug/110419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">灝忕帇</a> 2010-03-24 11:32 <a href="http://www.shnenglu.com/jack-wang/archive/2010/03/24/110419.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鎷煎寘鍑芥暟鍙婄綉緇滃皝鍖呯殑寮傚父澶勭悊http://www.shnenglu.com/jack-wang/archive/2010/02/18/107993.html灝忕帇灝忕帇Wed, 17 Feb 2010 18:27:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/02/18/107993.htmlhttp://www.shnenglu.com/jack-wang/comments/107993.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/02/18/107993.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/107993.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/107993.html鎷煎寘鍑芥暟鍙婄綉緇滃皝鍖呯殑寮傚父澶勭悊(鍚唬鐮? 鏀惰棌
鏈枃浣滆咃細sodme
鏈枃鍑哄錛?a >http://blog.csdn.net/sodme
澹版槑錛氭湰鏂囧彲浠ヤ笉緇忎綔鑰呭悓鎰忎換鎰忚漿杞姐佸鍒躲佷紶鎾紝浣嗕換浣曞鏈枃鐨勫紩鐢ㄩ兘璇蜂繚鐣欎綔鑰呫佸嚭澶勫強鏈0鏄庝俊鎭傝阿璋紒

銆銆甯歌鐨勭綉緇滄湇鍔″櫒錛屽熀鏈笂鏄?*24灝忔椂榪愯漿鐨勶紝瀵逛簬緗戞父鏉ヨ錛岃嚦灝戣姹傛湇鍔″櫒瑕佽兘榪炵畫宸ヤ綔涓鍛ㄤ互涓婄殑鏃墮棿騫朵繚璇佷笉鍑虹幇鏈嶅姟鍣ㄥ穿婧冭繖鏍風殑鐏鵑毦鎬т簨浠躲備簨瀹炰笂錛岃姹備竴涓湇鍔″櫒鍦ㄨ繛緇殑婊¤礋鑽瘋繍杞笅涓嶅嚭浠諱綍寮傚父錛岃姹傚畠璁捐鐨勮繎涔庡畬緹庯紝榪欏嚑涔庢槸涓嶅お鐜板疄鐨勩傛湇鍔″櫒鏈韓鍙互鍑哄紓甯革紙浣嗚灝藉彲鑳藉皯寰楀嚭錛夛紝浣嗘槸錛屾湇鍔″櫒鏈韓搴旇琚璁″緱瓚充互鍋ュ.錛?#8220;灝忕梾灝忕伨”鎵撲笉鍨畠錛岃繖灝辮姹傛湇鍔″櫒鍦ㄥ紓甯稿鐞嗘柟闈㈣涓嬪緢澶氬姛澶?/p>

銆銆鏈嶅姟鍣ㄧ殑寮傚父澶勭悊鍖呮嫭鐨勫唴瀹歸潪甯稿箍娉涳紝鏈枃浠呭氨鍦ㄧ綉緇滃皝鍖呮柟闈㈠嚭鐜扮殑寮傚父浣滀竴璁ㄨ錛屽笇鏈涜兘瀵規浠庝簨鐩稿叧宸ヤ綔鐨勬湅鍙嬫湁鎵甯姪銆?/p>

銆銆鍏充簬緗戠粶灝佸寘鏂歸潰鐨勫紓甯革紝鎬諱綋鏉ヨ錛屽彲浠ュ垎涓轟袱澶х被錛氫竴鏄皝鍖呮牸寮忓嚭鐜板紓甯革紱浜屾槸灝佸寘鍐呭錛堝嵆灝佸寘鏁版嵁錛夊嚭鐜板紓甯搞傚湪灝佸寘鏍煎紡鐨勫紓甯稿鐞嗘柟闈紝鎴戜滑鍦ㄦ渶搴曠鐨勭綉緇滄暟鎹寘鎺ユ敹妯″潡渚垮彲浠ュ姞浠ュ鐞嗐傝屽浜庡皝鍖呮暟鎹唴瀹瑰嚭鐜扮殑寮傚父錛屽彧鏈変緷闈犳父鎴忔湰韜殑閫昏緫鍘誨姞浠ュ垽瀹氬拰媯楠屻傛父鎴忛昏緫鏂歸潰鐨勫紓甯稿鐞嗭紝鏄殢姣忎釜娓告垙鐨勪笉鍚岃屼笉鍚岀殑錛屾墍浠ワ紝鏈枃闅忓悗鐨勫唴瀹瑰皢閲嶇偣闃愯堪鍦ㄧ綉緇滄暟鎹寘鎺ユ敹妯″潡涓殑寮傚父澶勭悊銆?/p>

銆銆涓烘柟渚夸互涓嬬殑璁ㄨ錛屽厛鏄庣‘涓や釜姒傚康錛堣繖涓や釜姒傚康鏄負浜嗗彊榪版柟闈紝絎旇呰嚜琛屽彇鐨勶紝騫舵棤鏍囧噯鍙█錛夛細
銆銆1銆侀昏緫鍖咃細鎸囩殑鏄湪搴旂敤灞傛彁浜ょ殑鏁版嵁鍖咃紝涓涓畬鏁寸殑閫昏緫鍖呭彲浠ヨ〃紺轟竴涓‘鍒囩殑閫昏緫鎰忎箟銆傛瘮濡傜櫥褰曞寘錛屽畠閲岄潰灝卞彲浠ュ惈鏈夌敤鎴峰悕瀛楁鍜屽瘑鐮佸瓧孌點傚敖綆″畠鐪嬩笂鍘諱篃鏄竴孌電紦鍐插尯鏁版嵁錛屼絾榪欎釜緙撳啿鍖洪噷鐨勫悇涓尯闂存槸浠h〃涓瀹氱殑閫昏緫鎰忎箟鐨勩?br>銆銆2銆佺墿鐞嗗寘錛氭寚鐨勬槸浣跨敤recv(recvfrom)鎴杦sarecv(wsarecvfrom)浠庣綉緇滃簳灞傛帴鏀跺埌鐨勬暟鎹寘錛岃繖鏍鋒敹鍒扮殑涓涓暟鎹寘錛岃兘涓嶈兘琛ㄧず涓涓畬鏁寸殑閫昏緫鎰忎箟錛岃鍙栧喅浜庡畠鏄氳繃UDP綾葷殑“鏁版嵁鎶ュ崗璁?#8221;鍙戠殑鍖呰繕鏄氳繃TCP綾葷殑“嫻佸崗璁?#8221;鍙戠殑鍖呫?/p>

銆銆鎴戜滑鐭ラ亾錛孴CP鏄祦鍗忚錛?#8220;嫻佸崗璁?#8221;涓?#8220;鏁版嵁鎶ュ崗璁?#8221;鐨勪笉鍚岀偣鍦ㄤ簬錛?#8220;鏁版嵁鎶ュ崗璁?#8221;涓殑涓涓綉緇滃寘鏈韓灝辨槸涓涓畬鏁寸殑閫昏緫鍖咃紝涔熷氨鏄錛屽湪搴旂敤灞備嬌鐢╯endto鍙戦佷簡涓涓昏緫鍖呬箣鍚庯紝鍦ㄦ帴鏀剁閫氳繃recvfrom鎺ユ敹鍒扮殑灝辨槸鍒氭墠浣跨敤sendto鍙戦佺殑閭d釜閫昏緫鍖咃紝榪欎釜鍖呬笉浼氳鍒嗗紑鍙戦侊紝涔熶笉浼氫笌鍏跺畠鐨勫寘鏀懼湪涓璧峰彂閫併備絾瀵逛簬TCP鑰岃█錛孴CP浼氭牴鎹綉緇滅姸鍐靛拰neagle綆楁硶錛屾垨鑰呭皢涓涓昏緫鍖呭崟鐙彂閫侊紝鎴栬呭皢涓涓昏緫鍖呭垎鎴愯嫢騫叉鍙戦侊紝鎴栬呬細灝嗚嫢騫蹭釜閫昏緫鍖呭悎鍦ㄤ竴璧峰彂閫佸嚭鍘匯傛鍥犱負TCP鍦ㄩ昏緫鍖呭鐞嗘柟闈㈢殑榪欑綺樺悎鎬э紝瑕佹眰鎴戜滑鍦ㄤ綔鍩轟簬TCP鐨勫簲鐢ㄦ椂錛屼竴鑸兘瑕佺紪鍐欑浉搴旂殑鎷煎寘銆佽В鍖呬唬鐮併?/p>

銆銆鍥犳錛屽熀浜嶵CP鐨勪笂灞傚簲鐢紝涓鑸兘瑕佸畾涔夎嚜宸辯殑鍖呮牸寮忋俆CP鐨勫皝鍖呭畾涔変腑錛岄櫎浜嗗叿浣撶殑鏁版嵁鍐呭鎵浠h〃鐨勯昏緫鎰忎箟涔嬪錛岀涓姝ュ氨鏄紜畾浠ヤ綍縐嶆柟寮忚〃紺哄綋鍓嶅寘鐨勫紑濮嬪拰緇撴潫銆傞氬父鎯呭喌涓嬶紝琛ㄧず涓涓猅CP閫昏緫鍖呯殑寮濮嬪拰緇撴潫鏈変袱縐嶆柟寮忥細
銆銆1銆佷互鐗規畩鐨勫紑濮嬪拰緇撴潫鏍囧織琛ㄧず錛屾瘮濡侳F00琛ㄧず寮濮嬶紝00FF琛ㄧず緇撴潫銆?br>銆銆2銆佺洿鎺ヤ互鍖呴暱搴︽潵琛ㄧず銆傛瘮濡傚彲浠ョ敤絎竴涓瓧鑺傝〃紺哄寘鎬婚暱搴︼紝濡傛灉瑙夊緱榪欐牱鐨勮瘽鍖呮瘮杈冨皬錛屼篃鍙互鐢ㄤ袱涓瓧鑺傝〃紺哄寘闀垮害銆?/p>

銆銆涓嬮潰灝嗚緇欏嚭鐨勪唬鐮佹槸浠ョ2縐嶆柟寮忓畾涔夌殑鏁版嵁鍖咃紝鍖呴暱搴︿互姣忎釜灝佸寘鐨勫墠涓や釜瀛楄妭琛ㄧず銆傛垜灝嗙粨鍚堢潃浠g爜緇欏嚭鐩稿叧鐨勮В閲婂拰璇存槑銆?/p>

銆銆鍑芥暟涓敤鍒扮殑鍙橀噺璇存槑錛?/p>

銆銆CLIENT_BUFFER_SIZE錛氱紦鍐插尯鐨勯暱搴︼紝瀹氫箟涓猴細Const int CLIENT_BUFFER_SIZE=4096銆?br>銆銆m_ClientDataBuf錛氭暟鎹暣鐞嗙紦鍐插尯錛屾瘡嬈℃敹鍒扮殑鏁版嵁錛岄兘浼氬厛琚鍒跺埌榪欎釜緙撳啿鍖虹殑鏈熬錛岀劧鍚庣敱涓嬮潰鐨勬暣鐞嗗嚱鏁板榪欎釜緙撳啿鍖鴻繘琛屾暣鐞嗐傚畠鐨勫畾涔夋槸錛歝har m_ClientDataBuf[2* CLIENT_BUFFER_SIZE]銆?br>銆銆m_DataBufByteCount錛氭暟鎹暣鐞嗙紦鍐插尯涓綋鍓嶅墿浣欑殑鏈暣鐞嗗瓧鑺傛暟銆?br>銆銆GetPacketLen(const char*)錛氬嚱鏁幫紝鍙互鏍規嵁浼犲叆鐨勭紦鍐插尯棣栧潃鎸夌収搴旂敤灞傚崗璁彇鍑哄綋鍓嶉昏緫鍖呯殑闀垮害銆?br>銆銆GetGamePacket(const char*, int)錛氬嚱鏁幫紝鍙互鏍規嵁浼犲叆鐨勭紦鍐插尯鐢熸垚鐩稿簲鐨勬父鎴忛昏緫鏁版嵁鍖呫?br>銆銆AddToExeList(PBaseGamePacket)錛氬嚱鏁幫紝灝嗘寚瀹氱殑娓告垙閫昏緫鏁版嵁鍖呭姞鍏ュ緟澶勭悊鐨勬父鎴忛昏緫鏁版嵁鍖呴槦鍒椾腑錛岀瓑寰呴昏緫澶勭悊綰跨▼瀵瑰叾榪涜澶勭悊銆?br>銆銆DATA_POS錛氭寚鐨勬槸闄や簡鍖呴暱搴︺佸寘綾誨瀷絳夎繖浜涙爣蹇楀瀷瀛楁涔嬪錛岀湡姝g殑鏁版嵁鍖呭唴瀹圭殑璧峰浣嶇疆銆?/p>

Bool SplitFun(const char* pData,const int &len)
{
    PBaseGamePacket pGamePacket=NULL;
    __int64 startPos=0, prePos=0, i=0;
    int packetLen=0;

 銆//鍏堝皢鏈鏀跺埌鐨勬暟鎹鍒跺埌鏁寸悊緙撳啿鍖哄熬閮?br>    startPos = m_DataBufByteCount; 
    memcpy( m_ClientDataBuf+startPos, pData, len );
    m_DataBufByteCount += len;   

    //褰撴暣鐞嗙紦鍐插尯鍐呯殑瀛楄妭鏁板皯浜嶥ATA_POS瀛楄妭鏃訛紝鍙栦笉鍒伴暱搴︿俊鎭垯閫鍑?br>銆//娉ㄦ剰錛氶鍑烘椂騫朵笉緗甿_DataBufByteCount涓?
    if (m_DataBufByteCount < DATA_POS+1)
        return false;

    //鏍規嵁姝e父閫昏緫錛屼笅闈㈢殑鎯呭喌涓嶅彲鑳藉嚭鐜幫紝涓虹ǔ濡ヨ搗瑙侊紝榪樻槸鍔犱笂
    if (m_DataBufByteCount >  2*CLIENT_BUFFER_SIZE)
    {
        //璁劇疆m_DataBufByteCount涓?錛屾剰鍛崇潃涓㈠純緙撳啿鍖轟腑鐨勭幇鏈夋暟鎹?br>        m_DataBufByteCount = 0;

銆銆//鍙互鑰冭檻寮鏀鵑敊璇牸寮忔暟鎹寘鐨勫鐞嗘帴鍙o紝澶勭悊閫昏緫浜ょ粰涓婂眰
銆銆//OnPacketError()
        return false;
    }

     //榪樺師璧峰鎸囬拡
     startPos = 0;

     //鍙湁褰搈_ClientDataBuf涓殑瀛楄妭涓暟澶т簬鏈灝忓寘闀垮害鏃舵墠鑳芥墽琛屾璇彞
    packetLen = GetPacketLen( pIOCPClient->m_ClientDataBuf );

    //褰撻昏緫灞傜殑鍖呴暱搴︿笉鍚堟硶鏃訛紝鍒欑洿鎺ヤ涪寮冭鍖?br>    if ((packetLen < DATA_POS+1) || (packetLen > 2*CLIENT_BUFFER_SIZE))
    {
        m_DataBufByteCount = 0;

銆銆//OnPacketError()
        return false;
    }

    //淇濈暀鏁寸悊緙撳啿鍖虹殑鏈熬鎸囬拡
    __int64 oldlen = m_DataBufByteCount;

    while ((packetLen <= m_DataBufByteCount) && (m_DataBufByteCount>0))
    {
        //璋冪敤鎷煎寘閫昏緫錛岃幏鍙栬緙撳啿鍖烘暟鎹搴旂殑鏁版嵁鍖?br>        pGamePacket = GetGamePacket(m_ClientDataBuf+startPos, packetLen);

        if (pGamePacket!=NULL)
        {
            //灝嗘暟鎹寘鍔犲叆鎵ц闃熷垪
            AddToExeList(pGamePacket);
        }

        pGamePacket = NULL;
 
銆銆//鏁寸悊緙撳啿鍖虹殑鍓╀綑瀛楄妭鏁板拰鏂伴昏緫鍖呯殑璧峰浣嶇疆榪涜璋冩暣
        m_DataBufByteCount -= packetLen;
        startPos += packetLen;

        //孌嬬暀緙撳啿鍖虹殑瀛楄妭鏁板皯浜庝竴涓甯稿寘澶у皬鏃訛紝鍙悜鍓嶅鍒惰鍖呴殢鍚庨鍑?br>        if (m_DataBufByteCount < DATA_POS+1)
        {
            for(i=startPos; i<startPos+m_DataBufByteCount; ++i)
                m_ClientDataBuf[i-startPos] = m_ClientDataBuf[i];

            return true;
        }

        packetLen = GetPacketLen(m_ClientDataBuf + startPos );

         //褰撻昏緫灞傜殑鍖呴暱搴︿笉鍚堟硶鏃訛紝涓㈠純璇ュ寘鍙婄紦鍐插尯浠ュ悗鐨勫寘
        if ((packetLen<DATA_POS+1) || (packetLen>2*CLIENT_BUFFER_SIZE))
        {
            m_DataBufByteCount = 0;

    銆銆//OnPacketError()
            return false;
        }

         if (startPos+packetLen>=oldlen)
        {
            for(i=startPos; i<startPos+m_DataBufByteCount; ++i)
                m_ClientDataBuf[i-startPos] = m_ClientDataBuf[i];          

            return true;
        }
     }//鍙栨墍鏈夊畬鏁寸殑鍖?/p>

     return true;
}

銆銆浠ヤ笂渚挎槸鏁版嵁鎺ユ敹妯″潡鐨勫鐞嗗嚱鏁幫紝涓嬮潰鏄嚑鐐圭畝瑕佽鏄庯細

銆銆1銆佺敤浜庢嫾鍖呮暣鐞嗙殑緙撳啿鍖?m_ClientDataBuf)搴旇姣攔ecv涓寚瀹氱殑鎺ユ敹緙撳啿鍖?pData)闀垮害(CLIENT_BUFFER_SIZE)瑕佸ぇ錛岄氬父鍓嶈呮槸鍚庤呯殑2鍊?2*CLIENT_BUFFER_SIZE)鎴栨洿澶с?/p>

銆銆2銆佷負閬垮厤鍥犱負鍓╀綑鏁版嵁鍓嶇Щ鑰屽鑷寸殑棰濆寮閿錛屽緩璁甿_ClientDataBuf浣跨敤鐜艦緙撳啿鍖哄疄鐜般?/p>

銆銆3銆佷負浜嗛伩鍏嶅嚭鐜版棤娉曟嫾瑁呯殑鍖咃紝鎴戜滑綰﹀畾姣忔鍙戦佺殑閫昏緫鍖咃紝鍏跺崟涓昏緫鍖呮渶澶ч暱搴︿笉鍙互瓚呰繃CLIENT_BUFFER_SIZE鐨?鍊嶃傚洜涓烘垜浠殑鏁寸悊緙撳啿鍖哄彧鏈?*CLIENT_BUFFER_SIZE榪欎箞闀匡紝鏇撮暱鐨勬暟鎹紝鎴戜滑灝嗘棤娉曟暣鐞嗐傝繖灝辮姹傚湪鍗忚鐨勮璁′笂浠ュ強鏈緇堢殑鍙戦佸嚱鏁扮殑澶勭悊涓婅鍔犱笂榪欐牱鐨勫紓甯稿鐞嗘満鍒躲?/p>


銆銆4銆佸浜庢暟鎹寘榪囩煭鎴栬繃闀跨殑鍖咃紝鎴戜滑閫氬父鐨勬儏鍐墊槸緗甿_DataBufByteCount涓?錛屽嵆鑸嶅純褰撳墠鍖呯殑澶勭悊銆傚鏋滄澶勪笉璁劇疆m_DataBufByteCount涓?涔熷彲錛屼絾璇ュ鎴風鍙鍙戜簡涓嬈℃牸寮忛敊璇殑鍖咃紝鍒欏叾鍚庣戶鍙戣繃鏉ョ殑鍖呭垯涔熷皢榪炲甫鐫浜х敓鏍煎紡閿欒錛屽鏋滆緗甿_DataBufByteCount涓?錛屽垯鍙互姣旇緝濂界殑閬垮厤鍚庣戶鐨勫寘鍙楁鍖呯殑鏍煎紡閿欒褰卞搷銆傛洿濂界殑浣滄硶鏄紝鍦ㄦ澶勫紑鏀句竴涓皝鍖呮牸寮忓紓甯哥殑澶勭悊鎺ュ彛(OnPacketError)錛岀敱涓婂眰閫昏緫鍐沖畾瀵硅繖縐嶅紓甯稿浣曞緗傛瘮濡備笂灞傞昏緫鍙互瀵瑰皝鍖呮牸寮忔柟闈㈠嚭鐜扮殑寮傚父榪涜璁℃暟錛屽鏋滈敊璇殑嬈℃暟瓚呰繃涓瀹氱殑鍊鹼紝鍒欏彲浠ユ柇寮璇ュ鎴風鐨勮繛鎺ャ?/p>

銆銆5銆佸緩璁笉瑕佸湪recv鎴杦sarecv鐨勫嚱鏁板悗錛屽氨绱ф帴鐫浣滀互涓婄殑澶勭悊銆傚綋recv鏀跺埌涓孌墊暟鎹悗錛岀敓鎴愪竴涓粨鏋勪綋鎴栧璞?瀹冧富瑕佸惈鏈塪ata鍜宭en涓や釜鍐呭錛屽墠鑰呮槸鏁版嵁緙撳啿鍖猴紝鍚庤呮槸鏁版嵁闀垮害)錛屽皢榪欐牱鐨勪竴涓粨鏋勪綋鎴栧璞℃斁鍒頒竴涓槦鍒椾腑鐢卞悗闈㈢殑綰跨▼瀵瑰叾浣跨敤SplitFun鍑芥暟榪涜鏁寸悊銆傝繖鏍鳳紝鍙互鏈澶ч檺搴﹀湴鎻愰珮緗戠粶鏁版嵁鐨勬帴鏀墮熷害錛屼笉鑷沖洜涓烘暟鎹暣鐞嗙殑鍘熷洜鑰屽湪姝ゅ嫻垂鏃墮棿銆?/p>

銆銆浠g爜涓紝鎴戝凡緇忎綔浜嗘瘮杈冭緇嗙殑娉ㄩ噴錛屽彲浠ヤ綔涓烘嫾鍖呭嚱鏁扮殑鍙傝冿紝浠g爜鏄粠鍋剁殑搴旂敤涓彁鍙栥佷慨鏀硅屾潵錛屾湰韜彧涓烘紨紺轟箣鐢紝鎵浠ユ湭浣滆皟璇曪紝搴旂敤鏃墮渶瑕佷綘鑷繁鍘誨畬鍠勩傚鏈夌枒闂紝鍙互鎴戠殑blog涓婄暀璦鎻愬嚭銆?/p>


鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/clever101/archive/2008/10/12/3061679.aspx



灝忕帇 2010-02-18 02:27 鍙戣〃璇勮
]]>
甯哥敤鐨剆etsockopthttp://www.shnenglu.com/jack-wang/archive/2010/02/13/107802.html灝忕帇灝忕帇Sat, 13 Feb 2010 07:39:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/02/13/107802.htmlhttp://www.shnenglu.com/jack-wang/comments/107802.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/02/13/107802.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/107802.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/107802.html

灝忕帇 2010-02-13 15:39 鍙戣〃璇勮
]]>
浣跨敤VC9+PlatformSDK緙栧啓WinSock紼嬪簭鏃訛紝#include WinSock2.h鏂囦歡瀵艱嚧綾誨瀷閲嶅畾涔夐棶棰橈紙楹昏荊闅斿鐨勶紝寰蔣鍙堟兂鎼炰粈涔堣姳鏍鳳級http://www.shnenglu.com/jack-wang/archive/2010/02/13/107800.html灝忕帇灝忕帇Sat, 13 Feb 2010 07:14:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/02/13/107800.htmlhttp://www.shnenglu.com/jack-wang/comments/107800.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/02/13/107800.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/107800.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/107800.html 
 

緙栧啓WinSock紼嬪簭鏃訛紝濡傛灉涓嶅寘鍚玏inSock2.h鏂囦歡寰堝緋葷粺綾誨瀷鏃犳硶璇嗗埆銆傚彲鏄鏋滃寘鍚簡WinSock2.h鏂囦歡鍒欐姤N澶氱郴緇熺被鍨嬮噸瀹氫箟鐨勯敊璇?br>渚嬪 錛?br>      mswsock.h(69) : error C2065: 'SOCKET' : undeclared identifier
      winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition

 
      澶氫簭浜嗙綉涓婅澶氱綉鍙嬬殑甯栧瓙緇欎簡鎴戞彁紺猴紝闂瑙e喅浜嗐傝藩璋簡銆?br>      

       Windows緗戠粶緙栫▼鑷沖皯闇瑕佷袱涓ご鏂囦歡錛歸insock2.h鍜寃indows.h錛岃屽湪WinSock2.0涔嬪墠榪樺瓨鍦ㄤ竴涓佺増鏈殑winsock.h銆傛鏄繖涓変釜澶存枃浠剁殑鍖呭惈欏哄簭錛屽鑷翠簡涓婅堪闂鐨勫嚭鐜般?/p>

鍏堢湅鐪媤insock2.h鐨勫唴瀹癸紝鍦ㄦ枃浠跺紑澶存湁濡備笅瀹忓畾涔夛細

#ifndef _WINSOCK2API_
#define _WINSOCK2API_
#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

_WINSOCK2API_寰堝鏄撶悊瑙o紝榪欐槸鏈甯歌鐨勯槻姝㈠ご鏂囦歡閲嶅鍖呭惈鐨勪繚鎶ゆ帾鏂姐俖WINSOCKAPI_鐨勫畾涔夊垯鏄負浜嗛樆姝㈠鑰佹枃浠秝insock.h鐨勫寘鍚紝鍗蟲槸璇達紝濡傛灉鐢ㄦ埛鍏堝寘鍚簡winsock2.h灝變笉鍏佽鍐嶅寘鍚玾insock.h浜嗭紝鍚﹀垯浼氬鑷寸被鍨嬮噸澶嶅畾涔夈傝繖鏄庢牱鍋氬埌鐨勫憿錛熷緢綆鍗曪紝鍥犱負winsock.h鐨勫ご閮ㄥ悓鏍峰瓨鍦ㄥ涓嬬殑淇濇姢鎺柦錛?/p>

#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_

鍐嶅洖榪囧ご鏉ョ湅winsock2.h錛屽湪涓婅堪鍐呭涔嬪悗绱ц窡鐫濡備笅瀹忔寚浠わ細

/*
* Pull in WINDOWS.H if necessary
*/
#ifndef _INC_WINDOWS
#include <windows.h>
#endif /* _INC_WINDOWS */

鍏朵綔鐢ㄦ槸濡傛灉鐢ㄦ埛娌℃湁鍖呭惈windows.h錛坃INC_WINDOWS鍦╳indows.h涓畾涔夛級灝辮嚜鍔ㄥ寘鍚畠錛屼互瀹氫箟WinSock2.0鎵闇鐨勭被鍨嬪拰甯擱噺絳夈?/p>

鐜板湪鍒囨崲鍒皐indows.h錛屾煡鎵緒insock錛屾垜浠細鎯婂鐨勫彂鐜頒互涓嬪唴瀹癸細

#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#ifndef _MAC
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#endif
#include <shellapi.h>
#ifndef _MAC
#include <winperf.h>

#if(_WIN32_WINNT >= 0x0400)
#include <winsock2.h>
#include <mswsock.h>
#else
#include <winsock.h>
#endif /* _WIN32_WINNT >= 0x0400 */

#endif
// 榪欓噷鐪佺暐鎺変竴閮ㄥ垎鍐呭
#endif /* WIN32_LEAN_AND_MEAN */

鐪嬪埌娌★紵windows.h浼氬弽鍚戝寘鍚玾insock2.h鎴栬厀insock.h錛佺浉浜掗棿鐨勫寘鍚究鏄竾鎭朵箣婧愶紒

涓嬮潰鍏蜂綋鍒嗘瀽涓涓嬮棶棰樻槸鎬庝箞鍙戠敓鐨勩?/p>

閿欒鎯呭艦1錛?/strong>鎴戜滑鍦ㄨ嚜宸辯殑宸ョ▼涓厛鍖呭惈winsock2.h鍐嶅寘鍚玾indows.h錛屽鏋淲IN32_LEAN_AND_MEAN鏈畾涔変笖_WIN32_WINNT澶т簬鎴栫瓑浜?x400錛岄偅涔坵indows.h浼氬湪winsock2.h寮澶磋鑷姩寮曞叆錛岃寃indows.h鍙堜細鑷姩寮曞叆mswsock.h錛屾鏃訛紝mswsock.h閲屾墍鐢ㄧ殑socket綾誨瀷榪樺皻鏈畾涔夛紝鍥犳浼氬嚭鐜扮被鍨嬫湭瀹氫箟閿欒銆?/p>

閿欒鎯呭艦2錛?/strong>鍏堝寘鍚玾indows.h鍐嶅寘鍚玾insock2.h錛屽鏋淲IN32_LEAN_AND_MEAN鏈畾涔変笖_WIN32_WINNT鏈畾涔夋垨鑰呭叾鐗堟湰鍙峰皬浜?x400錛岄偅涔坵indows.h浼氳嚜鍔ㄥ鍏ユ棫鏈夌殑winsock.h錛岃繖鏍峰啀褰搘insock2.h琚寘鍚椂渚夸細寮曡搗閲嶅畾涔夈?/p>

    榪欓噷瑕佽鏄庣殑鏄紝瀹廤IN32_LEAN_AND_MEAN鐨勪綔鐢ㄦ槸鍑忓皬win32澶存枃浠跺昂瀵鎬互鍔犲揩緙栬瘧閫熷害錛屼竴鑸敱AppWizard鍦╯tdafx.h涓嚜鍔ㄥ畾涔夈俖WIN32_WINNT鐨勪綔鐢ㄦ槸寮鍚珮鐗堟湰鎿嶄綔緋葷粺涓嬬殑鐗規畩鍑芥暟錛屾瘮濡傝浣跨敤鍙瓑寰呭畾鏃跺櫒錛圵aitableTimer錛夛紝灝卞緱瑕佹眰_WIN32_WINNT鐨勫煎ぇ浜庢垨絳変簬0x400銆傚洜姝わ紝濡傛灉浣犳病鏈夐亣鍒頒笂榪頒袱涓棶棰橈紝寰堝彲鑳芥槸浣犳病鏈夊湪榪欎簺鏉′歡涓嬭繘琛岀綉緇滅紪紼嬨?/p>

    闂榪樻病鏈夌粨鏉燂紝瑕佺煡閬撻櫎浜哣C鑷甫windows搴撴枃浠跺錛孧S鐨凱latform SDK涔熷惈鏈夎繖浜涘ご鏂囦歡銆傛垜浠緢鍙兘鍙戠幇鍦ㄤ箣鍓嶈兘澶熷ソ濂界紪璇戠殑紼嬪簭鍦ㄦ敼鍙樹簡windows澶存枃浠跺寘鍚礬寰勫悗鍙堝嚭浜嗛棶棰樸傚師鍥犲緢綆鍗曪紝Platform SDK涓殑windows.h涓嶸C鑷甫鐨勬枃浠跺瓨鍦ㄥ樊寮傦紝鍏剁浉鍚屼綅緗殑浠g爜濡備笅錛?/p>

#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#ifndef _MAC
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#endif
#include <shellapi.h>
#ifndef _MAC
#include <winperf.h>
#include <winsock.h> // 榪欓噷鐩存帴鍖呭惈winsock.h
#endif
#ifndef NOCRYPT
#include <wincrypt.h>
#include <winefs.h>
#include <winscard.h>
#endif

#ifndef NOGDI
#ifndef _MAC
#include <winspool.h>
#ifdef INC_OLE1
#include <ole.h>
#else
#include <ole2.h>
#endif /* !INC_OLE1 */
#endif /* !MAC */
#include <commdlg.h>
#endif /* !NOGDI */
#endif /* WIN32_LEAN_AND_MEAN */

鍞夛紝鎴戜滑涓嶇瑕侀棶MS涓轟粈涔堣鎼炶繖涔堝鑺辨牱錛屾洿璁╀漢姘旀劋鐨勬槸錛屾棦鐒朵唬鐮佷笉涓鏍鳳紝windows.h閲屽嵈娌℃湁浠諱綍涓涓畯瀹氫箟鑳藉甯姪紼嬪簭杈ㄥ埆褰撳墠浣跨敤鐨勬枃浠舵槸VC鑷甫鐨勮繕鏄疨SDK閲岀殑銆?/p>

    鍚庢潵錛屾垜鍐欎簡涓涓ご鏂囦歡涓撻棬澶勭悊winsock2.h鐨勫寘鍚棶棰橈紝鍚嶄負winsock2i.h錛屽彧闇鍦ㄨ浣跨敤WinSock2.0鐨勬簮鏂囦歡閲岀涓涓寘鍚鏂囦歡鍗沖彲錛屼笉榪囩敱浜庡墠闈㈡彁鍒扮殑闂錛屽綋浣跨敤PSDK鏃訛紝闇瑕佹墜宸ュ畾涔変竴涓婾SING_WIN_PSDK錛屾簮鐮佸涓嬶細

//
// winsock2i.h - Include winsock2.h safely.
//
// Copyleft 02/24/2005 by freefalcon
//
//
// When WIN32_LEAN_AND_MEAN is not defined and _WIN32_WINNT is LESS THAN 0x400,
// if we include winsock2.h AFTER windows.h or winsock.h, we get some compiling
// errors as following:
//   winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
//
// When WIN32_LEAN_AND_MEAN is not defined and _WIN32_WINNT is NOT LESS THAN 0x400,
// if we include winsock2.h BEFORE windows.h, we get some other compiling errors:
//   mswsock.h(69) : error C2065: 'SOCKET' : undeclared identifier
//
// So, this file is used to help us to include winsock2.h safely, it should be
// placed before any other header files.
//

#ifndef _WINSOCK2API_

// Prevent inclusion of winsock.h
#ifdef _WINSOCKAPI_
#error Header winsock.h is included unexpectedly.
#endif

// NOTE: If you use Windows Platform SDK, you should enable following definition:
// #define USING_WIN_PSDK

#if !defined(WIN32_LEAN_AND_MEAN) && (_WIN32_WINNT >= 0x0400) && !defined(USING_WIN_PSDK)
#include <windows.h>
#else
#include <winsock2.





灝忕帇 2010-02-13 15:14 鍙戣〃璇勮
]]>
闅ч亾鎶鏈強鍏跺簲鐢紙鏋惰鏈嶅姟鍣ㄩ泦緹ょ殑鐞嗘兂閫夋嫨錛?/title><link>http://www.shnenglu.com/jack-wang/archive/2010/02/08/107501.html</link><dc:creator>灝忕帇</dc:creator><author>灝忕帇</author><pubDate>Mon, 08 Feb 2010 09:13:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2010/02/08/107501.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/107501.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2010/02/08/107501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/107501.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/107501.html</trackback:ping><description><![CDATA[<h1>闅ч亾鎶鏈?/h1> <div style="FONT-SIZE: 10pt" id=lemmaContent>銆銆闅ч亾鎶鏈強鍏跺簲鐢?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆闅ч亾鎶鏈紙Tunneling錛夋槸涓縐嶉氳繃浣跨敤浜掕仈緗戠粶鐨勫熀紜璁炬柦鍦ㄧ綉緇滀箣闂翠紶閫掓暟鎹殑鏂瑰紡銆備嬌鐢ㄩ毀閬撲紶閫掔殑鏁版嵁錛堟垨璐熻澆錛夊彲浠ユ槸涓嶅悓鍗忚鐨勬暟鎹撫鎴栧寘銆傞毀閬撳崗璁皢鍏跺畠鍗忚鐨勬暟鎹撫鎴栧寘閲嶆柊灝佽鐒跺悗閫氳繃闅ч亾鍙戦併傛柊鐨勫撫澶存彁渚涜礬鐢變俊鎭紝浠ヤ究閫氳繃浜掕仈緗戜紶閫掕灝佽鐨勮礋杞芥暟鎹?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆榪欓噷鎵璇寸殑闅ч亾綾諱技浜庣偣鍒扮偣鐨勮繛鎺ャ傝繖縐嶆柟寮忚兘澶熶嬌鏉ヨ嚜璁稿淇℃伅婧愮殑緗戠粶涓氬姟鍦ㄥ悓涓涓熀紜璁炬柦涓氳繃涓嶅悓鐨勯毀閬撹繘琛屼紶杈撱傞毀閬撴妧鏈嬌鐢ㄧ偣瀵圭偣閫氫俊鍗忚浠f浛浜嗕氦鎹㈣繛鎺ワ紝閫氳繃璺敱緗戠粶鏉ヨ繛鎺ユ暟鎹湴鍧銆傞毀閬撴妧鏈厑璁告巿鏉冪Щ鍔ㄧ敤鎴鋒垨宸叉巿鏉冪殑鐢ㄦ埛鍦ㄤ換浣曟椂闂淬佷換浣曞湴鐐硅闂紒涓氱綉緇溿?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆閫氳繃闅ч亾鐨勫緩绔嬶紝鍙疄鐜幫細<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆* 灝嗘暟鎹祦寮哄埗閫佸埌鐗瑰畾鐨勫湴鍧<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆* 闅愯棌縐佹湁鐨勭綉緇滃湴鍧<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆* 鍦↖P緗戜笂浼犻掗潪IP鏁版嵁鍖?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆* 鎻愪緵鏁版嵁瀹夊叏鏀寔<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆榪戞潵鍑虹幇浜嗕竴浜涙柊鐨勯毀閬撴妧鏈紝騫跺湪涓嶅悓鐨勭郴緇熶腑寰楀埌榪愮敤鍜屾嫇灞曘?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆闅ч亾鎶鏈?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆涓哄垱寤洪毀閬擄紝闅ч亾鐨勫鎴鋒満鍜屾湇鍔″櫒鍙屾柟蹇呴』浣跨敤鐩稿悓鐨勯毀閬撳崗璁傞毀閬撴妧鏈彲鍒嗗埆浠ョ2灞傛垨絎?灞傞毀閬撳崗璁負鍩虹銆傜2灞傞毀閬撳崗璁搴斾簬OSI妯″瀷鐨勬暟鎹摼璺眰錛屼嬌鐢ㄥ撫浣滀負鏁版嵁浜ゆ崲鍗曚綅銆侾PTP錛堢偣瀵圭偣闅ч亾鍗忚錛夈丩2TP錛堢浜屽眰闅ч亾鍗忚錛夊拰L2F錛堢2灞傝漿鍙戝崗璁級閮藉睘浜庣2灞傞毀閬撳崗璁紝鏄皢鐢ㄦ埛鏁版嵁灝佽鍦ㄧ偣瀵圭偣鍗忚錛圥PP錛夊撫涓氳繃浜掕仈緗戝彂閫併傜3灞傞毀閬撳崗璁搴斾簬OSI妯″瀷鐨勭綉緇滃眰錛屼嬌鐢ㄥ寘浣滀負鏁版嵁浜ゆ崲鍗曚綅銆侷PIP錛圛P over IP錛変互鍙奍PSec闅ч亾妯″紡灞炰簬絎?灞傞毀閬撳崗璁紝鏄皢IP鍖呭皝瑁呭湪闄勫姞鐨処P鍖呭ご涓紝閫氳繃IP緗戠粶浼犻併傛棤璁哄摢縐嶉毀閬撳崗璁兘鏄敱浼犺緭鐨勮澆浣撱佷笉鍚岀殑灝佽鏍煎紡浠ュ強鐢ㄦ埛鏁版嵁鍖呯粍鎴愮殑銆傚畠浠殑鏈川鍖哄埆鍦ㄤ簬錛岀敤鎴風殑鏁版嵁鍖呮槸琚皝瑁呭湪鍝鏁版嵁鍖呬腑鍦ㄩ毀閬撲腑浼犺緭銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆鐐瑰鐐歸毀閬撳崗璁?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆PPTP錛圥oint to Point Tunneling Protocol錛夋彁渚汸PTP瀹㈡埛鏈哄拰PPTP鏈嶅姟鍣ㄤ箣闂寸殑鍔犲瘑閫氫俊銆侾PTP瀹㈡埛鏈烘槸鎸囪繍琛屼簡璇ュ崗璁殑PC鏈猴紝濡傚惎鍔ㄨ鍗忚鐨刉indows95/98錛汸PTP鏈嶅姟鍣ㄦ槸鎸囪繍琛岃鍗忚鐨勬湇鍔″櫒錛屽鍚姩璇ュ崗璁殑WindowsNT鏈嶅姟鍣ㄣ侾PTP鏄疨PP鍗忚鐨勪竴縐嶆墿灞曘傚畠鎻愪緵浜嗕竴縐嶅湪浜掕仈緗戜笂寤虹珛澶氬崗璁殑瀹夊叏铏氭嫙涓撶敤緗戯紙VPN錛夌殑閫氫俊鏂瑰紡銆傝繙绔敤鎴瘋兘澶熼忚繃浠諱綍鏀寔PPTP鐨処SP璁塊棶鍏徃鐨勪笓鐢ㄧ綉銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆閫氳繃PPTP錛屽鎴峰彲閲囩敤鎷ㄥ彿鏂瑰紡鎺ュ叆鍏敤IP緗戙傛嫧鍙風敤鎴烽鍏堟寜甯歌鏂瑰紡鎷ㄥ埌ISP鐨勬帴鍏ユ湇鍔″櫒錛圢AS錛夛紝寤虹珛PPP榪炴帴錛涘湪姝ゅ熀紜涓婏紝鐢ㄦ埛榪涜浜屾鎷ㄥ彿寤虹珛鍒癙PTP鏈嶅姟鍣ㄧ殑榪炴帴錛岃榪炴帴縐頒負PPTP闅ч亾錛屽疄璐ㄤ笂鏄熀浜嶪P鍗忚鐨勫彟涓涓狿PP榪炴帴錛屽叾涓殑IP鍖呭彲浠ュ皝瑁呭縐嶅崗璁暟鎹紝鍖呮嫭TCP錛廔P銆両PX鍜孨etBEUI銆侾PTP閲囩敤浜嗗熀浜嶳SA鍏徃RC4鐨勬暟鎹姞瀵嗘柟娉曪紝淇濊瘉浜嗚櫄鎷熻繛鎺ラ氶亾鐨勫畨鍏ㄣ傚浜庣洿鎺ヨ繛鍒頒簰鑱旂綉鐨勭敤鎴峰垯涓嶉渶瑕丳PP鐨勬嫧鍙瘋繛鎺ワ紝鍙互鐩存帴涓嶱PTP鏈嶅姟鍣ㄥ緩绔嬭櫄鎷熼氶亾銆侾PTP鎶婂緩绔嬮毀閬撶殑涓誨姩鏉冧氦緇欎簡鐢ㄦ埛錛屼絾鐢ㄦ埛闇瑕佸湪鍏禤C鏈轟笂閰嶇疆PPTP錛岃繖鏍峰仛鏃㈠鍔犱簡鐢ㄦ埛鐨勫伐浣滈噺錛屽張浼氱粰緗戠粶甯︽潵闅愭偅銆傚彟澶栵紝PPTP鍙敮鎸両P浣滀負浼犺緭鍗忚銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆絎簩灞傝漿鍙戝崗璁?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆L2F(Layer Two Forwarding protocol )鏄敱Cisco鍏徃鎻愬嚭鐨勫彲浠ュ湪澶氱浠嬭川錛屽ATM銆佸撫涓戶銆両P緗戜笂寤虹珛澶氬崗璁殑瀹夊叏铏氭嫙涓撶敤緗戠殑閫氫俊銆傝繙绔敤鎴瘋兘閫氳繃浠諱綍鎷ㄥ彿鏂瑰紡鎺ュ叆鍏敤IP緗戯紝棣栧厛鎸夊父瑙勬柟寮忔嫧鍒癐SP鐨勬帴鍏ユ湇鍔″櫒錛圢AS錛夛紝寤虹珛PPP榪炴帴錛汵AS鏍規嵁鐢ㄦ埛鍚嶇瓑淇℃伅錛屽緩绔嬬洿杈綡GW鏈嶅姟鍣ㄧ殑絎簩閲嶈繛鎺ャ傚湪榪欑鎯呭喌涓嬶紝闅ч亾鐨勯厤緗拰寤虹珛瀵圭敤鎴鋒槸瀹屽叏閫忔槑鐨勩傚叾浣撶郴緇撴瀯瑙佸浘1銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆絎簩灞傞毀閬撳崗璁?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆L2TP錛圠ayer Two Tunneling Protocol錛夌粨鍚堜簡L2F鍜孭PTP鐨勪紭鐐癸紝鍏佽鐢ㄦ埛浠庡鎴風鎴栬闂湇鍔″櫒绔緩绔媀PN榪炴帴銆侺2TP鏄妸閾捐礬灞傜殑PPP甯ц鍏ュ叕鐢ㄧ綉緇滆鏂斤紝濡侷P銆丄TM銆佸撫涓戶涓繘琛岄毀閬撲紶杈撶殑灝佽鍗忚銆傚叾浣撶郴緇撴瀯瑙佸浘1銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆Cisco銆丄scend銆丮icrosoft鍜孯edBack鍏徃鐨勪笓瀹朵滑鍦ㄤ慨鏀逛簡鍗佸嚑涓増鏈悗錛岀粓浜庡湪1999騫?鏈堝叕甯冧簡L2TP鐨勬爣鍑哛FC2661銆傜洰鍓嶇敤鎴鋒嫧鍙瘋闂甀nternet鏃訛紝蹇呴』浣跨敤IP鍗忚錛屽茍涓斿叾鍔ㄦ佸緱鍒扮殑IP鍦板潃涔熸槸鍚堟硶鐨勩侺2TP鐨勫ソ澶勫湪浜庢敮鎸佸縐嶅崗璁紝鐢ㄦ埛鍙互淇濈暀鍘熸湁鐨処PX銆丄ppletalk絳夊崗璁垨鍏徃鍘熸湁鐨処P鍦板潃銆侺2TP榪樿В鍐充簡澶氫釜PPP閾捐礬鐨勬崋緇戦棶棰橈紝PPP閾捐礬鎹嗙粦瑕佹眰鍏舵垚鍛樺潎鎸囧悜鍚屼竴涓狽AS錛孡2TP鍒欏厑璁稿湪鐗╃悊涓婅繛鎺ュ埌涓嶅悓NAS鐨凱PP閾捐礬錛屽湪閫昏緫涓婄殑緇堢偣涓哄悓涓涓墿鐞嗚澶囥侺2TP鎵╁睍浜哖PP榪炴帴錛屽湪浼犵粺鐨勬柟寮忎腑鐢ㄦ埛閫氳繃妯℃嫙鐢佃瘽綰挎垨ISDN/ADSL涓庣綉緇滆闂湇鍔″櫒寤虹珛涓涓2灞傜殑榪炴帴錛屽茍鍦ㄥ叾涓婅繍琛孭PP錛岀2灞傝繛鎺ョ殑緇堢偣鍜孭PP浼氳瘽鐨勭粓鐐瑰潎璁懼湪鍚屼竴涓澶囦笂(濡侼AS)銆侺2TP浣滀負PPP鐨勬墿鍏呮彁渚涗簡鏇村己澶х殑鍔熻兘錛屽寘鎷厑璁哥2灞傝繛鎺ョ殑緇堢偣鍜孭PP浼氳瘽鐨勭粓鐐瑰垎鍒鍦ㄤ笉鍚岀殑璁懼涓娿?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆L2TP涓昏鐢盠AC(L2TP Access Concentrator)鍜孡NS(L2TP Network Server)鏋勬垚銆侺AC鏀寔瀹㈡埛绔殑L2TP錛屽彂璧峰懠鍙紝鎺ユ敹鍛煎彨鍜屽緩绔嬮毀閬擄紱LNS鏄墍鏈夐毀閬撶殑緇堢偣銆傚湪浼犵粺鐨凱PP榪炴帴涓紝鐢ㄦ埛鎷ㄥ彿榪炴帴鐨勭粓鐐規槸LAC錛岃孡2TP鑳芥妸PPP鍗忚鐨勭粓鐐瑰歡浼稿埌LNS銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆L2TP鐨勫緩绔嬭繃紼嬪鍥?銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆1.鐢ㄦ埛閫氳繃鍏敤鐢佃瘽緗戞垨ISDN鎷ㄥ彿鍛煎彨鏈湴鎺ュ叆鏈嶅姟鍣↙AC錛汱AC鎺ュ彈鍛煎彨騫惰繘琛屽熀鏈殑璇嗗埆榪囩▼錛岃繖涓榪囩▼鍙互閲囩敤鍑犵鏍囧噯錛屽鍩熷悕銆佸懠鍙嚎璺瘑鍒?CLID)鎴栨嫧鍙稩D涓氬姟(DNIS)絳夈?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆2.褰撶敤鎴瘋紜涓哄悎娉曚紒涓氱敤鎴鋒椂錛屽氨寤虹珛涓涓氬悜LNS鐨勬嫧鍙稸PN闅ч亾銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆3.浼佷笟鍐呴儴鐨勫畨鍏ㄦ湇鍔″櫒濡俆ACACS+銆丷ADIUS瀵規嫧鍙風敤鎴瘋繘琛岄獙璇併?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆4.LNS涓庤繙紼嬬敤鎴蜂氦鎹PP淇℃伅錛屽垎閰岻P鍦板潃銆侺NS鍙噰鐢ㄤ紒涓氫笓鐢ㄥ湴鍧(鏈敞鍐岀殑IP鍦板潃)鎴栨湇鍔℃彁渚涘晢鎻愪緵鐨勫湴鍧絀洪棿鍒嗛厤IP鍦板潃銆傚洜涓哄唴閮ㄦ簮IP鍦板潃涓庣洰鐨勫湴IP鍦板潃瀹為檯涓婇兘閫氳繃鏈嶅姟鎻愪緵鍟嗙殑IP緗戠粶鍦≒PP淇℃伅鍖呭唴浼犻侊紝浼佷笟涓撶敤鍦板潃瀵規彁渚涜呯殑緗戠粶鏄忔槑鐨勩?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆5.绔埌绔殑鏁版嵁浠庢嫧鍙風敤鎴蜂紶鍒癓NS銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆鍦ㄥ疄闄呭簲鐢ㄤ腑錛孡AC灝嗘嫧鍙風敤鎴風殑PPP甯у皝瑁呭悗錛屼紶閫佸埌LNS錛屽悗鑰呭幓鎺夊皝瑁呭寘澶達紝鍙栧嚭PPP甯э紝鍐嶅幓鎺塒PP甯уご錛屾渶鍚庤幏寰楃綉緇滃眰鏁版嵁鍖呫?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆L2TP鏂瑰紡緇欐湇鍔℃彁渚涘晢鍜岀敤鎴峰甫鏉ヤ簡璁稿鏂逛究銆傜敤鎴蜂笉闇瑕佸湪PC鏉夸笂瀹夎涓撻棬鐨勫鎴風杞歡錛屼紒涓氱綉鍙互浣跨敤鏈敞鍐岀殑IP鍦板潃錛屽茍鍦ㄦ湰鍦扮鐞嗚璇佹暟鎹簱錛屼粠鑰岄檷浣庝簡搴旂敤鎴愭湰鍜屽煿璁淮鎶よ垂鐢ㄣ?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆涓嶱PTP鍜孡2F鐩告瘮錛孡2TP鐨勪紭鐐瑰湪浜庢彁渚涗簡宸敊鍜屾祦閲忔帶鍒訛紱L2TP浣跨敤UDP灝佽鍜屼紶閫丳PP甯с傞潰鍚戞棤榪炴帴鐨刄DP鏃犳硶淇濊瘉緗戠粶鏁版嵁鐨勫彲闈犱紶杈擄紝L2TP浣跨敤Nr錛堜笅涓涓笇鏈涙帴鍙楃殑淇℃伅搴忓垪鍙鳳級鍜孨s錛堝綋鍓嶅彂閫佺殑鏁版嵁鍖呭簭鍒楀彿錛夊瓧孌佃繘琛屾祦閲忓拰宸敊鎺у埗銆傚弻鏂歸氳繃搴忓垪鍙鋒潵紜畾鏁版嵁鍖呯殑欏哄簭鍜岀紦鍐插尯錛屼竴鏃︿涪澶辨暟鎹紝鏍規嵁搴忓垪鍙峰彲浠ヨ繘琛岄噸鍙戙?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆浣滀負PPP鐨勬墿灞曞崗璁紝L2TP鏀寔鏍囧噯鐨勫畨鍏ㄧ壒鎬HAP鍜孭AP錛屽彲浠ヨ繘琛岀敤鎴瘋韓浠借璇併侺2TP瀹氫箟浜嗘帶鍒跺寘鐨勫姞瀵嗕紶杈擄紝姣忎釜琚緩绔嬬殑闅ч亾鍒嗗埆鐢熸垚涓涓嫭涓鏃犱簩鐨勯殢鏈洪挜鍖欙紝浠ヤ究瀵逛粯嬈洪獥鎬х殑鏀誨嚮錛屼絾鏄畠瀵逛紶杈撲腑鐨勬暟鎹茍涓嶅姞瀵嗐?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆閫氱敤璺敱灝佽<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆閫氱敤璺敱灝佽錛圙RE錛欸eneric Routing Encapsulation錛夊湪RFC1701/RFC1702涓畾涔夛紝瀹冭瀹氫簡鎬庢牱鐢ㄤ竴縐嶇綉緇滃眰鍗忚鍘誨皝瑁呭彟涓縐嶇綉緇滃眰鍗忚鐨勬柟娉曘侴RE鐨勯毀閬撶敱涓ょ鐨勬簮IP鍦板潃鍜岀洰鐨処P鍦板潃鏉ュ畾涔夛紝瀹冨厑璁哥敤鎴蜂嬌鐢↖P灝佽IP銆両PX銆丄ppleTalk錛屽茍鏀寔鍏ㄩ儴鐨勮礬鐢卞崗璁紝濡俁IP銆丱SPF銆両GRP銆丒IGRP銆傞氳繃GRE錛岀敤鎴峰彲浠ュ埄鐢ㄥ叕鐢↖P緗戠粶榪炴帴IPX緗戠粶鍜孉ppleTalk緗戠粶錛岃繕鍙互浣跨敤淇濈暀鍦板潃榪涜緗戠粶浜掕仈錛屾垨瀵瑰叕緗戦殣钘忎紒涓氱綉鐨処P鍦板潃銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆GRE鐨勫寘澶村寘鍚簡鍗忚綾誨瀷錛堢敤浜庢爣鏄庝箻瀹㈠崗璁殑綾誨瀷錛夛紱鏍¢獙鍜屽寘鎷簡GRE鐨勫寘澶村拰瀹屾暣鐨勪箻瀹㈠崗璁笌鏁版嵁錛涘瘑閽ワ紙鐢ㄤ簬鎺ユ敹绔獙璇佹帴鏀剁殑鏁版嵁錛夛紱搴忓垪鍙鳳紙鐢ㄤ簬鎺ユ敹绔暟鎹寘鐨勬帓搴忓拰宸敊鎺у埗錛夊拰璺敱淇℃伅錛堢敤浜庢湰鏁版嵁鍖呯殑璺敱錛夈?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆GRE鍙彁渚涗簡鏁版嵁鍖呯殑灝佽錛屽畠娌℃湁闃叉緗戠粶渚﹀惉鍜屾敾鍑葷殑鍔犲瘑鍔熻兘銆傛墍浠ュ湪瀹為檯鐜涓畠甯稿拰IPsec涓璧蜂嬌鐢紝鐢盜Psec涓虹敤鎴鋒暟鎹殑鍔犲瘑錛岀粰鐢ㄦ埛鎻愪緵鏇村ソ鐨勫畨鍏ㄦ湇鍔°?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆IP瀹夊叏鍗忚<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆IP瀹夊叏鍗忚錛圛PSec錛欼P Security錛夊疄闄呬笂鏄竴濂楀崗璁寘鑰屼笉鏄竴涓嫭绔嬬殑鍗忚錛岃繖涓鐐瑰浜庢垜浠璇咺PSec鏄緢閲嶈鐨勩備粠1995騫村紑濮婭PSec鐨勭爺絀朵互鏉ワ紝IETF IPSec宸ヤ綔緇勫湪瀹冪殑涓婚〉涓婂彂甯冧簡鍑犲崄涓狪nternet鑽夋鏂囩尞鍜?2涓猂FC鏂囦歡銆傚叾涓紝姣旇緝閲嶈鐨勬湁RFC2409 IKE錛堜簰榪炵綉瀵嗛挜浜ゆ崲錛夈丷FC2401 IPSec鍗忚銆丷FC2402 AH楠岃瘉鍖呭ご銆丷FC2406 ESP鍔犲瘑鏁版嵁絳夋枃浠躲?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆IPSec瀹夊叏浣撶郴鍖呮嫭3涓熀鏈崗璁細AH鍗忚涓篒P鍖呮彁渚涗俊鎭簮楠岃瘉鍜屽畬鏁存т繚璇侊紱ESP鍗忚鎻愪緵鍔犲瘑鏈哄埗錛涘瘑閽ョ鐞嗗崗璁?ISAKMP)鎻愪緵鍙屾柟浜ゆ祦鏃剁殑鍏變韓瀹夊叏淇℃伅銆侲SP鍜孉H鍗忚閮芥湁鐩稿叧鐨勪竴緋誨垪鏀寔鏂囦歡錛岃瀹氫簡鍔犲瘑鍜岃璇佺殑綆楁硶銆傛渶鍚庯紝瑙i噴鍩燂紙DOI錛夐氳繃涓緋誨垪鍛戒護銆佺畻娉曘佸睘鎬у拰鍙傛暟榪炴帴鎵鏈夌殑IPSec緇勬枃浠躲?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆闅ч亾鎶鏈簲鐢?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆<a href="http://www.shnenglu.com/view/480950.htm" target=_blank><u><font color=#0000ff>铏氭嫙涓撶敤緗戠粶</font></u></a><br> <div style="FONT-SIZE: 10pt" class=spctrl><u><font color=#0000ff></font></u></div> 銆銆VPN鏄疘nternet鎶鏈繀閫熷彂灞曠殑浜х墿錛屽叾綆鍗曠殑瀹氫箟鏄紝鍦ㄥ叕鐢ㄦ暟鎹綉涓婂緩绔嬪睘浜庤嚜宸辯殑涓撶敤鏁版嵁緗戙備篃灝辨槸璇翠笉鍐嶄嬌鐢ㄩ暱閫斾笓綰垮緩绔嬩笓鐢ㄦ暟鎹綉錛岃屾槸鍏呭垎鍒╃敤瀹屽杽鐨勫叕鐢ㄦ暟鎹綉寤虹珛鑷繁鐨勪笓鐢ㄧ綉銆傚畠鐨勪紭鐐規槸錛屾棦鍙繛鍒板叕緗戞墍鑳借揪鍒扮殑浠諱綍鍦扮偣錛屼韓鍙楀叾淇濆瘑鎬с佸畨鍏ㄦу拰鍙鐞嗘э紝鍙堥檷浣庣綉緇滅殑浣跨敤鎴愭湰銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆VPN渚濋潬Internet鏈嶅姟鎻愪緵鍟嗭紙ISP錛夊拰鍏朵粬鐨勭綉緇滄湇鍔℃彁渚涘晢錛圢SP錛夊湪鍏敤緗戜腑寤虹珛鑷繁鐨勪笓鐢?#8220;闅ч亾”錛屼笉鍚岀殑淇℃伅鏉ユ簮錛屽彲鍒嗗埆浣跨敤涓嶅悓鐨?#8220;闅ч亾”榪涜浼犺緭銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆鏂板嚭鍙扮殑鏍囧噯ISE CHEIP6鐗堜繚璇佺敤鎴鋒暟鎹殑瀹夊叏鍔犲瘑銆傜敱浜庣敤鎴峰浼佷笟緗戜紶杈撲釜浜烘暟鎹緢鏁忔劅錛屽洜姝ら泦鎴愬害鏇撮珮鐨?a href="http://www.shnenglu.com/view/105152.htm" target=_blank><u><font color=#0000ff>VPN鎶鏈?/font></u></a>涓嶄箙灝嗕細嫻佽璧鋒潵銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆Linux 涓殑IP闅ч亾<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆涓轟簡鍦═CP/IP緗戠粶涓紶杈撳叾浠栧崗璁殑鏁版嵁鍖咃紝Linux閲囩敤浜嗕竴縐岻P闅ч亾鎶鏈傚湪宸茬粡浣跨敤澶氬勾鐨勬ˉ鎺ユ妧鏈腑灝辨槸閫氳繃鍦ㄦ簮鍗忚鏁版嵁鍖呬笂鍐嶅涓婁竴涓狪P鍗忚甯芥潵瀹炵幇銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆鍒╃敤IP闅ч亾浼犻佺殑鍗忚鍖呬篃鍖呮嫭IP鏁版嵁鍖咃紝Linux鐨処PIP鍖呭皝鎸囩殑灝辨槸榪欑鎯呭喌銆?a href="http://www.shnenglu.com/view/65888.htm" target=_blank><u><font color=#0000ff>縐誨姩IP</font></u></a>錛圡obile-IP錛夊拰IP澶氱偣騫挎挱錛圛P-Multicast錛夋槸涓や釜嫻佽鐨勪緥瀛愩傜洰鍓嶏紝IP闅ч亾鎶鏈湪VPN涓篃鏄劇ず鍑烘瀬澶х殑欖呭姏銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆縐誨姩IP鏄湪鍏ㄧ悆Internet涓婃彁渚涚Щ鍔ㄥ姛鑳界殑涓縐嶆湇鍔★紝瀹冨厑璁歌妭鐐瑰湪鍒囨崲閾捐礬鏃朵粛鍙繚鎸佹鍦ㄨ繘琛岀殑閫氫俊銆傚畠鎻愪緵浜嗕竴縐岻P璺敱鏈哄埗錛屼嬌縐誨姩鑺傜偣浠ヤ竴涓案涔呯殑IP鍦板潃榪炴帴鍒頒換浣曢摼璺笂銆備笌鐗瑰畾涓繪満璺敱鎶鏈拰鏁版嵁閾捐礬灞傛柟妗堜笉鍚岋紝縐誨姩IP榪樿瑙e喅瀹夊叏鎬у拰鍙潬鎬ч棶棰橈紝騫朵笌浼犺緭濯掍粙鏃犲叧銆傜Щ鍔↖P鐨勫彲鎵╁睍鎬т嬌鍏跺彲浠ュ湪鏁翠釜浜掕仈緗戜笂搴旂敤銆?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆GPRS闅ч亾鍗忚<br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆闅忕潃闅ч亾鎶鏈殑鍙戝睍錛屽悇縐嶄笟鍔″凡緇忓紑濮嬫牴鎹湰涓氬姟鐨勭壒鐐瑰埗瀹氱浉搴旂殑闅ч亾鍗忚銆侴PRS錛圙eneral Packet Radio Service錛変腑鐨勯毀閬撳崗璁瓽TP錛圙PRS Tunnel Protocol錛夊氨鏄竴渚嬨?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆GPRS鏄疓SM鎻愪緵鐨勫垎緇勪氦鎹㈠拰鍒嗙粍浼犺緭鏂瑰紡鐨勬柊鐨勬壙杞戒笟鍔★紝鍙互搴旂敤鍦≒LMN錛圥ublic Land Mobile Network錛夊唴閮ㄦ垨搴旂敤鍦℅PRS緗戜笌澶栭儴浜掕仈鍒嗙粍鏁版嵁緗戯紙IP銆乆.25錛変箣闂寸殑鍒嗙粍鏁版嵁浼犻侊紝GPRS鑳芥彁渚涘埌鐜版湁鏁版嵁涓氬姟鐨勬棤緙濊繛鎺ャ傚畠鍦℅SM緗戠粶涓鍔犱簡涓や釜鑺傜偣錛氭湇鍔PRS鏀寔鑺傜偣錛圫GSN鈹serving GPRS support node錛夊拰緗戝叧GPRS鏀寔鑺傜偣錛圙GSN鈹Gateway GPRS support node錛夈?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆SGSN鏄疓PRS楠ㄥ共緗戜笌鏃犵嚎鎺ュ叆緗戜箣闂寸殑鎺ュ彛錛屽畠灝嗗垎緇勪氦鎹㈠埌姝g‘鐨勫熀绔欏瓙緋葷粺錛圔SS錛夈傚叾浠誨姟鍖呮嫭鎻愪緵瀵圭Щ鍔ㄥ彴鐨勫姞瀵嗐佽璇併佷細璇濓紙session錛夌鐞嗐佺Щ鍔ㄦх鐞嗗拰閫昏緫閾捐礬綆$悊銆傚畠涔熸彁渚涘埌HLR絳夋暟鎹簱鐨勮繛鎺ャ?br> <div style="FONT-SIZE: 10pt" class=spctrl></div> 銆銆閫氳繃GPRS闅ч亾鍗忚鍙負澶氱鍗忚鐨勬暟鎹垎緇勯氳繃GPRS楠ㄥ共緗戞彁渚涢毀閬撱侴TP鏍規嵁鎵榪愯澆鐨勫崗璁渶姹傦紝鍒╃敤TCP鎴朥DP鍗忚鏉ュ垎鍒彁渚涘彲闈犵殑榪炴帴錛堝鏀寔X.25鐨勫垎緇勪紶杈擄級鍜屾棤榪炴帴鏈嶅姟錛堝IP鍒嗙粍錛夈?/div> <img src ="http://www.shnenglu.com/jack-wang/aggbug/107501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">灝忕帇</a> 2010-02-08 17:13 <a href="http://www.shnenglu.com/jack-wang/archive/2010/02/08/107501.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Socket紼嬪簭寮鍙戯紝鍙戦佺鍐欏叆鏁版嵁鎴愬姛錛屾帴鏀剁鏀朵笉鍒版暟鎹殑鐜拌薄鍒嗘瀽http://www.shnenglu.com/jack-wang/archive/2010/01/28/106660.html灝忕帇灝忕帇Thu, 28 Jan 2010 10:47:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/01/28/106660.htmlhttp://www.shnenglu.com/jack-wang/comments/106660.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/01/28/106660.html#Feedback1http://www.shnenglu.com/jack-wang/comments/commentRss/106660.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/106660.htmlProblem:

  • 1 client 1 server, connected with non-block tcp socket. Linux 2.6.*+.
  • Client 鍐欏叆澶ф 3k 鏁版嵁鍒?socket銆?
  • Write()姝g‘榪斿洖瀹為檯鍐欏叆瀛楄妭鏁般?
  • Server 浠涔堜篃鏀朵笉鍒般?

Causes:

  • 鍙戦佺 MTU紼嶅ぇ浜庤礬鐢卞櫒涓婄殑MTU璁劇疆
  • 閫氱煡鍙戦佺闇瑕佹媶鍖呯殑ICMP鍦ㄦ煇澶勮鏉鎺変簡
  • 鍙戦佺涓嶅仠鐨勯噸鍙戝寘

璁劇疆浜咲F鏍囧織鐨刬p鍖呭綋閬囧埌璺敱鍣ㄧ殑MTU姣斿寘灝忕殑鏃跺欙紝涓嶄細琚礬鐢卞櫒鎷嗗寘銆傝岃礬鐢卞櫒鍙戦乮cmp娑堟伅鍒板彂閫佺錛岄氱煡瀹冨簲璇ユ媶鍖呫?/p>

浣唅cmp娑堟伅琚槻鐏鎷︽埅涓嬫潵銆?/p>

鐜鍜岀幇璞★細
榪欎釜渚嬪瓙涓紝MTU鍦╟lient鍜宻erver閮芥槸1500.

dump鍑烘潵鐨勫寘濡備笅:

瀹㈡埛绔湅鍒扮殑:
鍙戦佷簡2涓寘錛屽悗1涓寘鎴愬姛錛岀1涓繃澶ц屼笉鍋滅殑琚彂閫?

id 57558, offset 0, flags [DF], proto: TCP (6), length: 1500) 10.54.40.43.43145 > 10.29.14.74.http: ., cksum 0×5096 (incorrect (-> 0×5c4e), 0:1448(1448) ack 1 win 46

17:23:06.933580 IP (tos 0×0, ttl 64, id 57559, offset 0, flags [DF], proto: TCP (6), length: 730) 10.54.40.43.43145 > 10.29.14.74.http: P, cksum 0×4d94 (incorrect (-> 0×3933), 1448:2126(678) ack 1 win 46

17:23:07.167049 IP (tos 0×0, ttl 64, id 57560, offset 0, flags [DF], proto: TCP (6), length: 1500) 10.54.40.43.43145 > 10.29.14.74.http: ., cksum 0×5096 (incorrect (-> 0×5b5b), 0:1448(1448) ack 1 win 46

17:23:07.634922 IP (tos 0×0, ttl 64, id 57561, offset 0, flags [DF], proto: TCP (6), length: 1500) 10.54.40.43.43145 > 10.29.14.74.http: ., cksum 0×5096 (incorrect (-> 0×5987), 0:1448(1448) ack 1 win 46

鎺ュ彈绔湅鍒扮殑:
鍙湁730澶у皬鐨勫寘鎺ュ彈鎴愬姛

17:23:08.605622 IP (tos 0×0, ttl 59, id 57559, offset 0, flags [DF], proto: TCP (6), length: 730) 202.108.3.204.43145 > 10.29.14.74.http: P, cksum 0×9d5b (correct), 1448:2126(678) ack 1 win 46

瑙e喅鏂規硶:
璋冩暣鍙戦佺鏈哄櫒鐨勯厤緗?錛堜換閫?涓級

鍦ㄧ綉緇滃眰涓?
Decrease mtu on network adapter:

ifconfig eth* mtu 1400

鎿嶄綔緋葷粺閰嶇疆:
Clear the default ‘MTU discovery’ flag with sysctl:

net.ipv4.ip_no_pmtu_disc = 1

鎴栧湪搴旂敤紼嬪簭閲?
Set socket option ‘IP_MTU_DISCOVER’ with setsockopt(2) to clear ‘DF’ flag of IP package.

Reference:

  1. DF flag of IP package Header
  2. Internet Control Message Protocol
  3. IP fragmentation
  4. MTU or Maximum transmission unit
  5. IP programming
  6. Path MTU Discovery
  7. sysctl

Thanks錛?/strong>

esx kobe steve

鏉ヨ嚜錛?a >http://blog.developers.api.sina.com.cn/?p=672
鍘熸枃錛?a >http://drdr-xp-tech.blogspot.com/2009/04/black-hole-socket-problem.html



灝忕帇 2010-01-28 18:47 鍙戣〃璇勮
]]>
asio寮傛鏂瑰紡http://www.shnenglu.com/jack-wang/archive/2009/08/19/93756.html灝忕帇灝忕帇Tue, 18 Aug 2009 16:36:00 GMThttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93756.htmlhttp://www.shnenglu.com/jack-wang/comments/93756.htmlhttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93756.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/93756.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/93756.html寮傛鏂瑰紡 鍜屽悓姝ユ柟寮忎笉鍚岋紝浠庢潵涓嶈姳鏃墮棿鍘葷瓑閭d簺榫熼熺殑IO鎿嶄綔錛屽彧鏄悜緋葷粺璇翠竴澹拌鍋氫粈涔堬紝鐒跺悗灝卞彲浠ュ仛鍏跺畠浜嬪幓浜嗐?br />濡傛灉緋葷粺瀹屾垚浜嗘搷浣滐紝 緋葷粺灝變細閫氳繃鎴戜箣鍓嶇粰瀹冪殑鍥炶皟瀵硅薄鏉ラ氱煡鎴戙?
鍦ˋSIO搴撲腑錛屽紓姝ユ柟寮忕殑鍑芥暟鎴栨柟娉曞悕縐板墠闈㈤兘鏈夆渁sync_鈥?鍓嶇紑錛屽嚱鏁板弬鏁伴噷浼氳姹傛斁涓涓洖璋冨嚱鏁幫紙鎴栦豢鍑芥暟錛夈?br />寮傛鎿嶄綔鎵ц 鍚庝笉綆℃湁娌℃湁瀹屾垚閮戒細绔嬪嵆榪斿洖錛岃繖鏃跺彲浠ュ仛涓浜涘叾瀹冧簨錛岀洿鍒板洖璋冨嚱鏁幫紙鎴栦豢鍑芥暟錛夎璋冪敤錛岃鏄庡紓姝ユ搷浣滃凡緇忓畬鎴愩?br />鍦ˋSIO涓緢澶氬洖璋冨嚱鏁伴兘鍙帴鍙椾竴涓猙oost::system::error_code鍙傛暟錛屽湪瀹為檯浣跨敤鏃惰偗瀹氭槸涓嶅鐨勶紝鎵浠ヤ竴鑸?浣跨敤浠垮嚱鏁版惡甯︿竴鍫嗙浉鍏蟲暟鎹綔涓哄洖璋冿紝鎴栬呬嬌鐢╞oost::bind鏉ョ粦瀹氫竴鍫嗘暟鎹?
鍙﹀瑕佹敞鎰忕殑鏄紝鍙湁io_service綾葷殑run()鏂規硶榪愯涔嬪悗鍥炶皟瀵硅薄鎵嶄細琚皟鐢紝鍚﹀垯鍗充嬌緋葷粺宸茬粡瀹屾垚浜嗗紓姝ユ搷浣滀篃涓嶄細鏈変換 鍔″姩浣溿?br />濂戒簡錛屽氨浠嬬粛鍒拌繖閲岋紝涓嬮潰鏄垜甯︽潵鐨勫紓姝ユ柟寮廡CP Helloworld鏈嶅姟鍣ㄧ:
1.#include
2.#include
3.#include
4.#include
5.#include
6.
7.using namespace boost::asio;
8.using boost::system::error_code;
9.using ip::tcp;
10.
11.struct CHelloWorld_Service{
12. CHelloWorld_Service(io_service &iosev)
13. :m_iosev(iosev),m_acceptor(iosev, tcp::endpoint(tcp::v4(), 1000))
14. {
15. }
16.
17. void start()
18. {
19. // 寮濮嬬瓑寰呰繛鎺ワ紙闈為樆濉烇級
20. boost::shared_ptr psocket(new tcp::socket(m_iosev));
21. // 瑙﹀彂鐨勪簨浠跺彧鏈塭rror_code鍙傛暟錛屾墍浠ョ敤boost::bind鎶妔ocket緇戝畾榪涘幓
22. m_acceptor.async_accept(*psocket,
23. boost::bind(&CHelloWorld_Service::accept_handler, this, psocket, _1)
24. );
25. }
26.
聽27. // 鏈夊鎴風榪炴帴鏃禷ccept_handler瑙﹀彂
28. void accept_handler(boost::shared_ptr psocket, error_code ec)
29. {
30. if(ec) return;
31. // 緇х畫絳夊緟榪炴帴
32. start();
聽33. // 鏄劇ず榪滅▼IP
聽34. std::cout << psocket->remote_endpoint().address() << std::endl;
35. // 鍙戦佷俊鎭?闈為樆濉?
36. boost::shared_ptr pstr(new std::string("hello async world!"));
37. psocket->async_write_some(buffer(*pstr),
38. boost::bind(&CHelloWorld_Service::write_handler, this, pstr, _1, _2)
39. );
聽40. }
聽41.
42. // 寮傛鍐欐搷浣滃畬鎴愬悗write_handler瑙﹀彂
43. void write_handler(boost::shared_ptr pstr,
44. error_code ec, size_t bytes_transferred)
45. {
46. if(ec)
47. std::cout<< "鍙戦佸け璐?" << std::endl;
48. else
49. std::cout<< *pstr << " 宸插彂閫? << std::endl;
50. }
51.
52.private:
53. io_service &m_iosev;
54. ip::tcp::acceptor m_acceptor;
55.};
56.
57.int main(int argc, char* argv[])
58.{
59. io_service iosev;
60. CHelloWorld_Service sev(iosev);
聽61. // 寮濮嬬瓑寰呰繛鎺?
62. sev.start();
63. iosev.run();
64.
65. return 0;
66.}
鍦ㄨ繖涓緥瀛愪腑錛岄鍏堣皟鐢╯ev.start()寮 濮嬫帴鍙楀鎴風榪炴帴銆?br />鐢變簬async_accept璋?鐢ㄥ悗绔嬪嵆榪斿洖錛宻tart()鏂?娉?涔熷氨椹笂瀹屾垚浜嗐?
sev.start()鍦?鐬棿榪斿洖鍚巌osev.run()寮 濮嬫墽琛岋紝iosev.run()鏂規硶鏄竴涓驚鐜紝璐熻矗鍒嗗彂寮傛鍥炶皟浜嬩歡錛?br />鍙?鏈夋墍鏈夊紓姝ユ搷浣滃叏閮ㄥ畬鎴愭墠浼氳繑鍥炪?br />榪欓噷鏈変釜闂錛屽氨鏄淇濊瘉start()鏂規硶涓璵_acceptor.async_accept鎿?浣滄墍鐢ㄧ殑tcp::socket瀵硅薄鍦ㄦ暣涓紓姝ユ搷浣滄湡闂翠繚鎸佹湁鏁?br />(涓?鐒剁郴緇熷簳灞傚紓姝ユ搷浣滀簡涓鍗婄獊鐒跺彂鐜皌cp::socket娌′簡錛屼笉鏄嬁浜哄寮娑槢-_-!!!)錛?br />鑰屼笖瀹㈡埛绔繛鎺ヨ繘鏉ュ悗榪欎釜tcp::socket瀵硅薄榪?鏈夌敤鍛€?br />榪欓噷鐨勮В鍐沖姙娉曟槸浣跨敤涓涓甫璁℃暟鐨勬櫤鑳芥寚閽坆oost::shared_ptr錛屽茍鎶婅繖涓寚閽堜綔涓哄弬鏁扮粦瀹氬埌鍥炶皟鍑芥暟涓娿?br />涓鏃︽湁瀹㈡埛榪炴帴錛屾垜浠湪start()閲岀粰鐨勫洖璋冨嚱鏁癮ccept_handler灝變細琚?璋冪敤錛?br />棣栧厛璋冪敤start()緇х畫寮傛絳夊緟鍏?瀹冨鎴風鐨勮繛鎺ワ紝鐒跺悗浣跨敤緇戝畾榪涙潵鐨則cp::socket瀵硅薄涓庡綋鍓嶅鎴風閫氫俊銆?br />鍙戦佹暟鎹篃浣跨敤浜嗗紓姝ユ柟寮?async_write_some)錛?鍚屾牱瑕佷繚璇佸湪鏁翠釜寮傛鍙戦佹湡闂寸紦鍐插尯鐨勬湁鏁堟э紝
鎵浠ヤ篃鐢╞oost::bind緇戝畾浜哹oost::shared_ptr銆?br />瀵逛簬瀹㈡埛绔篃涓鏍鳳紝鍦╟onnect鍜宺ead_some鏂規硶鍓嶅姞涓涓猘sync_鍓嶇紑錛岀劧鍚庡姞鍏ュ洖璋冨嵆鍙紝澶у鑷繁緇冧範鍐欎竴鍐欍?


灝忕帇 2009-08-19 00:36 鍙戣〃璇勮
]]>
asio鍚屾鏂瑰紡http://www.shnenglu.com/jack-wang/archive/2009/08/19/93755.html灝忕帇灝忕帇Tue, 18 Aug 2009 16:29:00 GMThttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93755.htmlhttp://www.shnenglu.com/jack-wang/comments/93755.htmlhttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93755.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/93755.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/93755.html Boost.Asio鏄竴涓法騫沖彴鐨勭綉緇滃強搴曞眰IO鐨凜++緙栫▼搴擄紝瀹冧嬌鐢ㄧ幇浠++鎵嬫硶瀹炵幇浜嗙粺涓鐨勫紓姝ヨ皟鐢ㄦā鍨嬨?br>澶存枃浠?#include
鍚嶇┖闂?using namespace boost::asio;
ASIO搴撹兘澶熶嬌鐢═CP銆乁DP銆両CMP銆佷覆鍙f潵鍙戦?鎺ユ敹鏁版嵁錛?br>涓嬮潰鍏堜粙緇峊CP鍗忚鐨勮鍐欐搷浣滃浜庤鍐欐柟寮忥紝ASIO鏀寔鍚屾鍜屽紓姝ヤ袱縐嶆柟寮忥紝
棣栧厛鐧誨満鐨勬槸鍚屾鏂瑰紡錛?br>涓嬮潰璇峰悓姝ユ柟寮忚嚜鎴戜粙緇嶄竴涓嬶細澶у濂斤紒鎴戞槸鍚屾鏂瑰紡錛佹垜鐨勪富瑕佺壒鐐瑰氨鏄墽鐫錛?br>鎵鏈夌殑鎿嶄綔閮借瀹屾垚鎴栧嚭閿欐墠浼氳繑鍥烇紝涓嶈繃鍋剁殑鎵х潃琚ぇ瀹剁О涔嬩負闃誨錛屽疄鍦ㄦ槸閮侀椃~~錛堝満涓嬩竴鐗囧槝澹幫級錛?br>鍏跺疄榪欐牱 涔熸槸鏈夊ソ澶勭殑錛屾瘮濡傞昏緫娓呮櫚錛岀紪紼嬫瘮杈冨鏄撱?br>鍦ㄦ湇鍔″櫒绔紝鎴戜細鍋氫釜socket浜ょ粰acceptor瀵硅薄錛岃瀹冧竴鐩寸瓑瀹㈡埛绔繛榪涙潵錛岃繛涓婁互鍚庡啀閫氳繃榪欎釜socket涓庡鎴風閫氫俊錛?
鑰屾墍鏈夌殑閫氫俊閮芥槸浠ラ樆濉炴柟寮忚繘琛岀殑錛岃瀹屾垨鍐欏畬鎵嶄細榪斿洖銆傚湪瀹㈡埛绔篃涓鏍鳳紝
榪欐椂鎴戜細鎷跨潃socket鍘昏繛鎺ユ湇鍔″櫒錛屽綋鐒朵篃鏄繛涓婃垨鍑洪敊浜嗘墠榪斿洖錛屾渶鍚庝篃鏄互闃誨鐨勬柟寮忓拰鏈嶅姟鍣ㄩ氫俊銆?br>鏈変漢璁や負鍚屾鏂瑰紡娌℃湁寮傛鏂瑰紡楂樻晥錛屽叾瀹炶繖鏄墖闈㈢殑鐞嗚В銆?br>鍦ㄥ崟綰跨▼鐨勬儏鍐典笅鍙兘紜疄濡傛錛屾垜涓嶈兘鍒╃敤鑰楁椂鐨勭綉緇滄搷浣滆繖孌墊椂闂村仛鍒殑浜?鎯咃紝涓嶆槸濂界殑緇熺鏂規硶銆?br>涓嶈繃榪欎釜闂鍙互閫氳繃澶氱嚎紼嬫潵閬垮厤錛屾瘮濡傚湪鏈嶅姟鍣ㄧ璁╁叾涓竴涓嚎紼嬭礋璐g瓑寰呭鎴風榪炴帴錛岃繛鎺ヨ繘鏉ュ悗鎶妔ocket浜ょ粰鍙﹀鐨勭嚎紼嬪幓 鍜屽鎴風閫氫俊錛岃繖鏍蜂笌涓涓鎴風閫氫俊鐨勫悓鏃朵篃鑳芥帴鍙楀叾瀹冨鎴風鐨勮繛鎺ワ紝涓葷嚎紼嬩篃瀹屽叏琚В鏀句簡鍑烘潵銆?br>鎴戠殑浠嬬粛灝辨湁榪欓噷錛岃阿璋㈠ぇ瀹訛紒濂斤紝鎰熻阿鍚屾鏂瑰紡鐨勮嚜鎴戜粙緇嶏紝
鐜板湪鏀懼嚭鍚屾鏂瑰紡鐨勬紨紺轟唬鐮?璧風珛榧撴帉!):
鏈嶅姟鍣ㄧ
1.#include
2.#include
3.
4.using namespace boost::asio;
 5.
 6.int main(int argc, char* argv[])
7.{
8. // 鎵鏈塧sio綾婚兘闇瑕乮o_service瀵硅薄
9. io_service iosev;
10. ip::tcp::acceptor acceptor(iosev,
11. ip::tcp::endpoint(ip::tcp::v4(), 1000));
12. for(;;)
13. {
14. // socket瀵硅薄
15. ip::tcp::socket socket(iosev);
 16. // 絳夊緟鐩村埌瀹㈡埛绔繛鎺ヨ繘鏉?
17. acceptor.accept(socket);
18. // 鏄劇ず榪炴帴榪涙潵鐨勫鎴風
19. std::cout << socket.remote_endpoint().address() << std::endl;
20. // 鍚戝鎴風鍙戦乭ello world!
21. boost::system::error_code ec;
22. socket.write_some(buffer("hello world!"), ec);
23.
24. // 濡傛灉鍑洪敊錛屾墦鍗板嚭閿欎俊鎭?
25. if(ec)
26. {
27. std::cout <<
28. boost::system::system_error(ec).what() << std::endl;
29. break;
30. }
31. // 涓庡綋鍓嶅鎴蜂氦浜掑畬鎴愬悗寰幆緇х畫絳夊緟涓嬩竴瀹㈡埛榪炴帴
32. }
33. return 0;
34.}

瀹㈡埛绔?
1.#include
2.#include
3.
4.using namespace boost::asio;
5.
6.int main(int argc, char* argv[])
7.{
8. // 鎵鏈塧sio綾婚兘闇瑕乮o_service瀵硅薄
9. io_service iosev;
10. // socket瀵硅薄
11. ip::tcp::socket socket(iosev);
12. // 榪炴帴绔偣錛岃繖閲屼嬌鐢ㄤ簡鏈満榪炴帴錛屽彲浠ヤ慨鏀笽P鍦板潃嫻嬭瘯榪滅▼榪炴帴
13. ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 1000);
14. // 榪炴帴鏈嶅姟鍣?
15. boost::system::error_code ec;
16. socket.connect(ep,ec);
17. // 濡傛灉鍑洪敊錛屾墦鍗板嚭閿欎俊鎭?
18. if(ec)
19. {
20. std::cout << boost::system::system_error(ec).what() << std::endl;
21. return -1; 22. }
23. // 鎺ユ敹鏁版嵁
24. char buf[100];
25. size_t len=socket.read_some(buffer(buf), ec);
26. std::cout.write(buf, len);
27.
28. return 0;
29.}

浠庢紨紺轟唬鐮佸彲浠ュ緱鐭?
•ASIO鐨凾CP鍗忚閫氳繃boost::asio::ip鍚?絀洪棿涓嬬殑tcp綾昏繘琛岄氫俊銆?
•IP鍦板潃錛坅ddress,address_v4,address_v6錛夈?绔彛鍙峰拰鍗忚鐗堟湰緇勬垚涓涓鐐癸紙tcp:: endpoint錛夈?br>鐢ㄤ簬鍦ㄦ湇鍔″櫒绔敓鎴恡cp::acceptor瀵?璞★紝騫跺湪鎸囧畾绔彛涓婄瓑寰呰繛鎺ワ紱鎴栬呭湪瀹㈡埛绔繛鎺ュ埌鎸囧畾鍦板潃鐨勬湇鍔″櫒涓娿?
•socket鏄?鏈嶅姟鍣ㄤ笌瀹㈡埛绔氫俊鐨勬ˉ姊侊紝榪炴帴鎴愬姛鍚庢墍鏈夌殑璇誨啓閮芥槸閫氳繃socket瀵?璞″疄鐜扮殑錛屽綋socket鏋?鏋勫悗錛岃繛鎺ヨ嚜鍔ㄦ柇 寮銆?
•ASIO璇誨啓鎵鐢ㄧ殑緙撳啿鍖虹敤buffer鍑?鏁扮敓鎴愶紝榪欎釜鍑芥暟鐢熸垚鐨勬槸涓涓狝SIO鍐呴儴浣跨敤鐨勭紦鍐插尯綾伙紝瀹冭兘鎶婃暟緇勩佹寚閽堬紙鍚屾椂鎸囧畾澶?灝忥級銆乻td::vector銆乻td::string銆乥oost::array鍖呰鎴愮紦鍐插尯綾匯?br> •ASIO涓殑鍑芥暟銆佺被鏂規硶閮芥帴鍙椾竴涓猙oost::system::error_code綾?鍨嬬殑鏁版嵁錛岀敤浜庢彁渚涘嚭閿欑爜銆?br>瀹冨彲浠ヨ漿鎹㈡垚bool嫻嬭瘯鏄惁鍑洪敊錛屽茍閫氳繃boost::system::system_error綾?鑾峰緱璇︾粏鐨勫嚭閿欎俊鎭?br>鍙﹀錛屼篃鍙互涓嶅悜ASIO鐨勫嚱鏁版垨鏂規硶鎻愪緵 boost::system::error_code錛岃繖鏃跺鏋滃嚭閿欑殑璇濆氨浼氱洿 鎺ユ姏鍑哄紓甯革紝寮傚父綾誨瀷灝辨槸boost::system:: system_error(瀹冩槸浠巗td::runtime_error緇ф壙鐨?銆?

灝忕帇 2009-08-19 00:29 鍙戣〃璇勮
]]>
boost::asio 瀹㈡埛绔?/title><link>http://www.shnenglu.com/jack-wang/archive/2009/08/19/93754.html</link><dc:creator>灝忕帇</dc:creator><author>灝忕帇</author><pubDate>Tue, 18 Aug 2009 16:24:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2009/08/19/93754.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/93754.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2009/08/19/93754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/93754.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/93754.html</trackback:ping><description><![CDATA[<div>#pragma once</div><div>#include <iostream></div><div>#include <boost/asio.hpp></div><div>#include <boost/bind.hpp></div><div>#include <boost/shared_ptr.hpp></div><div></div><div></div><div>using namespace boost::asio::ip;</div><div>using namespace boost::asio;</div><div></div><div>class Client</div><div>{</div><div>public:</div><div><span style="white-space:pre"> </span>//boost::shared_ptr<Client><span style="white-space:pre"> </span>ClientPtr;</div><div></div><div>public:</div><div><span style="white-space:pre"> </span>Client(boost::asio::io_service& io_service, tcp::endpoint& endpoint);</div><div></div><div><span style="white-space:pre"> </span>~Client();</div><div></div><div>private:</div><div><span style="white-space:pre"> </span>void handle_connect(const boost::system::error_code& error);</div><div></div><div><span style="white-space:pre"> </span>void handle_read(const boost::system::error_code& error);</div><div></div><div><span style="white-space:pre"> </span>void handle_write(const boost::system::error_code& error);</div><div></div><div>private:</div><div><span style="white-space:pre"> </span>tcp::socket socket_; </div><div><span style="white-space:pre"> </span>char getBuffer[1024];</div><div>};<br /><br /><br /><div>#include "stdafx.h"</div><div>#include "Client.h"</div><div></div><div></div><div>Client::Client(boost::asio::io_service& io_service, tcp::endpoint& endpoint):</div><div>socket_(io_service)</div><div>{</div><div><span style="white-space:pre"> </span>socket_.async_connect(endpoint, boost::bind(&Client::handle_connect, this, boost::asio::placeholders::error));</div><div><span style="white-space:pre"> </span>::memset(getBuffer, '\0', 1024);</div><div>}</div><div></div><div>Client::~Client()</div><div>{</div><div></div><div>}</div><div></div><div>void Client::handle_connect(const boost::system::error_code& error)</div><div>{</div><div><span style="white-space:pre"> </span>if (!error)</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>// 涓榪炰笂錛屽氨鍚戞湇鍔$鍙戦佷俊鎭?nbsp;</div><div><span style="white-space:pre"> </span>boost::asio::async_write(socket_, boost::asio::buffer("hello,server!"),</div><div><span style="white-space:pre"> </span>boost::bind(&Client::handle_write, this, boost::asio::placeholders::error));</div><div></div><div><span style="white-space:pre"> </span>// boost::asio::async_read(...)璇誨彇鐨勫瓧鑺傞暱搴︿笉鑳藉ぇ浜庢暟鎹祦鐨勯暱搴︼紝鍚﹀垯灝變細榪涘叆 </div><div><span style="white-space:pre"> </span>// ioservice.run()綰跨▼絳夊緟錛宺ead鍚庨潰鐨勫氨涓嶆墽琛屼簡銆?nbsp;</div><div><span style="white-space:pre"> </span>//boost::asio::async_read(socket, </div><div><span style="white-space:pre"> </span>// boost::asio::buffer(getBuffer,1024),</div><div><span style="white-space:pre"> </span>// boost::bind(&client::handle_read,this,boost::asio::placeholders::error) </div><div><span style="white-space:pre"> </span>// ); </div><div><span style="white-space:pre"> </span>socket_.async_read_some(boost::asio::buffer(getBuffer, 1024), </div><div><span style="white-space:pre"> </span>boost::bind(&Client::handle_read, this, boost::asio::placeholders::error));</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>else</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>socket_.close();</div><div><span style="white-space:pre"> </span>}</div><div>}</div><div></div><div>void Client::handle_read(const boost::system::error_code& error)</div><div>{</div><div><span style="white-space:pre"> </span>if (!error)</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>std::cout << getBuffer << std::endl;</div><div></div><div><span style="white-space:pre"> </span>//boost::asio::async_read(socket, </div><div><span style="white-space:pre"> </span>// boost::asio::buffer(getBuffer,1024), </div><div><span style="white-space:pre"> </span>// boost::bind(&client::handle_read,this,boost::asio::placeholders::error) </div><div><span style="white-space:pre"> </span>// ); </div><div><span style="white-space:pre"> </span>//榪欐牱灝卞彲浠ュ疄鐜板驚鐜鍙栦簡錛岀浉褰撲簬while錛?錛?nbsp;</div><div><span style="white-space:pre"> </span>//褰撶劧錛屽埌浜嗚繖閲岋紝鍋氳繃緗戠粶鐨勬湅鍙嬪氨搴旇鐩稿綋鐔熸倝浜嗭紝涓浜涢昏緫灝卞彲浠ヨ嚜琛屾墿灞曚簡 </div><div><span style="white-space:pre"> </span>//鎯沖仛鑱婂ぉ瀹ょ殑鏈嬪弸鍙互鐢ㄥ綰跨▼鏉ュ疄鐜?nbsp;</div><div><span style="white-space:pre"> </span>socket_.async_read_some(boost::asio::buffer(getBuffer, 1024),</div><div><span style="white-space:pre"> </span>boost::bind(&Client::handle_read, this, boost::asio::placeholders::error));</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>else</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>socket_.close();</div><div><span style="white-space:pre"> </span>}</div><div>}</div><div></div><div>void Client::handle_write(const boost::system::error_code& error)</div><div>{</div><div></div><div>}<br /><br /><br />////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /><div>#include "stdafx.h"</div><div>#include "Client.h"</div><div></div><div></div><div>using namespace boost::asio::ip;</div><div>using namespace boost::asio;</div><div></div><div>int _tmain(int argc, _TCHAR* argv[])</div><div>{</div><div><span style="white-space:pre"> </span>io_service ioservice;</div><div></div><div><span style="white-space:pre"> </span>tcp::endpoint endpoint(address_v4::from_string("127.0.0.1"), 8100);</div><div><span style="white-space:pre"> </span>//ClientPtr client_ptr(new Client(io_service, endpoint));</div><div><span style="white-space:pre"> </span>Client client(ioservice, endpoint);</div><div></div><div><span style="white-space:pre"> </span>ioservice.run();</div><div></div><div><span style="white-space:pre"> </span>return 0;</div><div>}</div><div></div></div></div><img src ="http://www.shnenglu.com/jack-wang/aggbug/93754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">灝忕帇</a> 2009-08-19 00:24 <a href="http://www.shnenglu.com/jack-wang/archive/2009/08/19/93754.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>boost::asio 鏈嶅姟鍣ㄧhttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93753.html灝忕帇灝忕帇Tue, 18 Aug 2009 16:21:00 GMThttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93753.htmlhttp://www.shnenglu.com/jack-wang/comments/93753.htmlhttp://www.shnenglu.com/jack-wang/archive/2009/08/19/93753.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/93753.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/93753.html#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include "Session.h"
using namespace boost::asio::ip;
using namespace boost::asio;
class Acceptor 
{
public:
typedef boost::shared_ptr<Session> SessionPtr;
public: 
Acceptor(io_service& ioservice, tcp::endpoint& endpoint);
~Acceptor();
private: 
void handle_accept(const boost::system::error_code& error, SessionPtr session);
private: 
io_service& ioservice_;
tcp::acceptor acceptor_; 
};


#include "stdafx.h"
#include "Acceptor.h"
Acceptor::Acceptor(boost::asio::io_service& ioservice, tcp::endpoint& endpoint) : 
ioservice_(ioservice), 
acceptor_(ioservice, endpoint)
{
SessionPtr new_session(new Session(ioservice));
acceptor_.async_accept(new_session->socket(),
boost::bind(&Acceptor::handle_accept, this, boost::asio::placeholders::error, new_session));
}
Acceptor::~Acceptor()
{
}
void Acceptor::handle_accept(const boost::system::error_code& error, SessionPtr session)
{
if (!error)
{
std::cout << "get a new client!" << std::endl; //瀹炵幇瀵規瘡涓鎴風鐨勬暟鎹鐞?nbsp;
session->start();
SessionPtr new_session(new Session(ioservice_));
acceptor_.async_accept(new_session->socket(),
boost::bind(&Acceptor::handle_accept, this, boost::asio::placeholders::error, new_session));
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
#define max_len 1024
using namespace boost::asio::ip;
class Session : public boost::enable_shared_from_this<Session>
{
public:
Session(boost::asio::io_service& ioservice);
~Session();
tcp::socket& socket();
void start();
private:
void handle_write(const boost::system::error_code& error);
void handle_read(const boost::system::error_code& error);
private:
tcp::socket m_socket;
char data_[max_len];
};


灝忕帇 2009-08-19 00:21 鍙戣〃璇勮
]]>
緗戠粶娓告垙鏈嶅姟鍣ㄨ璁?/title><link>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70968.html</link><dc:creator>灝忕帇</dc:creator><author>灝忕帇</author><pubDate>Thu, 01 Jan 2009 19:54:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70968.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/70968.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/70968.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/70968.html</trackback:ping><description><![CDATA[<h1><img height=14 alt=杞澆 src="http://blog.csdn.net/images/turnship.gif" width=15 border=0> <a ><font color=#3468a4>緗戠粶娓告垙鏈嶅姟鍣ㄨ璁?/font></a><cite class=fav_csdnstylebykimi><font face=Tahoma color=#3468a4 size=2>鏀惰棌</font></cite><span id=Post.ascx_ViewPost_PreviousAndNextEntriesUp></h1> <div id="hvzpftn" class=blogstory>鍘熸枃錛?br><a >http://blog.csdn.net/staryy/archive/2008/11/29/3410388.aspx</a><br></span> <script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script> <a ><font color=#006bad>http://www.yq8.cn/html/15/215-47957.html</font></a> <div id="hvzpftn" class=xspace-itemmessage id=xspace-showmessage> <p><font face=Tahoma size=2> </p> <div class="hvzpftn" id=show> <h1 class=xspace-title>緗戠粶娓告垙鏈嶅姟鍣ㄨ璁?/h1> <p class=xspace-smalltxt><a ><font color=#3399cc>涓婁竴綃?/font></a> / <a ><font color=#3399cc>涓嬩竴綃?/font></a>  2008-02-22 17:34:18 / 涓漢鍒嗙被錛?a ><font color=#3399cc>鍥炴敹绔?/font></a> </p> </div> </font> <p><font face=Tahoma size=2></font> </p> <p><font face=Tahoma size=2>銆璋堣繖涓瘽棰樹箣鍓嶏紝棣栧厛瑕佽澶у鐭ラ亾錛屼粈涔堟槸<a onclick="javascript:tagshow(event, '%B7%FE%CE%F1%C6%F7');" href="javascript:;" target=_self><u><strong><font color=#0066cc>鏈嶅姟鍣?/font></strong></u></a>銆傚湪<a onclick="javascript:tagshow(event, '%CD%F8%C2%E7%D3%CE%CF%B7');" href="javascript:;" target=_self><u><strong><a onclick="javascript:tagshow(event, '%CD%F8%C2%E7');" href="javascript:;" target=_self><u><strong><font color=#0066cc>緗戠粶</font></strong></u></a>娓告垙</strong></u></a>涓紝鏈嶅姟鍣ㄦ墍鎵紨鐨勮鑹叉槸鍚屾錛屽箍鎾拰鏈嶅姟鍣ㄤ富鍔ㄧ殑涓浜涜涓猴紝姣斿璇村ぉ姘旓紝NPC AI涔嬬被鐨勶紝涔嬫墍浠ョ幇鍦ㄧ殑寰堝緗戠粶娓告垙鏈嶅姟鍣ㄩ兘闇瑕佽礋鎷呬竴浜涙父鎴忛昏緫涓婄殑榪愮畻鏄洜涓轟負浜嗛槻姝㈠鎴風鐨?a onclick="javascript:tagshow(event, '%D7%F7%B1%D7');" href="javascript:;" target=_self><u><strong><font color=#0066cc>浣滃紛</font></strong></u></a>琛屼負銆備簡瑙e埌榪欎竴鐐癸紝閭d箞鏈郴鍒楃殑鏂囩珷灝嗗垎涓轟袱閮ㄥ垎鏉ヨ皥璋堢綉緇滄父鎴忔湇鍔″櫒鐨?a onclick="javascript:tagshow(event, '%C9%E8%BC%C6');" href="javascript:;" target=_self><u><strong><font color=#0066cc>璁捐</font></strong></u></a>錛屼竴閮ㄥ垎鏄濡備綍鍋氬ソ鏈嶅姟鍣ㄧ殑緗戠粶榪炴帴錛屽悓姝ワ紝騫挎挱浠ュ強NPC鐨勮緗紝鍙︿竴閮ㄥ垎鍒欏皢鐫閲嶈皥璋堝摢浜涢昏緫鏀懼湪鏈嶅姟鍣ㄦ瘮杈冨悎閫傦紝騫朵笖鐢ㄤ粈涔堟牱鐨勭粨鏋勬潵瀹夋帓榪欎簺閫昏緫銆?br><br><br><strong>鏈嶅姟鍣ㄧ殑緗戠粶榪炴帴</strong><br><br>銆銆澶у鏁扮殑緗戠粶娓告垙鐨勬湇鍔″櫒閮戒細閫夋嫨闈為樆濉瀞elect榪欑緇撴瀯錛屼負浠涔堝憿錛熷洜涓虹綉緇滄父鎴忕殑鏈嶅姟鍣ㄩ渶瑕佸鐞嗙殑榪炴帴闈炲父涔嬪錛屽茍涓斿ぇ閮ㄥ垎浼氶夋嫨鍦↙inux/Unix涓嬭繍琛岋紝閭d箞涓烘瘡涓敤鎴峰紑涓涓嚎紼嬪疄闄呬笂鏄緢涓嶅垝綆楃殑錛屼竴鏂歸潰鍥犱負鍦↙inux/Unix涓嬬殑綰跨▼鏄敤榪涚▼榪欎箞涓涓蹇墊ā鎷熷嚭鏉ョ殑錛屾瘮杈冩秷鑰?a onclick="javascript:tagshow(event, '%CF%B5%CD%B3');" href="javascript:;" target=_self><u><strong><font color=#0066cc>緋葷粺</font></strong></u></a>璧勬簮錛屽彟澶栭櫎浜咺/O涔嬪錛屾瘡涓嚎紼嬪熀鏈笂娌℃湁浠涔堝浣欑殑闇瑕佸茍琛岀殑<a onclick="javascript:tagshow(event, '%C8%CE%CE%F1');" href="javascript:;" target=_self><u><strong><font color=#0066cc>浠誨姟</font></strong></u></a>錛岃屼笖緗戠粶娓告垙鏄簰浜ゆч潪甯稿己鐨勶紝鎵浠ョ嚎紼嬮棿鐨勫悓姝ヤ細鎴愪負寰堥夯鐑︾殑闂銆傜敱姝や竴鏉ワ紝瀵逛簬榪欑鍚湁澶ч噺緗戠粶榪炴帴鐨勫崟綰跨▼鏈嶅姟鍣紝鐢ㄩ樆濉炴樉鐒舵槸涓嶇幇瀹炵殑銆傚浜庣綉緇滆繛鎺ワ紝闇瑕佺敤涓涓粨鏋勬潵鍌ㄥ瓨錛屽叾涓渶瑕佸寘鍚竴涓悜瀹㈡埛绔啓娑堟伅鐨勭紦鍐詫紝榪橀渶瑕佷竴涓粠瀹㈡埛绔娑堟伅鐨勭紦鍐詫紝鍏蜂綋鐨勫ぇ灝忔牴鎹叿浣撶殑娑堟伅緇撴瀯鏉ュ畾浜嗐傚彟澶栧浜庡悓姝ワ紝闇瑕佷竴浜涙椂闂存牎瀵圭殑鍊鹼紝榪橀渶瑕佷竴浜涘悇縐嶄笉鍚岀殑鍊兼潵璁板綍褰撳墠鐘舵侊紝涓嬮潰緇欏嚭涓涓垵姝ョ殑榪炴帴鐨勭粨鏋勶細<br><br></font><font face=Fixedsys size=2>typedef connection_s {<br><br>    user_t *ob; /* 鎸囧悜澶勭悊鏈嶅姟鍣ㄧ閫昏緫鐨勭粨鏋?*/<br><br>    int fd; /* socket榪炴帴 */<br><br>    struct sockaddr_in addr; /* 榪炴帴鐨勫湴鍧淇℃伅 */<br><br>    char text[MAX_TEXT]; /* 鎺ユ敹鐨勬秷鎭紦鍐?*/<br><br>    int text_end; /* 鎺ユ敹娑堟伅緙撳啿鐨勫熬鎸囬拡 */<br><br>    int text_start; /* 鎺ユ敹娑堟伅緙撳啿鐨勫ご鎸囬拡 */<br><br>    int last_time; /* 涓婁竴鏉℃秷鎭槸浠涔堟椂鍊欐帴鏀跺埌鐨?*/<br><br>    struct timeval latency; /* 瀹㈡埛绔湰鍦版椂闂村拰鏈嶅姟鍣ㄦ湰鍦版椂闂寸殑宸?*/<br><br>    struct timeval last_confirm_time; /* 涓婁竴嬈¢獙璇佺殑鏃墮棿 */<br><br>    short is_confirmed; /* 璇ヨ繛鎺ユ槸鍚﹂氳繃楠岃瘉榪?*/<br><br>    int ping_num; /* 璇ュ鎴風鍒版湇鍔″櫒绔殑ping鍊?*/<br><br>    int ping_ticker; /* 澶氬皯涓狪O鍛ㄦ湡澶勭悊鏇存柊涓嬈ing鍊?*/<br><br>    int message_length; /* 鍙戦佺紦鍐叉秷鎭暱搴?*/<br><br>    char message_buf[MAX_TEXT]; /* 鍙戦佺紦鍐插尯 */<br><br>    int iflags; /* 璇ヨ繛鎺ョ殑鐘舵?*/<br><br>} connection_t;</font><font face=Tahoma><br><br><font size=2>銆銆鏈嶅姟鍣ㄥ驚鐜殑澶勭悊鎵鏈夎繛鎺ワ紝鏄竴涓寰幆榪囩▼錛屾瘡嬈″驚鐜兘鐢╯elect媯鏌ユ槸鍚︽湁鏂拌繛鎺ュ埌杈撅紝鐒跺悗寰幆鎵鏈夎繛鎺ワ紝鐪嬪摢涓繛鎺ュ彲浠ュ啓鎴栬呭彲浠ヨ錛屽氨澶勭悊璇ヨ繛鎺ョ殑璇誨啓銆傜敱浜庢墍鏈夌殑澶勭悊閮芥槸闈為樆濉炵殑錛屾墍浠ユ墍鏈夌殑Socket IO閮藉彲浠ョ敤涓涓嚎紼嬫潵瀹屾垚銆?br><br>銆銆鐢變簬緗戠粶浼犺緭鐨勫叧緋伙紝姣忔recv()鍒扮殑鏁版嵁鍙兘涓嶆鍖呭惈涓鏉℃秷鎭紝鎴栬呬笉鍒頒竴鏉℃秷鎭紝閭d箞鎬庝箞澶勭悊鍛紵鎵浠ュ浜庢帴鏀舵秷鎭紦鍐茬敤浜嗕袱涓寚閽堬紝姣忔鎺ユ敹閮戒粠text_start寮濮嬭璧鳳紝鍥犱負閲岄潰孌嬬暀鐨勫彲鑳芥槸涓婃鎺ユ敹鍒扮殑澶氫綑鐨勫崐鏉℃秷鎭紝鐒跺悗text_end鎸囧悜娑堟伅緙撳啿鐨勭粨灝俱傝繖鏍風敤涓や釜鎸囬拡灝卞彲浠ュ緢鏂逛究鐨勫鐞嗚繖縐嶆儏鍐碉紝鍙﹀鏈変竴鐐瑰煎緱娉ㄦ剰鐨勬槸錛?a onclick="javascript:tagshow(event, '%BD%E2%CE%F6');" href="javascript:;" target=_self><u><strong><font color=#0066cc>瑙f瀽</font></strong></u></a>娑堟伅鐨勮繃紼嬫槸涓涓驚鐜殑榪囩▼錛屽彲鑳戒竴嬈℃帴鏀跺埌涓ゆ潯浠ヤ笂鐨勬秷鎭湪娑堟伅緙撳啿閲岄潰錛岃繖涓椂鍊欏氨搴旇鎵ц鍒版秷鎭紦鍐查噷闈㈠彧鏈変竴鏉¢兘涓嶅埌鐨勬秷鎭負姝紝澶т綋<a onclick="javascript:tagshow(event, '%C1%F7%B3%CC');" href="javascript:;" target=_self><u><strong><font color=#0066cc>嫻佺▼</font></strong></u></a>濡備笅錛?br><br></font></font><font face=Fixedsys size=2>while ( text_end – text_start > 涓鏉″畬鏁寸殑娑堟伅闀垮害 )<br><br>{<br><br>    浠巘ext_start澶勫紑濮嬪鐞?<br><br>    text_start += 璇ユ秷鎭暱搴?<br><br>}<br><br>memcpy ( text, text + text_start, text_end – text_start );</font><font face=Tahoma><br><br><font size=2>銆銆瀵逛簬娑堟伅鐨勫鐞嗭紝榪欓噷棣栧厛灝遍渶瑕佺煡閬撲綘鐨勬父鎴忔誨叡鏈夊摢浜涙秷鎭紝鎵鏈夌殑娑堟伅閮芥湁鍝簺錛屾墠鑳借璁″嚭姣旇緝鍚堢悊鐨勬秷鎭ご銆備竴鑸潵璇達紝娑堟伅澶ф鍙垎涓轟富瑙掓秷鎭紝鍦烘櫙娑堟伅錛屽悓姝ユ秷鎭拰鐣岄潰娑堟伅鍥涗釜閮ㄥ垎銆傚叾涓富瑙掓秷鎭寘鎷鎴風鎵鎺у埗鐨勮鑹茬殑鎵鏈夊姩浣滐紝鍖呮嫭璧拌礬錛岃窇姝ワ紝鎴樻枟涔嬬被鐨勩傚満鏅秷鎭寘鎷ぉ姘斿彉鍖栵紝涓瀹氱殑鏃墮棿鍦ㄥ満鏅噷鍑虹幇涓浜涗笢瑗跨瓑絳変箣綾葷殑錛岃繖綾繪秷鎭殑鐗圭偣鏄墍鏈夋秷鎭殑鍙戣搗鑰呴兘鏄湇鍔″櫒錛屽箍鎾璞″垯鏄満鏅噷鐨勬墍鏈夌帺瀹躲傝屽悓姝ユ秷鎭垯鏄拡瀵瑰彂璧峰璞℃槸鏌愪釜鐜╁錛岀粡榪囨湇鍔″櫒騫挎挱緇欐墍鏈夌湅寰楄浠栫殑鐜╁錛岃娑堟伅涔熸槸鍖呮嫭鎵鏈夌殑鍔ㄤ綔錛屽拰涓昏娑堟伅涓嶅悓鐨勬槸璇ョ娑堟伅鏄湇鍔″櫒騫挎挱緇欏鎴風鐨勶紝鑰屼富瑙掓秷鎭竴鑸槸瀹㈡埛绔富鍔ㄥ彂緇欐湇鍔″櫒鐨勩傛渶鍚庢槸鐣岄潰娑堟伅錛岀晫闈㈡秷鎭寘鎷槸鏈嶅姟鍣ㄥ彂緇欏鎴風鐨勮亰澶╂秷鎭拰鍚勭<a onclick="javascript:tagshow(event, '%CA%F4%D0%D4');" href="javascript:;" target=_self><u><strong><font color=#0066cc>灞炴?/font></strong></u></a>鍙婄姸鎬佷俊鎭?br><br>銆銆涓嬮潰鏉ヨ皥璋堟秷鎭殑緇勬垚銆備竴鑸潵璇達紝涓涓秷鎭敱娑堟伅澶村拰娑堟伅浣撲袱閮ㄥ垎緇勬垚錛屽叾涓秷鎭ご鐨勯暱搴︽槸涓嶅彉鐨勶紝鑰屾秷鎭綋鐨勯暱搴︽槸鍙彉鐨勶紝鍦ㄦ秷鎭綋涓渶瑕佷繚瀛樻秷鎭綋鐨勯暱搴︺傜敱浜庤緇欐瘡鏉℃秷鎭竴涓緢鏄庢樉鐨勫尯鍒嗭紝鎵浠ラ渶瑕佸畾涔変竴涓秷鎭ご鐗規湁鐨勬爣蹇楋紝鐒跺悗闇瑕佹秷鎭殑綾誨瀷浠ュ強娑堟伅ID銆傛秷鎭ご澶т綋緇撴瀯濡備笅錛?br><br></font></font><font face=Fixedsys size=2>type struct message_s {<br><br>    unsigned short message_sign;<br><br>    unsigned char message_type;<br><br>    unsigned short message_id<br><br>    unsigned char message_len<br><br>}message_t;<br><br></font><font face=Tahoma><br><font size=2><strong>鏈嶅姟鍣ㄧ殑騫挎挱</strong><br><br>銆銆鏈嶅姟鍣ㄧ殑騫挎挱鐨勯噸鐐瑰氨鍦ㄤ簬濡備綍璁$畻鍑哄箍鎾殑瀵硅薄銆傚緢鏄劇劧錛屽湪涓寮犲緢澶х殑鍦板浘閲岄潰錛屾煇涓帺瀹跺湪鏈涓滆竟鐨勪竴涓姩浣滐紝涓涓湪鏈瑗胯竟鐨勭帺瀹舵槸搴旇鐪嬩笉鍒扮殑錛岄偅涔堟庝箞鏉ヨ綆楀箍鎾殑瀵硅薄鍛紵鏈綆鍗曠殑<a onclick="javascript:tagshow(event, '%B0%EC%B7%A8');" href="javascript:;" target=_self><u><strong><font color=#0066cc>鍔炴硶</font></strong></u></a>錛屽氨鏄妸鍦板浘鍒嗗潡錛屽垎鎴愬ぇ灝忓悎閫傜殑灝忓潡錛岀劧鍚庢瘡嬈″彧璞″懆鍥村嚑涓皬鍧楃殑鐜╁榪涜騫挎挱銆傞偅涔堢┒绔熷垏鍒板澶ф瘮杈冨悎閫傚憿錛熶竴鑸潵璇達紝鍒囧緱鍧楀ぇ浜嗭紝<a onclick="javascript:tagshow(event, '%C4%DA%B4%E6');" href="javascript:;" target=_self><u><strong><font color=#0066cc>鍐呭瓨</font></strong></u></a>鐨勬秷鑰椾細澧炲ぇ錛屽垏寰楀潡灝忎簡錛孋PU鐨勬秷鑰椾細澧炲ぇ錛堝師鍥犱細鍦ㄥ悗闈㈡彁鍒幫級銆備釜浜鴻寰楀垏鎴愪竴灞忓乏鍙崇殑灝忓潡姣旇緝鍚堥傦紝姣忔騫挎挱騫挎挱鍛ㄥ洿涔濅釜灝忓潡鐨勭帺瀹訛紝鐢變簬騫挎挱鐨勬搷浣滈潪甯擱綣侊紝閭d箞閬嶅埄鍛ㄥ洿涔濆潡鐨勬搷浣滃氨浼氬彉寰楃浉褰撶殑棰戠箒錛屾墍浠ュ鏋滃潡鍒嗗緱灝忎簡錛岄偅涔堥亶鍒╃殑鑼冨洿灝變細鎵╁ぇ錛孋PU鐨勮祫婧愪細寰堝揩鐨勮鍚冨畬銆?br><br>銆銆鍒囧ソ鍧椾互鍚庯紝鎬庝箞璁╃帺瀹跺湪鍚勪釜鍧椾箣闂磋蛋鏉ヨ蛋鍘誨憿錛熻鎴戜滑鏉ユ兂鎯沖湪鍒囨崲涓嬈″潡鐨勬椂鍊欒鍋氬摢浜涘伐浣溿傞鍏堬紝瑕佺畻鍑轟笅涓潡鐨勫懆鍥翠節鍧楃殑鐜╁鏈夊摢浜涙槸鐜板湪褰撳墠鍧楁病鏈夌殑錛屾妸鑷繁鐨勪俊鎭箍鎾粰閭d簺鐜╁錛屽悓鏃朵篃瑕佺畻鍑轟笅涓潡鍛ㄥ洿涔濆潡閲岄潰鏈夊摢浜涚墿浠舵槸鐜板湪娌℃湁鐨勶紝鎶婇偅浜涚墿浠剁殑淇℃伅騫挎挱緇欒嚜宸憋紝鐒跺悗鎶婁笅涓潡鐨勫懆鍥翠節蹇噷娌℃湁鐨勶紝鑰岀幇鍦ㄧ殑鍧楀懆鍥翠節鍧楅噷闈㈡湁鐨勭墿浠剁殑娑堝け淇℃伅騫挎挱緇欒嚜宸憋紝鍚屾椂涔熸妸鑷繁娑堝け鐨勬秷鎭箍鎾粰閭d簺鐗╀歡銆傝繖涓搷浣滀笉浠呯儲鐞愯屼笖浼氬悆鎺変笉灝慍PU璧勬簮錛岄偅涔堟湁浠涔堝姙娉曞彲浠ュ緢蹇殑綆楀嚭榪欎簺鐗╀歡鍛紵涓涓釜鍋氭瘮杈冿紵鏄劇劧鐪嬭搗鏉ュ氨涓嶆槸涓ソ鍔炴硶錛岃繖閲屽彲浠ュ弬鐓т簩緇寸煩闃電鎾炴嫻嬬殑涓浜涙濊礬錛屼互鑷繁鍛ㄥ洿涔濆潡涓轟竴涓煩闃碉紝鐩爣鍧楀懆鍥翠節鍧椾負鍙︿竴涓煩闃碉紝媯嫻嬭繖涓や釜鐭╅樀鏄惁紕版挒錛屽鏋滀袱涓煩闃電浉浜わ紝閭d箞娌$浉浜ょ殑閭d簺鍧楁庝箞綆椼傝繖閲屽彲浠ユ妸鐩鎬氦鐨勫潡鐨勫潗鏍囪漿鎹㈡垚鍐呴儴鍧愭爣錛岀劧鍚庡啀榪涜榪愮畻銆?br><br>銆銆瀵逛簬騫挎挱榪樻湁鍙﹀涓縐?a onclick="javascript:tagshow(event, '%BD%E2%BE%F6');" href="javascript:;" target=_self><u><strong><font color=#0066cc>瑙e喅</font></strong></u></a>鏂規硶錛屽疄鏂借搗鏉ヤ笉濡傚垏鍧楁潵鐨勭畝鍗曪紝榪欑鏂規硶闇瑕佸鎴風鏉ュ崗鍔╄繘琛岃繍綆椼傞鍏堝湪鏈嶅姟鍣ㄧ鐨勮繛鎺ョ粨鏋勯噷闈㈤渶瑕佸鍔犱竴涓箍鎾璞$殑闃熷垪錛岃闃熷垪鍦ㄥ鎴風鐧婚檰鏈嶅姟鍣ㄧ殑鏃跺欑敱鏈嶅姟鍣ㄤ紶緇欏鎴風錛岀劧鍚庡鎴風鑷繁鏉ョ淮鎶よ繖涓槦鍒楋紝褰撴湁浜鴻蛋鍑哄鎴風瑙嗛噹鐨勬椂鍊欙紝鐢卞鎴風涓誨姩瑕佹眰鏈嶅姟鍣ㄧ粰閭d釜鐗╀歡鍙戦佹秷澶辯殑娑堟伅銆傝屽浜庢湁浜烘昏繘瑙嗛噹鐨勬儏鍐碉紝鍒欐瘮杈冮夯鐑︿簡銆?br><br>銆銆棣栧厛闇瑕佸鎴風鍦ㄦ瘡嬈$粰鏈嶅姟鍣ㄥ彂閫乽pdate position鐨勬秷鎭殑鏃跺欙紝鏈嶅姟鍣ㄩ兘緇欒榪炴帴綆楀嚭涓涓閲庤寖鍥達紝鐒跺悗鍦ㄩ渶瑕佸箍鎾殑鏃跺欙紝寰幆鏁村紶鍦板浘涓婄殑鐜╁錛屾壘鍒板潗鏍囧湪鍏惰閲庤寖鍥村唴鐨勭帺瀹躲備嬌鐢ㄨ繖縐嶆柟娉曠殑濂藉鍦ㄤ簬涓嶅瓨鍦ㄨ漿鎹㈠潡鐨勬椂鍊欓渶瑕佷竴嬈℃у箍鎾ぇ閲忕殑娑堟伅錛岀己鐐瑰氨鏄湪璁$畻騫挎挱瀵硅薄鐨勬椂鍊欓渶瑕侀亶鍘嗘暣涓湴鍥句笂鐨勭帺瀹訛紝濡傛灉褰撲竴涓湴鍥句笂鐨勭帺瀹跺寰楁瘮杈冪璋辯殑鏃跺欙紝璇ユ搷浣滃氨浼氭瘮杈冪殑鎱€?br><br><br><strong>鏈嶅姟鍣ㄧ殑鍚屾</strong><br><br>銆銆鍚屾鍦ㄧ綉緇滄父鎴忎腑鏄潪甯擱噸瑕佺殑錛屽畠淇濊瘉浜嗘瘡涓帺瀹跺湪灞忓箷涓婄湅鍒扮殑涓滆タ澶т綋鏄竴鏍風殑銆傚叾瀹炲憿錛岃В鍐沖悓姝ラ棶棰樼殑鏈綆鍗曠殑鏂規硶灝辨槸鎶婃瘡涓帺瀹剁殑鍔ㄤ綔閮藉悜鍏朵粬鐜╁騫挎挱涓閬嶏紝榪欓噷鍏跺疄灝卞瓨鍦ㄤ袱涓棶棰橈細1錛屽悜鍝簺鐜╁騫挎挱錛屽箍鎾摢浜涙秷鎭?錛屽鏋滅綉緇滃歡榪熸庝箞鍔炪備簨瀹炰笂鍛紝絎竴涓棶棰樻槸涓潪甯哥畝鍗曠殑闂錛屼笉榪囦箣鎵浠ユ垜鎻愬嚭榪欎釜闂鏉ワ紝鏄彁閱掑ぇ瀹跺湪璁捐鑷繁鐨勬秷鎭粨鏋勭殑鏃跺欙紝闇瑕佹妸榪欎釜鍥犵礌鑰冭檻榪涘幓銆傝屽浜庣浜屼釜闂錛屽垯鏄竴涓尯楹葷儲鐨勯棶棰橈紝澶у鍙互鏉ョ湅榪欎箞涓緥瀛愶細<br><br>銆銆姣斿鏈変竴涓帺瀹禔鍚戞湇鍔″櫒鍙戜簡鏉?a onclick="javascript:tagshow(event, '%D6%B8%C1%EE');" href="javascript:;" target=_self><u><strong><font color=#0066cc>鎸囦護</font></strong></u></a>錛岃鎴戠幇鍦ㄥ湪P1鐐癸紝瑕佸幓P2鐐廣傛寚浠ゅ彂鍑虹殑鏃墮棿鏄疶0錛屾湇鍔″櫒鏀跺埌鎸囦護鐨勬椂闂存槸T1錛岀劧鍚庡悜鍛ㄥ洿鐨勭帺瀹跺箍鎾繖鏉℃秷鎭紝娑堟伅鐨勫唴瀹規槸“鐜╁A浠嶱1鍒癙2”鏈変竴涓湪A闄勮繎鐨勭帺瀹禕錛屾敹鍒版湇鍔″櫒鐨勮繖鍒欏箍鎾殑娑堟伅鐨勬椂闂存槸T2錛岀劧鍚庡紑濮嬪湪瀹㈡埛绔笂鐢誨浘錛孉浠嶱1鍒癙2鐐廣傝繖涓椂鍊欏氨瀛樺湪涓涓笉鍚屾鐨勯棶棰橈紝鐜╁A鍜岀帺瀹禕鐨勫睆騫曚笂鏄劇ず鐨勭敾闈㈢浉宸簡T2-T1鐨勬椂闂淬傝繖涓椂鍊欐庝箞鍔炲憿錛?br><br><br><br>銆銆鏈変釜瑙e喅鏂規錛屾垜緇欏畠鍙栧悕鍙?棰勬祴鎷夋壇錛岃櫧鐒舵湁浜涙紓浜嗙偣錛屼笉榪囧熀鏈笂澶у涔熻兘浠庡瓧闈笂鏉ョ悊瑙e畠鐨勬剰鎬濄傝瑙e喅榪欎釜闂錛岄鍏堣瀹氫箟涓涓煎彨錛氶嫻嬭宸傜劧鍚庨渶瑕佸湪鏈嶅姟鍣ㄧ姣忎釜鐜╁榪炴帴鐨勭被閲岄潰鍔犱竴欏瑰睘鎬э紝鍙玪atency錛岀劧鍚庡湪鐜╁鐧婚檰鐨勬椂鍊欙紝瀵瑰鎴風鐨勬椂闂村拰鏈嶅姟鍣ㄧ殑鏃墮棿榪涜姣旇緝錛屽緱鍑烘潵鐨勫樊鍊間繚瀛樺湪latency閲岄潰銆傝繕鏄笂闈㈢殑閭d釜渚嬪瓙錛屾湇鍔″櫒騫挎挱娑堟伅鐨勬椂鍊欙紝灝辨牴鎹騫挎挱瀵硅薄鐨刲atency錛岃綆楀嚭涓涓鎴風鐨凜urrentTime錛岀劧鍚庡湪娑堟伅澶撮噷闈㈠寘鍚繖涓狢urrentTime錛岀劧鍚庡啀榪涜騫挎挱銆傚茍涓斿悓鏃跺湪鐜╁A鐨勫鎴風鏈湴寤虹珛涓涓槦鍒楋紝淇濆瓨璇ユ潯娑堟伅錛屽彧鍒拌幏寰楁湇鍔″櫒楠岃瘉灝變粠鏈楠岃瘉鐨勬秷鎭槦鍒楅噷闈㈠皢璇ユ秷鎭垹闄わ紝濡傛灉楠岃瘉澶辮觸錛屽垯浼氳鎷夋壇鍥濸1鐐廣傜劧鍚庡綋鐜╁B鏀跺埌浜嗘湇鍔″櫒鍙戣繃鏉ョ殑娑堟伅“鐜╁A浠嶱1鍒癙2”榪欎釜鏃跺欏氨媯鏌ユ秷鎭噷闈㈡湇鍔″櫒鍙戝嚭鐨勬椂闂村拰鏈湴鏃墮棿鍋氭瘮杈冿紝濡傛灉澶т簬瀹氫箟鐨勯嫻嬭宸紝灝辯畻鍑哄湪T2榪欎釜鏃墮棿錛岀帺瀹禔鐨勫睆騫曚笂璧板埌鐨勫湴鐐筆3錛岀劧鍚庢妸鐜╁B灞忓箷涓婄殑鐜╁A鐩存帴鎷夋壇鍒癙3錛屽啀緇х畫璧頒笅鍘伙紝榪欐牱灝辮兘淇濊瘉鍚屾銆傛洿榪涗竴姝ワ紝涓轟簡淇濊瘉瀹㈡埛绔繍琛岃搗鏉ユ洿鍔爏mooth錛屾垜騫朵笉鎺ㄨ崘鐩存帴鎶婄帺瀹舵媺鎵繃鍘伙紝鑰屾槸綆楀嚭P3鍋忓悗鐨勪竴鐐筆4錛岀劧鍚庣敤(P4-P1)/T(P4-P3)鏉ョ畻鍑轟竴涓緢蹇殑閫熷害S錛岀劧鍚庤鐜╁A鐢ㄩ熷害S蹇熺Щ鍔ㄥ埌P4錛岃繖鏍風殑澶勭悊鏂規硶鏄瘮杈冨悎鐞嗙殑錛岃繖縐嶈В鍐蟲柟妗堢殑鍘熷艦鍦ㄥ浗闄呬笂琚О涓猴紙Full plesiochronous錛夛紝褰撶劧錛岃鍘熷艦琚垜綃℃敼浜嗗緢澶氭潵閫傚簲緗戠粶娓告垙鐨勫悓姝ワ紝鎵浠ヨ屽彉鎴愭墍璋撶殑錛氶嫻嬫媺鎵?br><br>銆銆鍙﹀涓涓В鍐蟲柟妗堬紝鎴戠粰瀹冨彇鍚嶅彨 楠岃瘉鍚屾錛屽惉鍚嶅瓧涔熺煡閬擄紝澶т綋鐨勬剰鎬濆氨鏄瘡鏉℃寚浠ゅ湪緇忚繃鏈嶅姟鍣ㄩ獙璇侀氳繃浜嗕互鍚庡啀鎵ц鍔ㄤ綔銆傚叿浣撶殑鎬濊礬濡備笅錛氶鍏堜篃闇瑕佸湪姣忎釜鐜╁榪炴帴綾誨瀷閲岄潰瀹氫箟涓涓猯atency錛岀劧鍚庡湪瀹㈡埛绔搷搴旂帺瀹墮紶鏍囪璧扮殑鍚屾椂錛屽鎴風騫朵笉浼氬厛琛岃蛋鍔紝鑰屾槸鍙戜竴鏉¤蛋璺殑鎸囦護緇欐湇鍔″櫒錛岀劧鍚庣瓑寰呮湇鍔″櫒鐨勯獙璇併傛湇鍔″櫒鎺ュ彈鍒拌繖鏉℃秷鎭互鍚庯紝榪涜閫昏緫灞傜殑楠岃瘉錛岀劧鍚庤綆楀嚭闇瑕佸箍鎾殑鑼冨洿錛屽寘鎷帺瀹禔鍦ㄥ唴錛屾牴鎹悇涓鎴風涓嶅悓鐨刲atency鐢熸垚涓嶅悓鐨勬秷鎭ご錛屽紑濮嬪箍鎾紝榪欎釜鏃跺欒繖涓帺瀹剁殑璧拌礬淇℃伅灝辨槸瀹屽叏鍚屾鐨勪簡銆傝繖涓柟娉曠殑浼樼偣鏄兘淇濊瘉鍚勪釜瀹㈡埛绔箣闂寸粷瀵圭殑鍚屾錛岀己鐐規槸褰撶綉緇滃歡榪熸瘮杈冨ぇ鐨勬椂鍊欙紝鐜╁鐨勫鎴風鐨勮涓轟細鍙樺緱姣旇緝涓嶆祦鐣咃紝緇欑帺瀹跺甫鏉ュ緢涓嶇埥鐨勬劅瑙夈傝縐嶈В鍐蟲柟妗堢殑鍘熷艦鍦ㄥ浗闄呬笂琚О涓猴紙Hierarchical master-slave synchronization錛夛紝80騫翠唬浠ュ悗琚箍娉涘簲鐢ㄤ簬緗戠粶鐨勫悇涓鍩熴?br><br>銆銆鏈鍚庝竴縐嶈В鍐蟲柟妗堟槸涓縐嶇悊鎯沖寲鐨勮В鍐蟲柟妗堬紝鍦ㄥ浗闄呬笂琚О涓篗utual synchronization錛屾槸涓縐嶅鏈潵緗戠粶鐨勫墠鏅殑鑹ソ棰勬祴鍑烘潵鐨勮В鍐蟲柟妗堛傝繖閲屼箣鎵浠ヨ鎻愯繖涓柟妗堬紝騫朵笉鏄鎴戜滑宸茬粡瀹屽叏鐨勫疄鐜頒簡榪欑鏂規錛岃屽彧鏄湪緗戠粶娓告垙棰嗗煙鐨勬煇浜涙柟闈㈠簲鐢ㄥ埌榪欑鏂規鐨勬煇浜涙濇兂銆傛垜瀵硅縐嶆柟妗堝彇鍚嶄負錛氬崐鏈嶅姟鍣ㄥ悓姝ャ傚ぇ浣撶殑璁捐鎬濊礬濡備笅錛?br><br>銆銆棣栧厛瀹㈡埛绔渶瑕佸湪鐧婚檰涓栫晫鐨勬椂鍊欏緩绔嬪緢澶氬紶騫挎挱鍒楄〃錛岃繖浜涘垪琛ㄥ湪瀹㈡埛绔悗鍙板拰鏈嶅姟鍣ㄨ榪涜涓嶅強鏃跺悓姝ワ紝涔嬫墍浠ヨ寤虹珛澶氬紶鍒楄〃錛屾槸鍥犱負瑕佸箍鎾殑綾誨瀷鏄笉姝竴縐嶇殑錛屾瘮濡傝鏈塴ocal message,鏈塺emote message,榪樻湁global message 絳夌瓑錛岃繖浜涘垪琛ㄩ兘闇瑕佸湪瀹㈡埛绔櫥闄嗙殑鏃跺欐牴鎹湇鍔″櫒鍙戣繃鏉ョ殑娑堟伅寤虹珛濂姐傚湪寤虹珛鍒楄〃鐨勫悓鏃訛紝榪橀渶瑕佽幏寰楁瘡涓垪琛ㄤ腑騫挎挱瀵硅薄鐨刲atency錛屽茍涓旇緇存姢涓寮犲畬鏁寸殑鐢ㄦ埛鐘舵佸垪琛ㄥ湪鍚庡彴錛屼篃鏄笉鍙婃椂鐨勫拰鏈嶅姟鍣ㄨ繘琛屽悓姝ワ紝鏍規嵁鏈湴鐨勭敤鎴風姸鎬佽〃錛屽彲浠ュ仛鍒頒竴閮ㄥ垎鍐崇瓥鐢卞鎴風鑷繁鏉ュ喅瀹氾紝褰撳鎴風鍙戦佽繖閮ㄥ垎鍐崇瓥鐨勬椂鍊欙紝鍒欑洿鎺ュ皢鏈緇堝喅絳栧彂閫佸埌鍚勪釜騫挎挱鍒楄〃閲岄潰鐨勫鎴風錛屽茍瀵瑰叾鏃墮棿榪涜鏍″錛屼繚璇佹瘡涓鎴風鍦ㄦ敹鍒扮殑娑堟伅鐨勬椂闂存槸鍜屾牴鎹湰鍦版椂闂磋繘琛屾牎瀵硅繃鐨勩傞偅涔堝啀閲囩敤棰勬祴鎷夋壇涓彁鍒拌繃鐨勮綆楁彁鍓嶉噺錛屾彁楂橀熷害琛岃蛋榪囧幓鐨勬柟娉曪紝灝嗕細浣垮悓姝ュ彉寰楅潪甯哥殑smooth銆傝鏂規鐨勪紭鐐規槸涓嶉氳繃鏈嶅姟鍣紝瀹㈡埛绔嚜宸變箣闂磋繘琛屽悓姝ワ紝澶уぇ鐨勯檷浣庝簡鐢變簬緗戠粶寤惰繜鑰屽甫鏉ョ殑璇樊錛屽茍涓旂敱浜庡ぇ閮ㄥ垎鍐崇瓥閮藉彲浠ョ敱瀹㈡埛绔潵鍋氾紝涔熷ぇ澶х殑闄嶄綆浜嗘湇鍔″櫒鐨勮祫婧愩傜敱姝ゅ甫鏉ョ殑寮婄灝辨槸鐢變簬娑堟伅鍜屽喅絳栨潈閮芥斁鍦ㄥ鎴風鏈湴錛屾墍浠ョ粰澶栨寕鎻愪緵浜嗗緢澶х殑鍙箻涔嬫満銆?/font></font></p> <p><font face=Tahoma size=2>銆涓嬮潰鎴戞兂鏉ヨ皥璋堝叧浜庢湇鍔″櫒涓奛PC鐨勮璁′互鍙奛PC鏅鴻兘絳変竴浜涙柟闈㈡秹鍙婂埌鐨勯棶棰樸傞鍏堬紝鎴戜滑闇瑕佺煡閬撲粈涔堟槸NPC錛孨PC闇瑕佸仛浠涔堛侼PC鐨勫叏縐版槸錛圢on-Player Character錛夛紝寰堟樉鐒訛紝浠栨槸涓涓猚haracter錛屼絾涓嶆槸鐜╁錛岄偅涔堜粠榪欑偣涓婂彲浠ョ煡閬擄紝NPC鐨勬煇浜涜涓烘槸鍜岀帺瀹剁被浼肩殑錛屼粬鍙互琛岃蛋錛屽彲浠ユ垬鏂楋紝鍙互鍛煎惛錛堣繖鐐瑰皢鍦ㄥ悗闈㈢殑NPC鏅鴻兘閲岄潰鎻愬埌錛夛紝鍙﹀涓鐐瑰拰鐜╁鐗╀歡涓嶅悓鐨勬槸錛孨PC鍙互澶嶇敓錛堝嵆NPC琚墦姝諱互鍚庡湪涓瀹氭椂闂村唴鍙互閲嶆柊鍑烘潵錛夈傚叾瀹炶繕鏈夋渶閲嶈鐨勪竴鐐癸紝灝辨槸鐜╁鐗╀歡鐨勬墍鏈夊喅絳栭兘鏄帺瀹跺仛鍑烘潵鐨勶紝鑰孨PC鐨勫喅絳栧垯鏄敱璁$畻鏈哄仛鍑烘潵鐨勶紝鎵浠ュ湪瀵筃PC鍋氫綍縐嶅喅絳栫殑鏃跺欙紝闇瑕佹墍璋撶殑NPC鏅鴻兘鏉ヨ繘琛屽喅絳栥?br><br>銆銆涓嬮潰鎴戝皢鍒嗕袱涓儴鍒嗘潵璋堣皥NPC錛岄鍏堟槸NPC鏅鴻兘錛屽叾嬈℃槸鏈嶅姟鍣ㄥ浣曞NPC榪涜緇勭粐銆備箣鎵浠ヨ鍏堣皥NPC鏅鴻兘鏄洜涓哄彧鏈夊綋鎴戜滑浜嗚В娓呮鎴戜滑闇瑕丯PC鍋氫粈涔堜箣鍚庯紝鎵嶅ソ寮濮嬭璁℃湇鍔″櫒鏉ュNPC榪涜緇勭粐銆?br><br><br><strong>NPC鏅鴻兘</strong><br><br>銆銆NPC鏅鴻兘鍒嗕負涓ょ錛屼竴縐嶆槸琚姩瑙﹀彂鐨勪簨浠訛紝涓縐嶆槸涓誨姩瑙﹀彂鐨勪簨浠躲傚浜庤鍔ㄨЕ鍙戠殑浜嬩歡錛屽鐞嗚搗鏉ョ浉瀵規潵璇寸畝鍗曚竴浜涳紝鍙互鐢變簨浠舵湰韜潵鍛煎彨NPC韜笂鐨勫嚱鏁幫紝姣斿璇碞PC鐨勬浜★紝瀹為檯涓婃槸鍦∟PC鐨凥P灝忎簬涓瀹氬肩殑鏃跺欙紝鏉ヤ富鍔ㄥ懠鍙玁PC韜笂鐨凮nDie() 鍑芥暟錛岃繖縐嶇敱浜嬩歡鏉ヨЕ鍙慛PC琛屼負鐨凬PC鏅鴻兘錛屾垜縐頒負琚姩瑙﹀彂銆傝繖縐嶇被鍨嬬殑瑙﹀彂寰寰鍒嗕負涓ょ錛?br><br>涓縐嶆槸鐢卞埆鐨勭墿浠跺鑷寸殑NPC鐨勫睘鎬у彉鍖栵紝鐒跺悗灞炴у彉鍖栫殑鍚屾椂浼氬鑷碞PC浜х敓涓浜涜涓恒傜敱姝や竴鏉ワ紝NPC鐗╀歡閲岄潰鑷沖皯鍖呭惈浠ヤ笅鍑犵鍑芥暟錛?br><br></font><font face=Fixedsys size=2>class NPC {<br><br>public:<br><br>    // 鏄皝鍦ㄤ粈涔堝湴鏂瑰鑷翠簡鎴戝摢欏瑰睘鎬ф敼鍙樹簡澶氬皯銆?br><br>    OnChangeAttribute(object_t *who, int which, int how, int where);<br><br>Private:<br><br>    OnDie();<br><br>    OnEscape();<br><br>    OnFollow();<br><br>    OnSleep();<br><br>    // 涓緋誨垪鐨勪簨浠躲?br><br>}<br></font><font face=Tahoma><br><font size=2>銆銆榪欐槸涓涓熀鏈殑NPC鐨勭粨鏋勶紝榪欑琚姩鐨勮Е鍙慛PC鐨勪簨浠訛紝鎴戠О瀹冧負NPC鐨勫弽灝勩備絾鏄紝榪欐牱鐨勭粨鏋勫彧鑳借NPC琚姩鐨勬帴鏀朵竴浜涗俊鎭潵鍋氬嚭鍐崇瓥錛岃繖鏍風殑NPC鏄剼锠㈢殑銆傞偅涔堬紝鎬庝箞鏍瘋涓涓狽PC鑳藉涓誨姩鐨勫仛鍑轟竴浜涘喅絳栧憿錛熻繖閲屾湁涓縐嶆柟娉曪細鍛煎惛銆傞偅涔堟庝箞鏍瘋NPC鏈夊懠鍚稿憿錛?br><br>銆銆涓縐嶅緢綆鍗曠殑鏂規硶錛岀敤涓涓鏃跺櫒錛屽畾鏃剁殑瑙﹀彂鎵鏈塏PC鐨勫懠鍚革紝榪欐牱灝卞彲浠ヨ涓涓狽PC鏈夊懠鍚歌搗鏉ャ傝繖鏍風殑璇濅細鏈変竴涓棶棰橈紝褰揘PC澶鐨勬椂鍊欙紝涓婁竴嬈PC鐨勫懠鍚歌繕娌℃湁鍛煎惛瀹岋紝涓嬩竴嬈″懠鍚稿張鏉ヤ簡錛岄偅涔堟庝箞瑙e喅榪欎釜闂鍛€傝繖閲屾湁涓縐嶆柟娉曪紝璁㎞PC寮傛鐨勮繘琛屽懠鍚革紝鍗蟲瘡涓狽PC鐨勫懠鍚稿懆鏈熸槸鏍規嵁NPC鍑虹敓鐨勬椂闂存潵瀹氱殑錛岃繖涓椂鍊欒鏃跺櫒闇瑕佸仛鐨勫氨鏄殧涓孌墊椂闂存鏌ヤ竴涓嬶紝鍝簺NPC鍒版椂闂磋鍛煎惛浜嗭紝灝辨潵瑙﹀彂榪欎簺NPC鐨勫懠鍚搞?br><br>銆銆涓婇潰鎻愬埌鐨勬槸緋葷粺濡備綍鏉ヨЕ鍙慛PC鐨勫懠鍚革紝閭d箞NPC鏈韓鐨勫懠鍚擱鐜囪濡備綍璁懼畾鍛紵榪欎釜灝卞ソ璞$幇瀹炰腑鐨勪漢涓鏍鳳紝鐫¤鐨勬椂鍊欏拰榪涜嬋鐑堣繍鍔ㄧ殑鏃跺欙紝鍛煎惛棰戠巼鏄笉涓鏍風殑銆傚悓鏍鳳紝NPC鍦ㄦ垬鏂楃殑鏃跺欙紝鍜屽鉤甯哥殑鏃跺欙紝鍛煎惛棰戠巼涔熶笉涓鏍楓傞偅涔堝氨闇瑕佷竴涓狟reath_Ticker鏉ヨ緗甆PC褰撳墠鐨勫懠鍚擱鐜囥?br><br>銆銆閭d箞鍦∟PC鐨勫懠鍚鎬簨浠墮噷闈紝鎴戜滑鎬庝箞鏍鋒潵璁劇疆NPC鐨勬櫤鑳藉憿錛熷ぇ浣撳彲浠ユ鎷負媯鏌ョ幆澧冨拰鍋氬嚭鍐崇瓥涓や釜閮ㄥ垎銆傞鍏堬紝闇瑕佸褰撳墠鐜榪涜鏁板瓧涓婄殑緇熻錛屾瘮濡傝鏄惁鍦ㄦ垬鏂椾腑錛屾垬鏂楁湁鍑犱釜鏁屼漢錛岃嚜宸辯殑HP榪樺墿澶氬皯錛屼互鍙婇檮榪戞湁娌℃湁鏁屼漢絳夌瓑涔嬬被鐨勭粺璁°傜粺璁″嚭鏉ョ殑鏁版嵁浼犲叆鏈韓鐨勫喅絳栨ā鍧楋紝鍐崇瓥妯″潡鍒欐牴鎹甆PC鑷韓鐨勬ф牸鍙栧悜鏉ュ仛鍑轟竴浜涘喅絳栵紝姣斿璇撮噹铔瀷鐨凬PC浼氬湪HP姣旇緝灝戠殑鏃跺欎粛鐒剁寷鎵戠寷鎵擄紝鍙堟瘮濡傝鏅烘収鍨嬬殑NPC鍒欎細鍦℉P姣旇緝灝戠殑鏃跺欓夋嫨閫冭窇銆傜瓑絳変箣綾葷殑銆?br><br>銆銆鑷蟲錛屼竴涓彲浠ュ懠鍚革紝鍙嶅皠鐨凬PC鐨勭粨鏋勫凡緇忓熀鏈瀯鎴愪簡錛岄偅涔堟帴涓嬫潵鎴戜滑灝辨潵璋堣皥緋葷粺濡備綍緇勭粐璁╀竴涓狽PC鍑虹幇鍦ㄤ笘鐣岄噷闈€?br><br><br><strong>NPC鐨勭粍緇?/strong><br><br>銆銆榪欓噷鏈変袱縐嶆柟妗堝彲渚涢夋嫨錛屽叾涓錛歂PC鐨勪綅緗俊鎭繚瀛樺湪鍦烘櫙閲岄潰錛岃澆鍏ュ満鏅殑鏃跺欒澆鍏PC銆傚叾浜岋紝NPC鐨勪綅緗俊鎭繚瀛樺湪NPC韜笂錛屾湁涓撻棬鐨勪簨浠惰鎵鏈夌殑NPC鐧婚檰鍦烘櫙銆傝繖涓ょ鏂規硶鏈変粈涔堝尯鍒憿錛熷張鍚勬湁浠涔堝ソ鍧忓憿錛?br><br>銆銆鍓嶄竴縐嶆柟娉曞ソ澶勫湪浜庡満鏅澆鍏ョ殑鏃跺欏悓鏃惰澆鍏ヤ簡NPC錛屽満鏅氨鍙互瀵筃PC榪涜綆$悊錛屼笉闇瑕佸浣欑殑澶勭悊錛岃屽紛绔垯鍦ㄤ簬鍦ㄥ埛鏂扮殑鏃跺欐槸鍚屾鍒鋒柊鐨勶紝涔熷氨鏄涓涓満鏅噷闈㈢殑NPC鍙兘浼氬湪鍚屼竴鏃墮棿鍐呴暱鍑烘潵銆傝屽浜庣浜岀鏂規硶鍛紝璁捐璧鋒潵浼氱◢寰夯鐑︿竴浜涳紝闇瑕佷竴涓粺涓鐨勬満鍒惰NPC鐧婚檰鍒板満鏅紝榪橀渶瑕佷竴浜涙瘮杈冮夯鐑︾殑璁捐錛屼絾鏄繖縐嶆柟妗堝彲浠ュ疄鐜癗PC寮傛鐨勫埛鏂幫紝鏄洰鍓嶇綉緇滄父鎴忔櫘閬嶉噰鐢ㄧ殑鏂規硶錛屼笅闈㈡垜浠氨鏉ョ潃閲嶈皥璋堣繖縐嶆柟娉曠殑瀹炵幇錛?br><br>銆銆棣栧厛鎴戜滑瑕佸紩鍏ヤ竴涓?#8220;鐏甸瓊”鐨勬蹇碉紝鍗充竴涓狽PC鍦ㄦ鍚庯紝娑堝け鐨勫彧鏄粬鐨勮倝浣擄紝浠栫殑鐏甸瓊浠嶇劧鍦ㄤ笘鐣屼腑瀛樺湪鐫錛屾病鏈夊懠鍚革紝鍦ㄦ浜$殑闄勮繎婕傛誕錛岀瓑鐫鍒版椂闂存姇鑳庯紝鎶曡儙鐨勬椂鍊欐妸涔嬪墠鐨勬墍鏈夊睘鎬ф竻闆訛紝閲嶆柊鍦ㄥ満鏅笂鏋勫緩鍏惰倝浣撱傞偅涔堬紝鎴戜滑鎬庝箞鏉ヨ璁¤繖鏍蜂竴涓粨鏋勫憿錛熼鍏堟妸涓涓満鏅噷闈㈣鍑虹幇鐨凬PC鍒朵綔鎴愬浘閲忚〃錛岀粰姣忎釜NPC涓涓嫭涓鏃犱簩鐨勬爣璇嗙錛屽湪杞藉叆鍦烘櫙涔嬪悗錛屾牴鎹浘閲忚〃鏉ヨ澆鍏ュ睘浜庤鍦烘櫙鐨凬PC銆傚湪NPC鐨凮nDie() 浜嬩歡閲岄潰涓嶇洿鎺ユ妸璇ョ墿浠禿estroy 鎺夛紝鑰屾槸鍏抽棴NPC鐨勫懠鍚革紝鐒跺悗鎵撳紑涓涓噸鐢熺殑璁℃椂鍣紝鏈鍚庢妸璇ョ墿浠惰緗負invisable銆傝繖鏍風殑璁捐錛屽彲浠ュ疄鐜癗PC鐨勫紓姝ュ埛鏂幫紝鍦ㄨ妭鐪佹湇鍔″櫒璧勬簮鐨勫悓鏃朵篃璁╃帺瀹惰寰楁洿鍔犵殑鐪熷疄銆?br><br>錛堣繖涓绔犺妭宸茬粡鐗墊壇鍒頒竴浜涙湇鍔″櫒鑴氭湰鐩稿叧鐨勪笢瑗匡紝鎵浠ヤ笅涓绔犺妭灝嗚皥璋堟湇鍔″櫒鑴氭湰鐩稿叧鐨勪竴浜涜璁★級<br><br>琛ュ厖鐨勮皥璋堝惎鍙戝紡鎼滅儲錛坔euristic searching錛夊湪NPC鏅鴻兘涓殑搴旂敤銆?br><br>銆銆鍏朵富瑕佹濊礬鏄湪騫垮害浼樺厛鎼滅儲鐨勫悓鏃訛紝灝嗕笅涓灞傜殑鎵鏈夎妭鐐圭粡榪囦竴涓惎鍙戝嚱鏁拌繘琛岃繃婊わ紝涓瀹氳寖鍥村唴緙╁皬鎼滅儲鑼冨洿銆備紬鎵鍛ㄧ煡鐨勫璺疉*綆楁硶灝辨槸鍏稿瀷鐨勫惎鍙戝紡鎼滅儲鐨勫簲鐢紝鍏跺師鐞嗘槸涓寮濮嬭璁′竴涓狫udge(point_t* point)鍑芥暟錛屾潵鑾峰緱point榪欎釜涓鐐圭殑浠d環錛岀劧鍚庢瘡嬈℃悳绱㈢殑鏃跺欐妸涓嬩竴姝ュ彲鑳藉埌杈劇殑鎵鏈夌偣閮界粡榪嘕udge()鍑芥暟璇勪環涓涓嬶紝鑾峰彇涓ゅ埌涓変釜浠d環姣旇緝灝忕殑鐐癸紝緇х畫鎼滅儲錛岄偅浜涙病琚変笂鐨勭偣灝變笉浼氬湪緇х畫鎼滅儲涓嬪幓浜嗭紝榪欐牱甯︽潵鐨勫悗鏋滅殑鏄彲鑳芥眰鍑烘潵鐨勪笉鏄渶浼樿礬寰勶紝榪欎篃鏄負浠涔圓*綆楁硶鍦ㄥ璺殑鏃跺欎細璧板埌闅滅鐗╁墠闈㈠啀緇曡繃鍘伙紝鑰屼笉鏄鍏堝氨璧版枩綰挎潵緇曡繃璇ラ殰紕嶇墿銆傚鏋滆瀵誨嚭鏈浼樺寲鐨勮礬寰勭殑璇濓紝鏄笉鑳界敤A*綆楁硶鐨勶紝鑰屾槸瑕佺敤鍔ㄦ佽鍒掔殑鏂規硶錛屽叾娑堣楁槸榪滃ぇ浜嶢*鐨勩?br><br>銆銆閭d箞錛岄櫎浜嗗湪瀵昏礬涔嬪錛岃繕鏈夊摢浜涘湴鏂瑰彲浠ュ簲鐢ㄥ埌鍚彂寮忔悳绱㈠憿錛熷叾瀹炶寰楀ぇ涓鐐癸紝NPC鐨勪換浣曞喅絳栭兘鍙互鐢ㄥ惎鍙戝紡鎼滅儲鏉ュ仛錛屾瘮濡傝閫冭窇鍚э紝濡傛灉鏄竴涓?D鐨勭綉緇滄父鎴忥紝鏈夊叓涓柟鍚戯紝NPC閫夋嫨鍝釜鏂瑰悜閫冭窇鍛紵灝卞彲浠ヨ緗竴涓狫udge(int direction)鏉ョ粰瀹氭瘡涓偣鐨勪唬浠鳳紝鍦↗udge閲岄潰綆椾笂璇ョ偣鐨勬晫浜虹殑寮哄急錛屾垨鑰呰鏁屼漢鐨勬晱鎹峰浣曠瓑絳夛紝鏈鍚庨夋嫨浠d環鏈灝忕殑鍦版柟閫冭窇銆備笅闈紝鎴戜滑灝辨潵璋堣皥瀵逛簬鍑犵NPC甯歌鐨勬櫤鑳界殑鍚彂寮忔悳绱㈡硶鐨勮璁★細<br><br>Target select 錛堥夋嫨鐩爣錛夛細<br><br>銆銆棣栧厛鑾峰緱鍦板浘涓婄璇PC闄勮繎鐨勬晫浜哄垪琛ㄣ傝璁udge() 鍑芥暟錛屾牴鎹晫浜虹殑寮哄急錛屾晫浜虹殑榪滆繎錛岀畻鍑轟唬浠楓傜劧鍚庨夋嫨浠d環鏈灝忕殑鏁屼漢榪涜涓誨姩鏀誨嚮銆?br><br>Escape錛堥冭窇錛夛細<br><br>銆銆鍦ㄥ懠鍚鎬簨浠墮噷闈㈡鏌ヨ嚜宸辯殑HP錛屽鏋淗P浣庝簬鏌愪釜鍊肩殑鏃跺欙紝鎴栬呭鏋滀綘鏄繙紼嬪叺縐嶏紝鑰屾晫浜鴻繎韜殑璇濓紝鍒欒Е鍙戦冭窇鍑芥暟錛屽湪閫冭窇鍑芥暟閲岄潰涔熸槸瀵瑰懆鍥寸殑鎵鏈夌殑鏁屼漢緇勭粐鎴愬垪琛紝鐒跺悗璁捐Judge() 鍑芥暟錛屽厛閫夋嫨鍑哄浣犳瀯鎴愬▉鑳佹渶澶х殑鏁屼漢錛岃Judge() 鍑芥暟闇瑕佸垽鏂晫浜虹殑閫熷害錛屾垬鏂楀姏寮哄急錛屾渶鍚庡緱鍑轟竴涓富瑕佹晫浜猴紝鐒跺悗閽堝璇ヤ富瑕佹晫浜鴻繘琛岃礬寰勭殑Judge() 鐨勫嚱鏁扮殑璁捐錛屾悳绱㈢殑鑼冨洿鍙彲鑳芥槸鍜屼富瑕佹晫浜虹浉鍙嶇殑鏂瑰悜錛岀劧鍚庡啀鏍規嵁璇ュ嚑涓柟鍚戠殑鏁屼漢鐨勫己寮辨潵璁$畻浠d環錛屽仛鍑烘渶鍚庣殑閫夋嫨銆?br><br>Random walk錛堥殢鏈鴻蛋璺級錛?br><br>銆銆榪欎釜鎴戝茍涓嶆帹鑽愮敤A*綆楁硶錛屽洜涓篘PC涓鏃﹀璧鋒潵錛岄偅涔堣繖涓CPU鐨勬秷鑰楁槸寰堟亹鎬栫殑錛岃屼笖NPC澶у涓嶉渶瑕侀暱璺濈鐨勫璺紝鍙渶瑕佸湪闄勮繎璧拌蛋鍗沖彲錛岄偅涔堬紝灝卞湪闄勮繎闅忔満鐨勭粰鍑犱釜鐐癸紝鐒跺悗璁㎞PC璧拌繃鍘伙紝濡傛灉紕板埌闅滅鐗╁氨鍋滀笅鏉ワ紝榪欐牱鍑犱箮鏃犱換浣曡礋鎷呫?br><br>Follow Target錛堣拷闅忕洰鏍囷級錛?br><br>銆銆榪欓噷鏈変袱縐嶆柟娉曪紝涓縐嶆柟娉昇PC鐪嬩笂鍘繪瘮杈冩剼锠紝涓縐嶆柟娉曠湅涓婂幓NPC姣旇緝鑱槑錛岀涓縐嶆柟娉曞氨鏄NPC璺熺潃鐩爣鐨勮礬鐐硅蛋鍗沖彲錛屽嚑涔庢病鏈夎祫婧愭秷鑰椼傝屽悗涓縐嶅垯鏄NPC鍦ㄨ窡闅忕殑鏃跺欙紝鍦ㄥ懠鍚鎬簨浠墮噷闈㈠垽鏂鏂圭殑褰撳墠浣嶇疆錛岀劧鍚庤蛋鐩寸嚎錛岀涓婇殰紕嶇墿浜嗙敤A*緇曡繃鍘伙紝璇ョ璁捐浼氭秷鑰椾竴瀹氶噺鐨勭郴緇熻祫婧愶紝鎵浠ヤ笉鎺ㄨ崘NPC澶ч噺鐨勮拷闅忕洰鏍囷紝濡傛灉闇瑕佸ぇ閲忕殑NPC榪介殢鐩爣鐨勮瘽錛岃繕鏈変竴涓瘮杈冪畝鍗曠殑鏂規硶錛氳NPC鍜岀洰鏍囧悓姝ョЩ鍔紝鍗寵浠栦滑鐨勯熷害緇熶竴錛岀Щ鍔ㄧ殑鏃跺欒蛋鍚屾牱鐨勮礬鐐癸紝褰撶劧錛岃繖縐嶈璁″彧閫傚悎NPC鎵璺熼殢鐨勭洰鏍囦笉鏄拷鏉鐨勫叧緋伙紝鍙槸璺熼殢鐫鐜╁璧拌屽凡浜嗐?/font></font></p> <p><font size=2>銆鍦ㄨ繖涓绔犺妭錛屾垜鎯寵皥璋堝叧浜庢湇鍔″櫒绔殑鑴氭湰鐨勭浉鍏寵璁°傚洜涓哄湪涓婁竴绔犺妭閲岄潰錛岃皥NPC鏅鴻兘鐩稿叧鐨勬椂鍊欏凡緇忔帴瑙﹀埌涓浜涜剼鏈浉鍏崇殑涓滀笢浜嗐傝繕鏄厛鏉ヨ皥璋堣剼鏈殑浣滅敤鍚с?br>銆銆鍦ㄥ熀浜庣紪璇戠殑鏈嶅姟鍣ㄧ紼嬪簭涓紝鏄棤娉曞湪紼嬪簭鐨勮繍琛岃繃紼嬩腑鏋勫緩涓浜涗笢瑗跨殑錛岄偅涔堣繖涓椂鍊欏氨闇瑕佽剼鏈璦鐨勬敮鎸佷簡錛岀敱浜庤剼鏈璦娑夊強鍒伴昏緫鍒ゆ柇錛屾墍浠ュ厜鎻愪緵涓浜涘嚱鏁版帴鍙f槸娌$敤鐨勶紝榪橀渶瑕佹彁渚涗竴浜涚畝鍗曠殑璇硶鍜屾枃娉曡В鏋愮殑鍔熻兘銆傚叾瀹炶鍒板簳錛屼換浣曠殑浜嬩歡閮藉彲浠ョ湅鎴愪袱涓儴鍒嗭細絎竴鏄鑷韓錛屾垨鑰呭埆鐨勭墿浠剁殑鏁板肩殑鏀瑰彉錛屽彟澶栦竴涓氨鏄皢璇ヤ簨浠朵互鏂囧瓧鎴栬呭浘褰㈢殑鏂瑰紡騫挎挱鍑哄幓銆傞偅涔堬紝榪欓噷鐗墊壇鍒頒竴涓緢閲嶈鐨勮瘽棰橈紝灝辨槸瀵規煇涓鐗╀歡榪涜瀵誨潃銆傛仼錛岃皥鍒拌繖錛屾垜鎯沖皢鏈珷鑺傚垎涓轟笁涓儴鍒嗘潵璋堬紝棣栧厛鏄湇鍔″櫒濡備綍鏉ョ鐞嗗姩鎬佸垱寤哄嚭鏉ョ殑鐗╀歡錛堟湇鍔″櫒鍐呭瓨綆$悊錛夛紝絎簩鏄浣曞鏌愪竴鐗╀歡榪涜瀵誨潃錛岀涓夊垯鏄剼鏈璦鐨勭粍緇囧拰瑙i噴銆傚叾瀹炰箣鎵浠ュ埌絎洓绔犲啀鏉ヨ皥鏈嶅姟鍣ㄧ殑鍐呭瓨綆$悊鏄洜涓哄湪鍓嶅嚑绔犺皥榪欎釜鐨勮瘽錛屽ぇ瀹跺鍏舵病鏈変竴涓劅鎬х殑璁よ瘑錛屽彲鑳戒笉鐭ラ亾鏈嶅姟鍣ㄧ殑鍐呭瓨綆$悊絀剁珶鏈変粈涔堢敤銆?br><br><strong>4.1銆佹湇鍔″櫒鍐呭瓨綆$悊</strong><br>銆銆瀵逛簬鏈嶅姟鍣ㄥ唴瀛樼鐞嗘垜浠皢閲囩敤鍐呭瓨姹犵殑鏂規硶錛屼篃縐頒負闈欐佸唴瀛樼鐞嗐傚叾姒傚康涓哄湪鏈嶅姟鍣ㄥ垵濮嬪寲鐨勬椂鍊欙紝鐢寵涓鍧楅潪甯稿ぇ鐨勫唴瀛橈紝縐頒負鍐呭瓨姹狅紙<span id="hvzpftn" class=English>Memory pool</span>錛夛紝鍚屾椂涔熺敵璇蜂竴灝忓潡鍐呭瓨絀洪棿錛岀О涓哄瀮鍦懼洖鏀剁珯錛?span class=English>Garbage recollecting station</span>錛夈傚叾澶т綋鎬濊礬濡備笅錛氬綋紼嬪簭闇瑕佺敵璇峰唴瀛樼殑鏃跺欙紝棣栧厛媯鏌ュ瀮鍦懼洖鏀剁珯鏄惁涓虹┖錛屽鏋滀笉涓虹┖鐨勮瘽錛屽垯浠庡瀮鍦懼洖鏀剁珯涓壘涓鍧楀彲鐢ㄧ殑鍐呭瓨鍦板潃錛屽湪鍐呭瓨姹犱腑鏍規嵁鍦板潃鎵懼埌鐩稿簲鐨勭┖闂達紝鍒嗛厤緇欑▼搴忕敤錛屽鏋滃瀮鍦懼洖鏀剁珯鏄┖鐨勮瘽錛屽垯鐩存帴浠庡唴瀛樻睜鐨勫綋鍓嶆寚閽堜綅緗敵璇蜂竴鍧楀唴瀛橈紱褰撶▼搴忛噴鏀劇┖闂寸殑鏃跺欙紝緇欓偅鍧楀唴瀛樻墦涓婂凡緇忛噴鏀炬帀鐨勬爣璁幫紝鐒跺悗鎶婇偅鍧楀唴瀛樼殑鍦板潃鏀懼叆鍨冨溇鍥炴敹绔欍?br>銆銆涓嬮潰鍏蜂綋璋堣皥璇ユ柟娉曠殑璇︾粏璁捐錛岄鍏堬紝鎴戜滑灝嗛噰鐢ㄧ被浼間簬鎿嶄綔緋葷粺鐨勬欏靛紡緋葷粺鏉ョ鐞嗗唴瀛橈紝榪欐牱鐨勫ソ澶勬槸鍙互鍏呭垎鐨勫埄鐢ㄥ唴瀛樻睜錛屽叾緙虹偣鏄鐞嗚搗鏉ユ瘮杈冮夯鐑︺傚棷錛屼笅闈㈡潵鍏蜂綋鐪嬬湅鎴戜滑鎬庝箞鏍鋒潵瀹氫箟欏靛拰孌電殑緇撴瀯錛?br><br></font><font face=Fixedsys>銆銆<span id="hvzpftn" class=ColorCode>typedef struct m_segment_s<br>銆銆{<br>銆銆銆銆struct m_segment_s *next;</span>銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>/* 鍙岀嚎閾捐〃 + 闈欐佸唴瀛樺彲浠ヨ揪鍒伴殢鏈鴻闂拰欏哄簭璁塊棶鐨勭洰鐨勶紝<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆鐪熸鐨勬兂鎬庝箞璁塊棶錛屽氨鎬庝箞璁塊棶銆?*/</span></font><br>銆銆銆銆<span id="hvzpftn" class=ColorCode>struct m_segment_s *pre; int flags;</span>銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 璇ユ鐨勪竴浜涙爣璁般?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>int start;</span>銆銆銆銆銆銆銆銆銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鐩稿浜庤欏電殑棣栧湴鍧銆?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>int size;</span>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>// 闀垮害銆?/span></font><br>銆銆銆銆<span id="hvzpftn" class=ColorCode>struct m_page_s *my_owner;</span>銆銆銆銆銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>// 鎴戞槸灞炰簬鍝竴欏電殑銆?/span></font><br>銆銆銆銆<span id="hvzpftn" class=ColorCode>char *data;</span>銆銆銆銆銆銆銆銆銆銆銆銆銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>// 鍐呭鎸囬拡銆?/span></font><br>銆銆<span id="hvzpftn" class=ColorCode>}m_segment_t;<br><br>銆銆typedef struct m_page_s<br>銆銆{<br>銆銆銆銆unsigned int flags;</span>銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>/* 浣跨敤鏍囪錛屾槸鍚﹀畬鍏ㄤ嬌鐢紝鏄惁榪樻湁絀轟綑 */</font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>int size;</span>銆銆銆銆銆銆銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>/* 璇ラ〉鐨勫ぇ灝忥紝涓鑸兘鏄粺涓鐨勶紝鏈鍚庝竴欏甸櫎澶?*/</span></font><br>銆銆銆銆<span id="hvzpftn" class=ColorCode>int end;</span>銆銆銆銆銆銆銆 銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>/* 浣跨敤鍒頒粈涔堝湴鏂逛簡 */</font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>int my_index;</span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>/* 鎻愪緵闅忔満璁塊棶鐨勭儲寮?*/</font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>m_segment_t *segments;</span>銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 欏靛唴孌電殑澶存寚閽堛?/font><br></span>銆<span id="hvzpftn" class=ColorCode>銆}m_page_t;<br></span></font><font face=Arial size=2><br>銆銆閭d箞鍐呭瓨姹犲拰鍨冨溇鍥炴敹绔欐庝箞鏋勫緩鍛紵涓嬮潰涔熺粰鍑轟竴浜涙瀯寤虹浉鍏崇殑浼?a onclick="javascript:tagshow(event, '%B4%FA%C2%EB');" href="javascript:;" target=_self><u><strong><font color=#0066cc>浠g爜</font></strong></u></a>錛?br><br></font><font face=Fixedsys>銆銆<span id="hvzpftn" class=ColorCode>static m_page_t *all_pages;<br></span>銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// total_size鏄誨叡瑕佺敵璇風殑鍐呭瓨鏁幫紝num_pages鏄誨叡鎵撶畻鍒涘緩澶氬皯涓〉闈€?/font><br></span>銆銆<span id="hvzpftn" class=ColorCode>void initialize_memory_pool( int total_size, int num_pages )<br>銆銆{<br>銆銆銆銆int i, page_size, last_size;</span>銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 綆楀嚭姣忎釜欏甸潰鐨勫ぇ灝忋?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>page_size = total_size / num_pages;</span>銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鍒嗛厤瓚沖鐨勯〉闈€?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>all_pages = (m_page_t*) calloc( num_pages, sizeof(m_page_t*) );<br>銆銆銆銆for ( i = 0; i < num_pages; i ++ )<br>銆銆銆銆{<br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鍒濆鍖栨瘡涓〉闈㈢殑孌墊寚閽堛?/font><br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCode>all_pages[i].m_segment_t = (m_segment_t*) malloc( page_size );<br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鍒濆鍖栬欏甸潰鐨勬爣璁般?/font><br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCode>all_pages[i].flags |= NEVER_USED;<br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 闄や簡鏈鍚庝竴涓〉闈紝鍏朵粬鐨勫ぇ灝忛兘鏄痯age_size 澶у皬銆?/font><br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCode>all_pages[i].size = page_size;<br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鍒濆鍖栭殢鏈鴻闂殑绱㈠紩銆?/font><br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCode>all_pages[i].my_index = i;<br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鐢變簬娌℃湁鐢ㄨ繃錛屾墍浠ュぇ灝忛兘鏄?</font><br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCode>all_pages[i].end = 0;<br>銆銆銆銆}<br></span><br>銆銆銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>// 璁劇疆鏈鍚庝竴涓〉闈㈢殑澶у皬銆?/span></font><br>銆銆銆銆<span id="hvzpftn" class=ColorCode>if ( (last_size = total_size % num_pages) != 0 )<br>銆銆銆銆銆銆all_pages[i].size = last_size;<br>銆銆}<br></span></font><font face=Arial size=2><br>銆銆涓嬮潰鐪嬬湅鍨冨溇鍥炴敹绔欐庝箞璁捐錛?br><br></font><font face=Fixedsys>銆銆<span id="hvzpftn" class=ColorCode>int **garbage_station;<br>銆銆void init_garbage_station( int num_pages, int page_size )<br>銆銆{<br>銆銆銆銆int i;<br>銆銆銆銆garbage_station = (int**) calloc( num_pages, sizeof( int* ) );<br>銆銆銆銆for ( i = 0; i < num_pages; i ++)<br>銆銆銆銆{<br></span>銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 榪欓噷鐢╱nsigned short鐨勯珮8浣嶆潵鍌ㄥ瓨棣栫浉瀵瑰湴鍧錛屼綆8浣嶆潵鍌ㄥ瓨闀垮害銆?/font><br></span>銆銆銆銆銆銆</font><span id="hvzpftn" class=ColorCode><font face=Fixedsys>garbage_station[i] = (int*) calloc( page_size, sizeof( unsigned short ));<br>銆銆銆銆銆銆memset( garbage_station[i], 0, sizeof( garbage_station[i] ));<br>銆銆銆銆}<br>銆銆}</font><font face=Arial><br></font></span><font face=Arial size=2><br>銆銆涔熻榪欐牱鐨勮創浠g爜浼氳澶у瑙夊緱寰堜笉鏄庣櫧錛屽棷錛屾垜鐨勪唬鐮佹按騫崇‘瀹炰笉鎬庝箞鏍鳳紝閭d箞涓嬮潰鎴戞潵鐢ㄦ枃瀛楁柟寮忔潵鍙欒涓涓嬪ぇ浣撶殑姒傚康鍚с傚浜庢欏靛紡鍐呭瓨綆$悊錛岄鍏堝垎鎴怤涓〉闈紝榪欎釜鏄浐瀹氱殑錛岃屽浜庢瘡涓〉闈㈠唴鐨勬鍒欐槸鍔ㄦ佺殑錛屾鐨勫ぇ灝忎簨鍏堟槸涓嶇煡閬撶殑錛岄偅涔堟垜浠渶瑕佸洖鏀剁殑涓嶄粎浠呮槸欏甸潰鐨勫唴瀛橈紝榪樺寘鎷鐨勫唴瀛橈紝閭d箞鎴戜滑灝遍渶瑕佷竴涓簩緇存暟緇勬潵淇濆瓨鏄摢涓〉闈㈢殑閭e潡孌電殑鍦板潃琚噴鏀句簡銆傜劧鍚庡浜庣敵璇峰唴瀛樼殑鏃跺欙紝鍒欓鍏堟鏌ラ渶瑕佺敵璇峰唴瀛樼殑澶у皬錛屽鏋滀笉澶熶竴涓〉闈㈠ぇ灝忕殑璇濓紝鍒欏湪鍨冨溇鍥炴敹绔欓噷闈㈠鎵懼彲鐢ㄧ殑孌電┖闂村垎閰嶏紝濡傛灉鎵句笉鍒幫紝鍒欑敵璇蜂竴涓柊鐨勯〉闈㈢┖闂淬?br>銆銆榪欐牱鐢ㄥ唴瀛樻睜鐨勬柟娉曟潵綆$悊鏁翠釜娓告垙涓栫晫鐨勫唴瀛樺彲浠ユ湁鏁堢殑鍑忓皯鍐呭瓨紕庣墖錛屼竴瀹氱▼搴︾殑鎻愰珮娓告垙榪愯鐨勭ǔ瀹氭у拰鏁堢巼銆?br><br><strong>4.2銆佹父鎴忎腑鐗╀歡鐨勫鍧<br></strong>銆銆絎竴涓棶棰橈紝鎴戜滑涓轟粈涔堣瀵誨潃錛熷姞鍏ヤ簡鑴氭湰璇█鐨勬蹇典箣鍚庯紝娓告垙涓殑涓浜涢昏緫鐗╀歡錛屾瘮濡傝NPC錛屾煇涓狪TEM涔嬬被鐨勯兘鏄敱鑴氭湰璇█鍦ㄦ父鎴忚繍琛岀殑榪囩▼涓姩鎬佺敓鎴愮殑錛岄偅涔堟垜浠氳繃浠涔堟牱鐨勬柟娉曟潵瀵硅繖浜涚墿浠惰繘琛岀儲寮曞憿錛熻寰楃畝鍗曚竴鐐癸紝灝辨槸濡備綍鎵懼埌浠栦滑鍛紵鏈変釜寰堢畝鍗曠殑鏂規硶錛屽叏閮ㄩ亶鍘嗕竴嬈°傚綋鐒訛紝榪欐槸涓畝鍗曡屾湁鏁堢殑鏂規硶錛屼絾鏄晥鐜囦笂鐨勬秷鑰楁槸浠諱綍涓鍙版湇鍔″櫒閮藉悆涓嶆秷鐨勶紝鐗瑰埆鏄湪娓告垙鐨勮妯℃瘮杈冨ぇ涔嬪悗銆?br>銆銆閭d箞錛屾垜浠庝箞鏉ュ湪娓告垙涓栫晫涓緢蹇殑瀵繪壘榪欎簺鐗╀歡鍛紵鎴戞兂鍦ㄨ皥榪欎釜涔嬪墠錛岃涓涓婬ash Table榪欎釜鏁版嵁緇撴瀯錛屽畠鍙搱甯岃〃錛屼篃鏈変漢鍙畠鏁e垪琛紝鍏跺伐浣滃師鐞嗘槸涓嶆槸欏哄簭璁塊棶錛屼篃涓嶆槸闅忔満璁塊棶錛岃屾槸閫氳繃涓涓暎鍒楀嚱鏁板鍏秌ey榪涜璁$畻錛岀畻鍑哄湪鍐呭瓨涓繖涓猭ey瀵瑰簲鐨剉alue鐨勫湴鍧錛岃屽鍏惰繘琛岃闂傚ソ澶勬槸涓嶇闈㈠澶氬ぇ鐨勬暟鎹紝鍙渶瑕佷竴嬈¤綆楀氨鑳芥壘鍒板叾鍦板潃錛岄潪甯哥殑蹇嵎錛岄偅涔堝紛绔槸浠涔堝憿錛熷綋涓や釜key閫氳繃鏁e垪鍑芥暟璁$畻鍑烘潵鐨勫湴鍧鏄悓涓涓湴鍧鐨勬椂鍊欙紝楹葷儲灝辨潵浜嗭紝浼氫駭鐢熺鎾烇紝鍏剁殑瑙e喅鏂規硶闈炲父鐨勯夯鐑︼紝榪欓噷灝變笉璇︾粏璋堝叾瑙e喅鏂規硶浜嗭紝鍚﹀垯浼拌鍐嶅啓涓洓錛屼簲绔犱篃鏈繀璋堝緱娓呮錛屼笉榪囧鏋滃ぇ瀹跺鍏舵劅鍏磋叮鐨勮瘽錛屾榪庤璁恒?br>銆銆鍡紝鎴戜滑灝嗙敤鏁e垪琛ㄦ潵瀵規父鎴忎腑鐨勭墿浠惰繘琛岀儲寮曪紝鍏蜂綋鎬庝箞鍋氬憿錛熼鍏堬紝鍦ㄥ唴瀛樻睜涓敵璇蜂竴鍧椾袱鍊嶅ぇ浜庢父鎴忎腑鐗╀歡鎬繪暟鐨勫唴瀛橈紝涓轟粈涔堟槸涓ゅ嶅ぇ鍛紵闃叉鏁e垪琛ㄧ鎾炪傜劧鍚庢垜浠夌敤鐗╀歡鐨勫悕縐頒綔涓烘暎鍒楄〃鐨勭儲寮昸ey錛岀劧鍚庡氨鍙互寮濮嬭璁℃暎鍒楀嚱鏁頒簡銆備笅闈㈡潵鐪嬩釜渚嬪瓙錛?br><br></font></font><font face=Fixedsys size=2>銆銆<span id="hvzpftn" class=ColorCode>static int T[] =<br>銆銆{<br>銆銆銆銆1, 87, 49, 12, 176, 178, 102, 166, 121, 193, 6, 84, 249, 230, 44, 163,<br>銆銆銆銆14, 197, 213, 181, 161, 85, 218, 80, 64, 239, 24, 226, 236, 142, 38, 200,<br>銆銆銆銆110, 177, 104, 103, 141, 253, 255, 50, 77, 101, 81, 18, 45, 96, 31, 222,<br>銆銆銆銆25, 107, 190, 70, 86, 237, 240, 34, 72, 242, 20, 214, 244, 227, 149, 235,<br>銆銆銆銆97, 234, 57, 22, 60, 250, 82, 175, 208, 5, 127, 199, 111, 62, 135, 248,<br>銆銆銆銆174, 169, 211, 58, 66, 154, 106, 195, 245, 171, 17, 187, 182, 179, 0, 243,<br>銆銆銆銆132, 56, 148, 75, 128, 133, 158, 100, 130, 126, 91, 13, 153, 246, 216, 219,<br>銆銆銆銆119, 68, 223, 78, 83, 88, 201, 99, 122, 11, 92, 32, 136, 114, 52, 10,<br>銆銆銆銆138, 30, 48, 183, 156, 35, 61, 26, 143, 74, 251, 94, 129, 162, 63, 152,<br>銆銆銆銆170, 7, 115, 167, 241, 206, 3, 150, 55, 59, 151, 220, 90, 53, 23, 131,<br>銆銆銆銆125, 173, 15, 238, 79, 95, 89, 16, 105, 137, 225, 224, 217, 160, 37, 123,<br>銆銆銆銆118, 73, 2, 157, 46, 116, 9, 145, 134, 228, 207, 212, 202, 215, 69, 229,<br>銆銆銆銆27, 188, 67, 124, 168, 252, 42, 4, 29, 108, 21, 247, 19, 205, 39, 203,<br>銆銆銆銆233, 40, 186, 147, 198, 192, 155, 33, 164, 191, 98, 204, 165, 180, 117, 76,<br>銆銆銆銆140, 36, 210, 172, 41, 54, 159, 8, 185, 232, 113, 196, 231, 47, 146, 120,<br>銆銆銆銆51, 65, 28, 144, 254, 221, 93, 189, 194, 139, 112, 43, 71, 109, 184, 209,<br>銆銆};<br><br></span>銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// s鏄渶瑕佽繘琛岀儲寮曠殑瀛楃涓叉寚閽堬紝maxn鏄瓧絎︿覆鍙兘鐨勬渶澶ч暱搴︼紝榪斿洖鍊兼槸鐩稿鍦板潃銆?/font><br></span>銆銆</font><span id="hvzpftn" class=ColorCode><font face=Fixedsys size=2>inline int whashstr(char *s, int maxn)<br>銆銆{<br>銆銆銆銆register unsigned char oh, h;<br>銆銆銆銆register unsigned char *p;<br>銆銆銆銆register int i;<br><br>銆銆銆銆if (!*s)<br>銆銆銆銆銆銆return 0;<br>銆銆銆銆p = (unsigned char *) s;<br>銆銆銆銆oh = T[*p]; h = (*(p++) + 1) & 0xff;<br>銆銆銆銆for (i = maxn - 1; *p && --i >= 0; )<br>銆銆銆銆{<br>銆銆銆銆銆銆oh = T[oh ^ *p]; h = T[h ^ *(p++)];<br>銆銆銆銆}<br>銆銆銆銆return (oh << 8) + h;<br>銆銆}</font><font face=Arial size=2><br></font></span><font face=Arial><font face=Arial size=2><br>銆銆鍏蜂綋鐨勭畻娉曞氨涓嶈浜嗭紝涓婇潰鐨勯偅涓澶ф涓滆タ涓嶈闂垜涓轟粈涔堬紝榪欎釜綆楁硶鐨勫嚭澶勬槸CACM 33-6涓殑涓涓彨Peter K.Pearson鐨勯瀛愬啓鐨勮鏂囦腑浠嬬粛鐨勭畻娉曪紝鎹閫熷害闈炲父鐨勫揩銆傛湁浜嗚繖涓暎鍒楀嚱鏁幫紝鎴戜滑灝卞彲浠ラ氳繃瀹冩潵瀵逛笘鐣岄噷闈㈢殑浠繪剰鐗╀歡榪涜闈炲父蹇殑瀵誨潃浜嗐?br><br><strong>4.3銆佽剼鏈璦瑙i噴</strong><br>銆銆鍦ㄨ璁¤剼鏈璦涔嬪墠錛屾垜浠鍏堥渶瑕佹槑鐧斤紝鎴戜滑鐨勮剼鏈璦瑕佸疄鐜頒粈涔堟牱鐨勫姛鑳斤紵鍚﹀垯闅忓績鎵嬈茬殑鍋氫笅鍘誨啓鍑轟釜C鐨勮В閲婂櫒涔嬬被鐨勪篃璇翠笉瀹氥傛垜浠瀹炵幇鐨勫姛鑳藉彧鏄畝鍗曠殑閫昏緫鍒ゆ柇鍜屽驚鐜紝鍏朵粬鎵鏈夌殑鍔熻兘閮藉彲浠ョ敱浜嬪厛鎻愪緵濂界殑鍑芥暟鏉ュ畬鎴愩傚棷錛岃繖鏍鋒垜浠氨鍙互鍒楀嚭涓寮犲伐浣滈噺鐨勮〃鍗曪細璁捐鐗╀歡鍦ㄥ簳灞傜殑淇濆瓨緇撴瀯錛屾彁渚涜剼鏈拰搴曞眰闂寸殑璁塊棶鎺ュ彛錛岃璁℃敮鎸侀昏緫鍒ゆ柇鍜屽驚鐜殑瑙i噴鍣ㄣ?br>銆銆涓嬮潰鍏堟潵璋堣皥鐗╀歡鍦ㄥ簳灞傜殑淇濆瓨緇撴瀯銆傚叿浣撳埌姣忕涓嶅悓灞炴х殑鐗╀歡錛岄渶瑕侀噰鐢ㄤ笉鍚岀殑緇撴瀯錛屽綋鐒訛紝濡傛灉浣犳効鎰忕殑璇濓紝浣犲彲浠ユ墍鏈夌殑鐗╀歡閮介噰鍚屽悓鏍風殑緇撴瀯錛岀劧鍚庡湪緇撴瀯閲岄潰璁捐涓涓暎鍒楄〃鏉ヤ繚瀛樺悇縐嶄笉鍚岀殑灞炴с備絾榪欏茍涓嶆槸涓涓ソ鏂規硶錛岃繃鍒嗙殑渚濊禆鏁e垪琛ㄤ細璁╀綘鐨勬父鎴忕殑閫昏緫鍙樺緱綣佹潅涓嶆竻銆傛墍浠ワ紝灝介噺鐨勫尯鍒嗘瘡縐嶄笉鍚岀殑鐗╀歡閲囩敤涓嶅悓鐨勭粨鏋勬潵璁捐銆備絾鏄湁涓鐐瑰煎緱娉ㄦ剰鐨勬槸錛屼笉綆℃槸浠涔堢粨鏋勶紝鏈変竴浜涗笢瑗挎槸緇熶竴鐨勶紝灝辨槸鎴戜滑鎵璇寸殑鐗╀歡澶達紝閭d箞鎴戜滑鎬庝箞鏉ヨ璁¤繖鏍蜂竴涓墿浠跺ご鍛紵<br><br></font></font><font face=Fixedsys size=2>銆銆</font><span id="hvzpftn" class=ColorCode><font face=Fixedsys size=2>typedef struct object_head_s<br>銆銆{<br>銆銆銆銆char* name;<br>銆銆銆銆char* prog;<br>銆銆}object_head_t;</font><font face=Arial size=2><br></font></span><font face=Arial><font face=Arial size=2><br>銆銆鍏朵腑name鏄湪鏁e垪琛ㄤ腑榪欎釜鐗╀歡鐨勭儲寮曞彿錛宲rog鍒欐槸鑴氭湰瑙i噴鍣ㄩ渶瑕佽В閲婄殑紼嬪簭鍐呭銆備笅闈㈡垜浠氨浠PC涓轟緥鏉ヨ璁′竴涓粨鏋勶細<br><br></font></font><font face=Fixedsys size=2>銆銆<span id="hvzpftn" class=ColorCode>typedef struct npc_s<br>銆銆{<br>銆銆銆銆object_head_t header;</span>銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 鐗╀歡澶?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>int hp;</span>銆銆銆銆銆銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// NPC鐨刪p鍊箋?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>int level;</span>銆銆銆銆銆銆銆 銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// NPC鐨勭瓑綰с?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>struct position_s position;</span>銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 褰撳墠鐨勪綅緗俊鎭?/font><br></span>銆銆銆銆<span id="hvzpftn" class=ColorCode>unsigned int personality;</span>銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>// NPC鐨勪釜鎬э紝涓涓猽nsigned int鍙互淇濆瓨24縐嶄釜鎬с?/span></font><br>銆銆<span id="hvzpftn" class=ColorCode>}npc_t;</span></font><font face=Arial><font face=Arial size=2><br><br>銆銆OK錛岀粨鏋勮璁″畬鎴愶紝閭d箞鎴戜滑鎬庝箞鏉ヨ璁¤剼鏈В閲婂櫒鍛紵榪欓噷鏈変袱縐嶆硶錛屼竴縐嶆槸鐢ㄨ櫄鎷熸満鐨勬ā寮忔潵瑙f瀽鑴氭湰璇█錛屽彟澶栦竴涓垯鏄敤綾諱技姹囩紪璇█鐨勯偅縐嶇粨鏋勬潵璁捐錛岃緗竴浜涙潯浠惰煩杞拰寰幆灝卞彲浠ュ疄鐜伴昏緫鍒ゆ柇鍜屽驚鐜簡錛屾瘮濡傦細<br><br></font></font><font face=Fixedsys size=2>銆銆<span id="hvzpftn" class=ColorCode>set name, "璺漢鐢?;<br>銆銆CHOOSE: random_choose_personality;</span>銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 闅忔満閫夋嫨NPC鐨勪釜鎬?/font><br></span>銆銆<span id="hvzpftn" class=ColorCode>compare hp, 100;</span>銆銆銆銆銆銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// 姣旇緝姘旇錛屾瘮杈冨嚭鐨勫煎彲浠ユ斁鍦ㄤ竴涓浐瀹氱殑鍙橀噺閲岄潰</font><br></span>銆銆<span id="hvzpftn" class=ColorCode>ifless LESS;</span>銆銆銆銆銆銆銆銆銆銆銆銆銆<span id="hvzpftn" class=ColorCatchword><font color=#808080>// hp < 100鐨勮瘽錛屽垯榪斿洖銆?/font><br></span>銆銆<span id="hvzpftn" class=ColorCode>jump CHOOSE;</span>銆銆銆銆銆銆銆銆銆銆銆銆銆<font color=#808080><span id="hvzpftn" class=ColorCatchword>// 鍚﹀垯緇х畫閫夋嫨錛屽彧鍒伴夊埌涓涓猦p < 100鐨勩?/span></font><br>銆</font><span id="hvzpftn" class=ColorCode><font face=Fixedsys size=2>銆LESS: return success;</font><font face=Arial size=2><br></font></span><font face=Arial><font face=Arial size=2><br>銆銆榪欑鑴氭湰緇撴瀯灝辯被浼糃PU鐨勬寚浠ょ殑緇撴瀯錛屼竴鏉′竴鏉℃寚浠ゆ寜鐓ч『搴忔墽琛岋紝瀵逛簬鑴氭湰紼嬪簭鍛橈紙<span id="hvzpftn" class=English>Script. Programmer</span>錛変篃鍙互鍩瑰吇浠栦滑姹囩紪鑳藉姏鐨勮銆?br>銆銆閭d箞鎬庝箞鏉ユā浠胯繖縐嶇粨鏋勫憿錛熸垜浠嬁CPU鐨勬寚浠ゅ仛鍙傜収錛岄鍏堝緱璁劇疆涓浜涘瘎瀛樺櫒錛孋PU鐨勫瘎瀛樺櫒鐨勫ぇ灝忓拰鏁伴噺鏄彈紜歡褰卞搷鐨勶紝浣嗘垜浠槸鐢ㄥ唴瀛樻潵妯℃嫙瀵勫瓨鍣紝鎵浠ユ兂瑕佸澶э紝灝卞彲浠ユ湁澶氬ぇ銆傜劧鍚庢彁渚涗竴浜涙寚浠わ紝鍖呮嫭鍥涘垯榪愮畻錛屽鍧錛屽垽鏂紝寰幆絳夌瓑銆傛帴涓嬫潵閽堝涓嶅悓鐨勮剼鏈敤涓嶅悓鐨勮В鏋愭柟娉曪紝姣斿璇村NPC灝辯敤NPC鍥哄畾鐨勮剼鏈紝瀵笽TEM灝辯敤ITEM鍥哄畾鐨勮剼鏈紝瑙f瀽瀹屼互鍚庡氨鎶婄粨鏋滅敓鎴愬簳灞傝鐗╀歡鐨勭粨鏋勭敤浜庝嬌鐢ㄣ?br>銆銆鑰屽鏋滆鐢ㄨ櫄鎷熸満鏉ュ疄鐜拌剼鏈璦鐨勮瘽鍛紝鍒欎細灝嗗伐紼嬪彉寰楁棤姣斾箣宸ㄥぇ錛屽己鐑堜笉鎺ㄨ崘浣跨敤錛屼笉榪囧鏋滀綘鎯沖仛涓涓氱敤鐨勭綉緇滄父鎴忓簳灞傜殑璇濓紝鍒欏彲浠ヨ冭檻璁捐涓涓櫄鎷熸満銆傝櫄鎷熸満澶т綋鐨勮В閲婅繃紼嬪氨鏄繘琛屼袱嬈$紪璇戯紝絎竴嬈″鍏抽敭瀛楄繘琛岀紪璇戯紝絎簩嬈$敓鎴愭眹緙栬璦錛岀劧鍚庤櫄鎷熸満鍦ㄦ牴鎹紪璇戠敓鎴愮殑姹囩紪璇█榪涜閫愯瑙i噴錛屽鏋滃ぇ瀹跺榪欎釜鎰熷叴瓚g殑璇濓紝鍙互鍘?a class=cLink target=_blank><u><font color=#0066cc>www.mudos.org</font></u></a>涓?a onclick="javascript:tagshow(event, '%CF%C2%D4%D8');" href="javascript:;" target=_self><u><strong><font color=#0066cc>涓嬭澆</font></strong></u></a>涓浠組udOS鐨勫師鐮佹潵鐮旂┒鐮旂┒銆?/font></font></p> </div> </div> <img src ="http://www.shnenglu.com/jack-wang/aggbug/70968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">灝忕帇</a> 2009-01-02 03:54 <a href="http://www.shnenglu.com/jack-wang/archive/2009/01/02/70968.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>楂樻晥緗戞父鏈嶅姟鍣ㄥ疄鐜版帰璁?/title><link>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70966.html</link><dc:creator>灝忕帇</dc:creator><author>灝忕帇</author><pubDate>Thu, 01 Jan 2009 19:49:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70966.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/70966.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70966.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/70966.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/70966.html</trackback:ping><description><![CDATA[<p>闅忕潃澶氭牳澶勭悊鍣ㄧ殑鏅強,濡備綍鍏呭垎鍒╃敤澶氭牳騫惰宸ヤ綔灝辨垚涓洪珮鎬ц兘紼嬪簭璁捐鐨勪竴涓噸鐐廣傛湰緋誨垪鏂囩珷灝嗗洿緇曢珮鎬ц兘緗戞父鏈嶅姟鍣ㄧ殑瀹炵幇,鎺㈣榪欐柟闈㈢殑鎶鏈?br><br>緗戞父鏈嶅姟鍣ㄧ殑鐗圭偣鏄?<br><br>鍏鋒湁澶ч噺瀹㈡埛绔繛鎺?鏁扮櫨鑷蟲暟鍗冧釜),姣忎釜瀹㈡埛绔兘浠ヤ竴瀹氱殑閫熺巼涓嶆柇鍙戦佸拰鎺ユ敹鏁版嵁;<br>鏈嶅姟鍣ㄧ鐨勬暟鎹祦閲忛氬父鍦ㄥ嚑涓嚦鍑犲崄涓狹bps涔嬮棿;<br>鏁版嵁闇瑕佸疄鏃跺鐞?<br>鏁版嵁鍖呭叿鏈夋椂搴忓叧緋?寰寰闇瑕佹寜鐓т弗鏍肩殑鍏堝悗欏哄簭浜堜互澶勭悊銆?br><br>緗戞父鏈嶅姟鍣ㄥ疄闄呬笂浠h〃浜嗕竴綾誨吀鍨嬬殑鏂板叴嫻佹暟鎹鐞嗘湇鍔″櫒銆傝繖閲屽彧鏄負浜嗚璁烘柟渚胯岄檺瀹氫簬緗戞父鏈嶅姟鍣?浣嗘槸鎵璁ㄨ鐨勫師鐞嗗拰鎶鏈簲璇ユ槸鏅傜殑銆?br><br>鍚屾澶氱嚎紼嬫妧鏈偗瀹氭槸鏃犳硶婊¤凍瑕佹眰鐨勩傜敱浜庢瘡涓鎴風閮藉湪鎸佺畫鍜屾湇鍔″櫒浜ゆ崲鏁版嵁,緋葷粺灝嗘棤娉曟湁鏁堢鐞嗗お澶氱殑綰跨▼;鍗充嬌浣跨敤綰跨▼姹犳妧鏈?鎵鑳芥湇鍔$殑瀹㈡埛榪炴帴涔熸槸寰堟湁闄愮殑銆傝嚦浜庢暟鎹鐞嗙殑瀹炴椂鎬у拰鏁版嵁鐨勬椂搴忛兘鏃犳硶欏懼強銆?br><br>寮傛鎶鏈湁濂藉嚑縐嶆柟寮?榪欓噷鍙璁篒OCP鍜岃疆璇㈡ā寮忋侷OCP鏄井杞帹鍔ㄧ殑鎶鏈傚闈炲父澶ч噺鐨勮繛鎺?鏁板崈鑷蟲暟涓?寰堟湁鏁堛備絾鏄敱浜庝嬌鐢ㄤ簡澶氱嚎紼?榪欎簺綰跨▼闇瑕佹妸鎵闇璇誨啓鐨勬暟鎹氳繃鍏變韓鐨凢IFO涓庝富綰跨▼瑙h?鍚﹀垯鏃犳硶淇濇寔鏃跺簭)銆傝繖灝遍犳垚棰戠箒鐨勭嚎紼嬪垏鎹?鏃犳硶婊¤凍澶ф暟鎹噺鐨勫疄鏃跺鐞嗚姹傘傚彟澶?鐢變簬緗戝崱鍙湁涓鍧?灝變竴涓綉緇滃湴鍧鑰岃█),澶氱嚎紼嬪茍涓嶈兘澧炲姞璇誨啓鐨勯熺巼銆傚湪鍙﹀涓浜涙椂搴忚姹備笉閭d箞涓ユ牸鐨勫満鍚?榪欎簺綰跨▼鍙互鍚勮嚜鐙珛瀹屾垚鎵鏈夌殑澶勭悊浠誨姟,鍙渶瑕佸湪綰跨▼鍐呴儴淇濇寔鏁版嵁鐨勬椂搴忋傝繖灝辨槸鍚戝悓姝ュ綰跨▼鎶鏈鍖栦簡銆?br><br>杞鏄父鐢ㄧ殑妯″紡銆傜▼搴忓憳鎶婇渶瑕佸鐞嗙殑Socket榪炴帴娉ㄥ唽鍒頒竴涓暟鎹粨鏋勪腑,鐒跺悗鎻愪氦緇欑郴緇熸鏌ュ畠浠殑璇誨啓鐘舵併傜郴緇熻繑鍥炲彲渚涙搷浣滅殑Socket榪炴帴鍒楄〃渚涚▼搴忓憳閫愪釜澶勭悊銆傚鏋滄湁鏁版嵁鍙灝辮鍏ュ茍澶勭悊,濡傛灉鍙啓鍒欐妸鐩稿簲鐨勬暟鎹啓鍑哄幓銆備負浜嗘彁楂樻晥鐜囧拰紼嬪簭緇撴瀯鐨勬竻鏅拌搗瑙?Socket鏈嶅姟鍣ㄩ氬父鍗曠嫭浣跨敤涓涓嚎紼?騫朵笖閫氳繃FIFO鏁版嵁緇撴瀯鍜屼富綰跨▼瑙h︺?br><br>鍦ㄥ崟鏍稿鐞嗗櫒涓?涓婇潰榪欑杞鐨勬ā寮忔槸娌℃湁闂鐨勩備絾鏄湪澶氭牳騫沖彴涓?鐢ㄤ簬瑙h︾殑FIFO灝嗕細鍙樻垚騫跺彂鐡墮銆傝繖鏄洜涓轟紶緇熺殑瀹炵幇鎶鏈繀欏誨FIFO鍔犻攣銆傝櫧鐒剁綉緇滅嚎紼嬪拰涓葷嚎紼嬪垎鍒窇鍦ㄤ笉鍚岀殑鏍鎬笂,鐞嗚涓婂彲浠ョ墿鐞嗗悓鏃跺湴榪愯(濡傛灉鍒嗗埆鎿嶄綔涓嶅悓鐨勬暟鎹」),浣嗘槸鍚屾閿佸嵈寮鴻榪嬌鍏朵腑鐨勪竴涓嚎紼嬪繀欏葷瓑寰呭彟澶栦竴涓嚎紼嬮鍑轟復鐣屾,鍗充嬌鍙﹀涓涓牳絀洪棽鐫銆?br><br>榪欐椂鍊欏氨闇瑕佷竴縐嶆敮鎸佸茍鍙戠殑鏁版嵁緇撴瀯,涓嬮潰縐頒箣涓篊oncurrentFIFO銆?br><br>public interface ConcurrentFIFO {<br>    public Object remove();<br>    public void put(Object o);<br>}<br><br>put鏂規硶鎶婁竴涓暟鎹璞℃帹榪汧IFO,鑰宺emove鏂規硶浠嶧IFO鍒犻櫎騫惰繑鍥炰竴涓暟鎹璞°傞氳繃綺懼績璁捐,ConcurrentFIFO鐨勫疄鐜版槸綰跨▼瀹夊叏鐨?涓や釜綰跨▼鍙互瀹夊叏鑰屽悓鏃跺湴璁塊棶FIFO銆傝繖鏍峰湪澶氭牳騫沖彴涓婂氨鑳借揪鍒版瀬楂樼殑鎬ц兘銆?br><br>閫氱敤鐨凜oncurrentFIFO鏄潪甯擱毦浜庡疄鐜扮殑銆傚熀鏈殑鎶鏈槸浣跨敤鍘熷瓙鐨凜AS鎿嶄綔鏉ュ疄鐜般侰AS鍗矯ompareAndSet銆傜幇浠e鐞嗗櫒鍩烘湰涓婇兘鑳芥敮鎸佽繖涓綾繪寚浠ゃ備絾鏄繖縐嶆暟鎹粨鏋勭殑瀹炵幇鐨勪竴涓緢澶х殑闅滅灝辨槸鍨冨溇鍥炴敹銆傚湪澶氱嚎紼嬪茍鍙戣繍琛岀殑鎯呭喌涓?琚師瀛愭浛鎹笅鏉ョ殑鏁版嵁鏃犳硶寰楃煡鍏舵槸鍚︽槸鍏跺畠綰跨▼鎵闇瑕佺殑,涔熷氨鏃犳硶鍐沖畾鏄惁鍥炴敹榪欏潡鍐呭瓨銆傞櫎闈炴湁鍨冨溇鍥炴敹鍣?鍚﹀垯ConcurrentFIFO鏄緢闅懼疄鐜扮殑銆?榧撳惞鎵嬪伐綆$悊鍐呭瓨鏁堢巼鏈楂樼殑鏈嬪弸浠鐬ぇ鐪肩潧鐪嬫竻妤?<br><br>鍏跺疄,鍗充嬌鏄浜庢湁鍨冨溇鍥炴敹鍜屽唴寤虹嚎紼嬫敮鎸佺殑Java璇█,瑕佹兂鏋勯犱竴涓敮鎸佸茍鍙戠殑鏁版嵁緇撴瀯,涔熸槸鏋佺鍥伴毦鐨勩俲ava.util.concurrent鍖呮槸緇忚繃騫跺彂棰嗗煙鐨勪笓瀹?Doug Lea,鍚屾椂涔熸槸鏃╂湡lig++鐨勪富瑕佷綔鑰?浠ュ強DLmalloc鐨勪綔鑰呫傛垜鍚庨潰璁ㄨ鍐呭瓨綆$悊鐨勬椂鍊欒繕瑕佹彁鍒頒粬)綺懼績緙栧啓,騫朵笖鐢眏ava紺懼尯鐨勮澶氫笓瀹朵粩緇嗚瘎瀹℃祴璇曚箣鍚庢墠鍙戝竷鐨勩?/p> <p>鐜板湪鏉ヨ璁轟笂嬈℃彁鍒扮殑騫跺彂FIFO,鍏跺疄鐜伴渶瑕佷竴浜涚壒孌婄殑鎶宸с傛垜涓婃璇磋瀹炵幇鍗曠嚎紼嬭鍗曠嚎紼嬪啓鐨凢IFO,浣嗘槸榪欓噷鎴戜滑鍏堟潵璁ㄨ涓鑸殑騫跺彂FIFO銆?br><br>鎴戜滑鐭ラ亾,浼犵粺鐨勭敓浜ц呪斺旀秷璐硅呴棶棰?閫氬父鏄嬌鐢ㄤ竴涓叡浜殑緙撳啿鍖烘潵浜ゆ崲鏁版嵁鐨?鐢熶駭鑰呭拰娑堣垂鑰呭悇鑷湁瀵瑰簲鐨勬寚閽?鍦ㄧ敓浜ф垨鑰呮秷璐圭殑鏃跺欑浉搴斿湴縐誨姩銆傚鏋滆揪鍒頒簡緙撳啿鍖虹殑杈圭晫鍒欏洖緇曘傚鏋滅敓浜ц呮寚閽堣拷涓婃秷璐硅呮寚閽?鍒欒〃鏄庣紦鍐插尯婊′簡;濡傛灉娑堣垂鑰呮寚閽堣拷涓婄敓浜ц呮寚閽?鍒欒〃鏄庣紦鍐插尯絀轟簡銆傞棶棰樺湪浜?涓轟簡闃叉鍦ㄧ紦鍐插尯婊$殑鏃跺欐彃鍏ユ暟鎹?鎴栬呭湪緙撳啿鍖虹┖鐨勬椂鍊欏垹闄ゆ暟鎹?鐢熶駭鑰呮垨鑰呮秷璐硅呯殑姣忎竴嬈℃彃鍏ユ垨鑰呭垹闄ゆ暟鎹搷浣?閮藉繀欏誨悓鏃惰闂繖涓や釜鎸囬拡,榪欏氨甯︽潵浜嗕笉蹇呰鐨勫悓姝ャ?br><br>鍦ㄥ崟鏍稿鐞嗗櫒涓?鍏變韓緙撳啿鍖烘柟寮忛潪甯擱珮鏁?騫朵笖鍏鋒湁鍥哄畾鐨勭┖闂村紑閿(鏈夋椂鍊欎綘闇瑕佷繚瀹堝湴浼拌涓涓瘮杈冨ぇ鐨勬暟鍊?銆備絾鏄湪澶氭牳澶勭悊鍣ㄤ笂(鎴栬匰MP緋葷粺涓?,濡傛灉瑕佸疄鐜板茍鍙戠殑FIFO,灝卞繀欏繪憭寮冭繖縐嶆柟寮忋備嬌鐢ㄥ崟閾捐〃鑰屼笉鏄叡浜紦鍐插尯灝卞彲浠ラ伩寮榪欎釜闂,榪欐槸絎竴涓妧宸с?br><br>絎簩涓妧宸у叧緋誨埌閾捐〃鐨勪嬌鐢ㄦ柟鍚戙備竴鑸嬌鐢ㄩ摼琛?鍏舵彃鍏ユ垨鑰呭垹闄よ妭鐐圭殑浣嶇疆鏄換鎰忕殑銆備絾鏄妸閾捐〃浣滀負FIFO浣跨敤,鍒欏彧鑳戒篃鍙渶瑕佸湪涓ょ鎿嶄綔銆傞渶瑕佹敞鎰忕殑鏄繖鏃跺欏繀欏諱粠灝鵑儴TAIL鎻掑叆鏂扮殑鑺傜偣,鑰屼粠澶撮儴HEAD鍒犻櫎鑺傜偣銆傚惁鍒欎粠灝鵑儴鍒犻櫎鑺傜偣涔嬪悗,鏃犱粠寰楃煡鏂扮殑灝鵑儴鍦ㄥ摢閲?闄ら潪浠庡ご閮ㄩ亶鍘嗐傝繖鏍峰仛鐨勫ソ澶勬槸,鎻掑叆鎴栬呭垹闄ら兘鍙秹鍙婂埌涓涓妭鐐廣傛彃鍏ョ殑鏃跺?鍙璁╂柊鍒涘緩鐨勮妭鐐瑰寘鍚墍闇瑕佹彃鍏ョ殑鏁版嵁,騫朵笖鍏跺悗緇?涓嬩竴涓妭鐐?涓篘ULL;鍐嶈褰撳墠灝鵑儴鐨勮妭鐐圭殑鍚庣戶浠嶯ULL鍙樻垚榪欎釜鏂拌妭鐐?榪欎釜鏂拌妭鐐逛篃灝卞彉鎴愪簡鏂扮殑灝鵑儴鑺傜偣(榪欓噷鐨勬搷浣滈『搴忓緢鍏抽敭)銆傚垹闄ょ殑鏃跺?鍒欐鏌ュ綋鍓嶅ご閮ㄨ妭鐐圭殑鍚庣戶NEXT鏄惁NULL銆傝嫢鏄?琛ㄦ槑FIFO鏄┖鐨?鍚﹀垯,鍙朜EXT鎵鍖呭惈鐨勬暟鎹潵浣跨敤(鏄殑,鏄疦EXT鑰屼笉鏄綋鍓嶅ご閮ㄨ妭鐐規墍鍖呭惈鐨勬暟鎹?鍙傜湅涓嬩竴涓妧宸у拰涓嶅彉寮?,騫舵妸璇ユ暟鎹粠NEXT涓垹闄?鑰孨EXT涔熸垚涓烘柊鐨勫ご閮ㄨ妭鐐廣?娌℃湁閰嶅浘,鍚勪綅璇瘋嚜宸辨兂璞′竴涓?<br><br>鏈鍚庝竴涓妧宸?涓轟簡闅旂瀵瑰ご閮ㄥ拰灝鵑儴鐨勮闂?鎴戜滑闇瑕佷竴涓┖鑺傜偣N(涓嶅寘鍚暟鎹殑鏈夋晥鑺傜偣),鍏朵笅涓涓妭鐐逛負NULL;騫朵笖寮曞叆HEAD鍜孴AIL銆傚湪寮濮嬬殑鏃跺?HEAD鍜孴AIL閮界瓑浜嶯銆傛彃鍏ュ拰鍒犻櫎鏁版嵁鐨勮繃紼嬩笂闈㈠凡緇忚榪囦簡,榪欓噷璁蹭竴涓嬩笉鍙樺紡銆?br><br>絎竴涓笉鍙樺紡:澶撮儴鑺傜偣鎬繪槸絀虹殑(涓嶅寘鍚暟鎹?銆傚湪FIFO鍒濆鍖栫殑鏃跺欒繖鏄垚绔嬬殑銆備箣鍚庣殑鎻掑叆鎿嶄綔涓嶆敼鍙樺ご閮ㄨ妭鐐?鍥犳瀵逛笉鍙樺紡娌℃湁褰卞搷銆傝屽浜庡垹闄ゆ搷浣?鍒欐瘡涓涓柊澶撮儴鑺傜偣鐨勬暟鎹兘宸茬粡鍦ㄥ畠鎴愪負鏂扮殑澶撮儴鑺傜偣鐨勬椂鍊欒鍒犻櫎(鍙栫敤)浜嗐?br><br>絎簩涓笉鍙樺紡:鎻掑叆鍜屽垹闄ゆ搷浣滄病鏈夋暟鎹啿紿?涔熷氨鏄,鎻掑叆綰跨▼鍜屽垹闄ょ嚎紼嬩笉浼氬悓鏃惰鍐欏悓涓欏規暟鎹?涓嶆槸鑺傜偣)銆傛垜浠彧闇瑕佽冭檻FIFO涓虹┖,鍗崇浉褰撲簬鍒氬垰瀹屾垚鍒濆鍖栦箣鍚庣殑鎯呭喌銆傚浜庣┖鑺傜偣N,鎻掑叆鎿嶄綔鏀瑰彉鍏跺悗緇?鍒犻櫎鎿嶄綔鍒欐鏌ュ叾鍚庣戶銆傚彧瑕佹彃鍏ョ嚎紼嬩繚璇佸厛璁╂柊鑺傜偣鍖呭惈鏁版嵁鍐嶆妸鏂拌妭鐐規彃鍏ラ摼琛?涔熷氨鏄笉鑳藉厛鎻掑叆絀鴻妭鐐?鍐嶅線鑺傜偣涓~鍏ユ暟鎹?,閭d箞鍒犻櫎綰跨▼灝變笉浼氭嬁鍒扮┖鐨勮妭鐐廣傛垜浠湅鍒?鍞竴鍙兘鍙戠敓浜夌敤鐨勫湴鏂瑰氨鏄疦鐨勫悗緇ф寚閽?鎻掑叆綰跨▼鍙鍦ㄦ洿鏂癗鐨勫悗緇ф寚閽堜箣鍓嶅噯澶囧ソ鍏跺畠鐩稿叧鏁版嵁鍜岃緗嵆鍙?br><br>榪欐剰鍛崇潃,濡傛灉鑳藉鍋氬埌:1)涓涓嚎紼嬪鏁版嵁鐨勬洿鏂拌兘澶熻鍙﹀涓涓嚎紼嬪嵆鍒葷湅鍒?2)瀵規暟鎹殑璇繪垨鑰呭啓(鏇存柊鍜岃鍙朜鐨勫悗緇ф寚閽?閮芥槸鍘熷瓙鐨?3)鎸囦護娌℃湁琚貢搴忔墽琛屻傞偅涔堝湪鍗曠嚎紼嬭鍗曠嚎紼嬪啓鐨勬儏鍐典笅,鐢氳嚦涓嶉渶瑕佷嬌鐢ㄩ攣灝卞彲浠ュ畨鍏ㄥ湴瀹屾垚騫跺彂FIFO;濡傛灉鏈夊涓敓浜ц呯嚎紼?鍒欏鍔犱竴涓敓浜ц呴攣;濡傛灉鏈夊涓秷璐硅呯嚎紼?鍒欏彲浠ュ鍔犱竴涓秷璐硅呴攣銆備篃灝辨槸璇?鍙互鏈夊洓縐嶇粍鍚堛?br><br>浣嗘槸瀹為檯鎯呭喌榪滈潪濡傛銆傚浜?)鏄鏄撴弧瓚崇殑,鍥犱負鐜頒唬閫氱敤澶勭悊鍣ㄤ笂32浣嶆暟鎹殑璇繪垨鑰呭啓閫氬父閮芥槸鍘熷瓙鐨勩傚浜?),鍒欏彇鍐充簬緋葷粺鐨勫唴瀛樻ā鍨?鍦ㄥ己鍐呭瓨妯″瀷濡侰/C++涓槸婊¤凍鐨?鍦ㄥ急鍐呭瓨妯″瀷濡侸ava涓垯涓嶇劧銆備絾鏄富瑕佺殑闂榪樺湪浜?)銆傜敱浜庢寚浠ょ殑涔卞簭鎵ц,絎簩涓笉鍙樺紡鎵闇瑕佺殑淇濊瘉寰堝彲鑳借鐮村潖,鍗充嬌浠g爜紜疄鏄偅鏍峰啓鐨勩傚洜姝ら攣鏄繀涓嶅彲灝戠殑,鍥犱負鍔犻攣鐨勫悓鏃惰繕浼氭彃鍏ュ唴瀛樺睆闅溿?br><br>榪欐牱鐪嬫潵,涓婃璇寸殑SRSW騫跺彂FIFO灝辨病鏈夌壒鍒殑鎰忎箟浜嗐傚共鑴嗗氨鐢ㄤ袱涓攣鍒嗗埆瀵瑰簲鐢熶駭鑰呭拰娑堣垂鑰?鑰屽茍涓嶉檺鍒剁敓浜ц呮垨鑰呮秷璐硅呯殑鏁伴噺:T_LOCK鍜孒_LOCK銆傚湪鎻掑叆鏂板緩鑺傜偣鍒伴摼琛ㄥ熬閮ㄧ殑鏃跺欎嬌鐢═_LOCK,鑰屽湪瀵瑰ご閮ㄦ搷浣滅殑鏃跺欎嬌鐢℉_LOCK銆?br><br><br>鍏蜂綋鐨勪唬鐮佽繖閲屽厛涓嶇粰浜嗐傝繖閲岀殑綆楁硶涓嶆槸鎴戝彂鏄庣殑,鑰屾槸鏉ヨ嚜Maged M. Michael 鍜?nbsp;Michael L. Scott鐨凷imple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms銆傝鍙傝冨叾鍙岄攣綆楁硶鐨勪吉鐮併?br></p> <p>鐜板湪鏉ヨ璁烘父鎴忔秷鎭殑浼犻併傚湪涓涓綉娓哥殑榪愯惀鎴愭湰涓?甯﹀璐圭敤搴旇鏄緢澶х殑涓鍧椼傚洜姝ゅ浣曢珮鏁堢紪鐮佷互鍙婃敹鍙戞秷鎭氨鎴愪負鑺傜渷榪愯惀鎴愭湰鐨勫叧閿傝繖閲岄潰鑳藉仛寰堝鏂囩珷銆?br><br>棣栧厛鏄竴涓熀鏈殑鍒ゆ柇:闅忕潃澶勭悊鍣ㄧ殑璁$畻鑳藉姏涓嶆柇鎻愰珮,浠ュ強澶氭牳鐨勬棩鐩婃櫘鍙?鍦ㄦ秷鎭殑緙栫爜浠ュ強鏀跺彂鐜妭,CPU璧勬簮灝嗕笉浼氭垚涓虹摱棰堛傜浉瀵圭殑,搴旇鍗冩柟鐧捐鑰冭檻濡備綍鍦ㄤ繚璇佹父鎴忔甯歌繍琛岀殑鍓嶆彁涓?闄嶄綆涓嶅繀瑕佺殑閫氫俊寮閿銆備篃灝辨槸璇?鍙互瀵規父鎴忎腑鐨勬秷鎭繘琛屼竴浜涙瘮杈冨鏉傜殑緙栫爜銆?br><br>閭d箞娓告垙涓兘鏈夊摢浜涙秷鎭?鎴戜滑鐭ラ亾鑱婂ぉ鍜岃闊蟲秷鎭紭鍏堢駭姣旇緝浣?鑰屼笖鍙互閫氳繃涓撻棬鐨勬湇鍔″櫒鏉ュ鐞嗐傜湡姝f瘮杈冨叧閿佽兘澶熷獎鍝嶇帺瀹剁殑娓告垙浣撻獙鐨?鏄偅浜涚姸鎬佸彉鏇淬佸姩浣溿佺帺瀹朵箣闂存垨鑰呯帺瀹跺拰鏈嶅姟鍣?NPC涔嬮棿鐨勫疄鏃朵氦浜掔殑娑堟伅銆傚挨鍏舵槸,榪欎簺娑堟伅鐨勪紶閫佹湁涓ユ牸鐨勬椂搴忚姹傘傚鏋滀竴涓帺瀹跺厛鐪嬪埌鑷繁鐨勮鑹茶鐮嶆,鐒跺悗鎵嶇湅鍒板鏂瑰彂鍑烘潵鐨勬敾鍑誨姩浣?鐢氳嚦鏍規湰娌℃湁鐪嬪埌瀵規柟鏈変粈涔堝姩浣?浠?濂硅偗瀹氫細鎰ゆ劋涓嶅鉤銆傚洜姝?娑堟伅緋葷粺蹇呴』淇濊瘉姣忎竴鏉℃秷鎭殑鍙婃椂浼犻?騫朵笖涓嶈兘鎵撲貢瀹冧滑涔嬮棿鐨勯『搴忋?br><br>榪欐剰鍛崇潃,姣忎竴鏉℃秷鎭繀欏繪湁鏄庣‘鐨勮竟鐣屻備篃灝辨槸璇?鏀跺埌涓鏉℃秷鎭箣鍚?鎺ユ敹鏂瑰繀欏昏兘澶熸槑紜繖鏉℃秷鎭湁澶氬皯涓瓧鑺傘傝繖鏄竴鏉℃樉鑰屾槗瑙佺殑瑕佹眰銆備絾鏄ぇ姒傛槸鍑轟簬鎯?鍦ㄥ疄璺典腑瀹冨父甯稿彉涓烘秷鎭紪鐮佷腑鐨勯暱搴﹀瓧孌點?br><br>榪欐棤鐤戞槸涓縐嶆氮璐廣傚緢澶氭秷鎭殑闀垮害鏄浐瀹氱殑,浠呬粎闈犳鏌ュ叾娑堟伅綾誨瀷灝卞彲浠ヤ簡瑙e叾杈圭晫銆傚彉闀挎秷鎭殑澶勭悊鍚庨潰浼氳璁恒傛垜榪欓噷騫朵笉鏄瑕佹妸鍏蜂綋鐨勬父鎴忛昏緫涓庣綉緇滀唬鐮佹販鍦ㄤ竴璧楓傞氳繃浣跨敤鍏冩暟鎹氨鍙互鏈夋晥鐨勬妸緗戠粶浠g爜璺熷叿浣撶殑娓告垙閫昏緫鏈夋晥闅旂寮鏉ャ傚叧浜庡厓鏁版嵁鐨勪嬌鐢ㄥ悗闈篃浼氳鍔犳帰璁ㄣ備粖澶╂椂闂翠笉澶氫簡,涓嬮潰璁ㄨ娑堟伅綾誨瀷鐨勭紪鐮佷綔涓虹粨鏉熴?br><br>閫氬父涓涓瓧鑺備細琚敤鏉ョ紪鐮佹秷鎭殑綾誨瀷,浠ユ柟渚挎帴鏀舵柟鐨勮В鐮併備絾鏄垜浠煡閬?娓告垙涓茍涓嶆槸姣忕綾誨瀷鐨勬秷鎭殑浼犻侀鐜囬兘鏄竴鏍風殑銆備簨瀹炰笂,鎴戜滑鐭ラ亾鍝簺娑堟伅浼氳澶ч噺鍙戦?鍝簺娑堟伅鐨勯鐜囦細浣庡緢澶?鑰屽彟澶栦竴浜涙秷鎭?涓澶╀篃涓嶄細鏈夊嚑鏉°傛槑涔庢,灝卞彲浠ラ噰鐢ㄩ潪瀵圭О鐨勭紪鐮佹柟寮忔潵緙栫爜娑堟伅鐨勭被鍨嬨傝繖灝辨槸Huffman緙栫爜銆傚浜庡崰鎹簡緇濆ぇ閮ㄥ垎閫氫俊閲忕殑鐘舵佸彉鏇存秷鎭岃█,鍗充嬌姣忔潯娑堟伅鑺傜渷涓嬪崐涓瓧鑺?涔熸槸闈炲父鍒掔畻鐨勩備互鎴戠殑緇忛獙,涓鍙版櫘閫歅C鍙互浣滀負鏈嶅姟鍣ㄦ敮鎸?000浜哄悓鏃跺湪綰跨殑瀹炴椂鍔ㄤ綔綾繪父鎴?娑堟伅閫氶噺鏄瘡縐?0000鏉?濡傛灉涓涓湇鍔¢泦緹ゆ湁5鍙板鐞嗗櫒,閭d箞灝辯浉褰撲簬鑺傜渷浜?00kbps鐨勫甫瀹姐傝繖榪樹粎浠呮槸浠庢秷鎭被鍨嬬紪鐮佹柟闈㈡Θ鍙栫殑銆傚綋鐒?Huffman緙栫爜鐨勮В鐮佹槸姣旇緝楹葷儲鐨?鏁堢巼涔熶細浣庝竴浜涖備絾鏄濡傚墠闈㈡墍鎸囧嚭鐨?榪欓儴鍒嗙殑榪愯寮閿騫朵笉浼氶犳垚鎬ц兘鐡墮銆?br></p> <img src ="http://www.shnenglu.com/jack-wang/aggbug/70966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">灝忕帇</a> 2009-01-02 03:49 <a href="http://www.shnenglu.com/jack-wang/archive/2009/01/02/70966.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>緗戞父鏈嶅姟鍣ㄩ氫俊鏋舵瀯鐨勮璁?/title><link>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70963.html</link><dc:creator>灝忕帇</dc:creator><author>灝忕帇</author><pubDate>Thu, 01 Jan 2009 18:23:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70963.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/70963.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2009/01/02/70963.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/70963.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/70963.html</trackback:ping><description><![CDATA[闅忕潃緗戞父浠庝笟鑰呯殑瑙勬ā鍜岄渶姹備笉鏂墿澶э紝瓚婃潵瓚婂鐨勬湅鍙嬭繘鍏ヤ簡緗戞父寮鍙戣繖涓鍩燂紝浣垮緱甯傚満涓綉娓稿紑鍙戞妧鏈浉鍏崇殑闇姹傞噺榪呯寷澧為暱銆傜洰鍓嶏紝緗戞父琛屼笟姣旇緝绱х己鐨勬槸鍏鋒湁杈冩繁鎶鏈姛搴曠殑“涓撳鍨?#8221;寮鍙戣咃紝榪欎富瑕佸寘鎷袱涓柟闈細鏈嶅姟鍣ㄧ璁捐浜哄憳浠ュ強瀹㈡埛绔璁′漢鍛樸傚浜庣綉緇滄父鎴忚岃█錛岀敱浜庡叾涓昏鐨勬父鎴忛昏緫璁$畻鏄湪鏈嶅姟鍣ㄧ瀹屾垚鐨勶紝鏁版嵁鍚屾涓庡箍鎾俊鎭殑浼犻掍篃鏄氳繃鏈嶅姟鍣ㄥ畬鎴愮殑錛屾墍浠ワ紝鏄惁鎷ユ湁涓涓湁緇忛獙鐨勬湇鍔″櫒绔璁′漢鍛樺凡緇忔垚涓轟竴嬈劇綉娓鎬駭鍝佽兘鍚︽垚鍔熺殑鍏抽敭涔嬩竴銆傞壌浜庢錛屾湰鏂囧皢璇曞浘灝辯綉娓告湇鍔″櫒璁捐鐨勪竴緋誨垪闂灞曞紑璁ㄨ鍜屾葷粨錛岀瑪鑰呭皢緇撳悎鑷繁鐨勫紑鍙戠粡楠屽拰浣撲細錛屽皢鍏朵腑鍚勬柟闈㈠唴瀹歸愪竴鍛堢幇銆傚笇鏈涜兘澶熷浠ヤ笅涓夌被浜哄憳鏈夋墍甯姪錛?br>銆銆鏈変竴瀹氱綉緇滅紪紼嬪熀紜銆佸噯澶囪繘鍏ョ綉娓歌涓氫綔鏈嶅姟鍣ㄧ璁捐鐨勪漢鍛橈紱<br>銆銆姝e湪浠庝簨緗戞父鏈嶅姟鍣ㄨ璁$殑浜哄憳錛?br>銆銆緗戞父欏圭洰鐨勬妧鏈礋璐d漢銆?br>銆銆<br>銆銆鐢變簬緗戞父鏈嶅姟鍣ㄧ殑璁捐鐗墊秹鍒板お澶氬唴瀹癸紝姣斿錛氱綉緇滈氫俊鏂歸潰銆佷漢宸ユ櫤鑳姐佹暟鎹簱璁捐絳夌瓑錛屾墍浠ユ湰鏂囧皢閲嶇偣浠庣綉緇滈氫俊鏂歸潰鐨勫唴瀹瑰睍寮璁鴻堪銆傝皥鍒扮綉緇滈氫俊錛屽氨涓嶈兘涓嶆秹鍙婂涓嬩簲涓棶棰橈細<br>[attach]1264[/attach]<br><br>[attach]1265[/attach]<br><br>[attach]1266[/attach]<br><br>[attach]1267[/attach]<br>1銆?甯歌鐨勭綉娓告湇鍔¢氫俊鍣ㄦ灦鏋勬榪?br>2銆?緗戞父鏈嶅姟鍣ㄨ璁$殑鍩烘湰鍘熷垯<br>3銆?緗戞父鏈嶅姟鍣ㄩ氫俊鏋舵瀯璁捐鎵闇鐨勫熀鏈妧鏈?br>4銆?緗戞父鏈嶅姟鍣ㄩ氫俊鏋舵瀯鐨勬祴璇?br>5銆?緗戞父鏈嶅姟鍣ㄩ氫俊鏋舵瀯璁捐鐨勫父瑙侀棶棰?br><br>涓嬮潰鎴戜滑灝變粠絎竴涓棶棰樿璧鳳細<br><br>甯歌鐨勭綉娓告湇鍔″櫒閫氫俊鏋舵瀯姒傝堪<br>銆銆鐩墠錛屽浗鍐呯殑緗戞父甯傚満涓ぇ浣撳瓨鍦ㄤ袱縐嶇被鍨嬬殑緗戞父娓告垙錛歁MORPG錛堝錛氶瓟鍏戒笘鐣岋級鍜屼紤闂茬綉娓革紙濡傦細QQ浼戦棽娓告垙鍜岃仈浼楁父鎴忥紝鑰屽娉℃場鍫備竴綾葷殑娓告垙涓嶲Q浼戦棽娓告垙鏈夊緢澶氱浉鍚岀偣錛屽洜姝や篃褰掍負姝ょ被錛夈傜敱浜庝簩鑰呭湪娓告垙椋庢牸涓婄殑鎴劧涓嶅悓錛屽鑷翠簡浠栦滑鍦ㄩ氫俊鏋舵瀯璁捐鎬濊礬涓婄殑杈冨ぇ宸埆銆備笅闈㈢瑪鑰呭皢鍒嗗埆鎻忚堪榪欎袱縐嶇綉娓哥殑閫氫俊鏋舵瀯銆?br><br>1錛嶮MORPG綾葷綉娓哥殑閫氫俊鏋舵瀯<br>銆銆緗戞父鐨勯氫俊鏋舵瀯錛岄氬父鏄牴鎹嚑涓柟闈㈡潵紜畾鐨勶細娓告垙鐨勫姛鑳界粍鎴愩佹父鎴忕殑棰勮涓婄嚎浜烘暟浠ュ強娓告垙鐨勫彲鎵╁睍鎬с?br>銆銆鐩墠姣旇緝閫氱敤鐨凪MORPG娓告垙嫻佺▼鏄繖鏍風殑錛?br><br>a. 鐜╁鍒版父鎴忓畼鏂圭綉绔欐敞鍐岀敤鎴峰悕鍜屽瘑鐮併?br>b. 娉ㄥ唽瀹屾垚鍚庯紝鐜╁閫夋嫨鍦ㄦ煇涓涓尯嬋媧繪父鎴忚處鍙楓?br>c. 鐜╁鍦ㄦ父鎴忓鎴風涓櫥褰曡繘鍏ュ凡緇忚嬋媧葷殑娓告垙鍒嗗尯錛屽緩绔嬫父鎴忚鑹茶繘琛屾父鎴忋?br><br>銆銆閫氬父錛屽湪榪欐牱鐨勬ā寮忎笅錛岀帺瀹剁殑瑙掕壊鏁版嵁鏄笉鑳借法鍖轟嬌鐢ㄧ殑錛屽嵆錛氬湪A鍖哄緩绔嬬殑娓告垙瑙掕壊鍦˙鍖烘槸鏃犳硶浣跨敤鐨勶紝鍚勫尯涔嬮棿鐨勬暟鎹繚鎸佸悇鑷嫭绔嬫с傛垜浠皢榪欐牱鐙珛鐨凙鍖烘垨B鍖虹О涓轟竴涓嫭绔嬬殑鏈嶅姟鍣ㄧ粍錛屼竴涓嫭绔嬬殑鏈嶅姟鍣ㄧ粍灝辨槸涓涓浉瀵瑰畬鏁寸殑娓告垙涓栫晫銆傝岀綉娓告湇鍔″櫒鐨勯氫俊鏋舵瀯璁捐錛屽垯鍖呮嫭浜嗗熀浜庢湇鍔″櫒緇勪箣涓婄殑鏁翠釜娓告垙涓栫晫鐨勯氫俊鏋舵瀯錛屼互鍙婂湪涓涓湇鍔″櫒緇勪箣鍐呯殑鏈嶅姟鍣ㄩ氫俊鏋舵瀯銆?br><br>銆銆鎴戜滑鍏堟潵鐪嬬湅鍗曠嫭鐨勬湇鍔″櫒緇勫唴閮ㄧ殑閫氫俊鏄浣曡璁$殑銆?br>銆銆涓涓湇鍔″櫒緇勫唴鐨勫悇鏈嶅姟鍣ㄧ粍鎴愶紝瑕佷緷鎹父鎴忓姛鑳借繘琛屽垝鍒嗐備笉鍚岀殑娓告垙鍐呭絳栧垝浼氬鏈嶅姟鍣ㄧ殑緇勬垚閫犳垚涓嶅悓鐨勫獎鍝嶃備竴鑸湴錛屾垜浠彲浠ュ皢涓涓粍鍐呯殑鏈嶅姟鍣ㄧ畝鍗曞湴鍒嗘垚涓ょ被錛氬満鏅浉鍏崇殑錛堝錛氳璧般佹垬鏂楃瓑錛変互鍙婂満鏅笉鐩稿叧鐨勶紙濡傦細鍏細鑱婂ぉ銆佷笉鍙楀尯鍩熼檺鍒剁殑璐告槗絳夛級銆備負浜嗕繚璇佹父鎴忕殑嫻佺晠鎬э紝鍙互灝嗚繖涓ょ被涓嶅悓鐨勫姛鑳藉垎鍒氦鐢變笉鍚岀殑鏈嶅姟鍣ㄥ幓鍚勮嚜瀹屾垚銆傚彟澶栵紝瀵逛簬閭d簺鍦ㄦ湇鍔″櫒榪愯涓繘琛岀殑姣旇緝鑰楁椂鐨勮綆楋紝涓鑸篃浼氬皢鍏跺崟鐙彁鐐煎嚭鏉ワ紝浜ょ敱鍗曠嫭鐨勭嚎紼嬫垨鍗曠嫭鐨勮繘紼嬪幓瀹屾垚銆?br><br>銆銆鍚勪釜緗戞父欏圭洰浼氭牴鎹父鎴忕壒鐐圭殑涓嶅悓錛岃岀伒媧婚夋嫨鑷繁鐨勬湇鍔″櫒緇勬垚鏂規銆傜粡甯稿彲浠ヨ鍒扮殑涓縐嶆柟妗堟槸錛氬満鏅湇鍔″櫒銆侀潪鍦烘櫙鏈嶅姟鍣ㄣ佹湇鍔″櫒綆$悊鍣ㄣ丄I鏈嶅姟鍣ㄤ互鍙婃暟鎹簱浠g悊鏈嶅姟鍣ㄣ?br>銆銆浠ヤ笂鍚勬湇鍔″櫒鐨勪富瑕佸姛鑳芥槸錛?br><br>銆銆鍦烘櫙鏈嶅姟鍣細瀹冭礋璐e畬鎴愪富瑕佺殑娓告垙閫昏緫錛岃繖浜涢昏緫鍖呮嫭錛氳鑹插湪娓告垙鍦烘櫙涓殑榪涘叆涓庨鍑恒佽鑹茬殑琛岃蛋涓庤窇鍔ㄣ佽鑹叉垬鏂楋紙鍖呮嫭鎵撴級銆佷換鍔$殑璁ら絳夈傚満鏅湇鍔″櫒璁捐鐨勫ソ鍧忔槸鏁翠釜娓告垙涓栫晫鏈嶅姟鍣ㄦц兘宸紓鐨勪富瑕佷綋鐜幫紝瀹冪殑璁捐闅懼害涓嶄粎浠呭湪浜庨氫俊妯″瀷鏂歸潰錛屾洿涓昏鐨勬槸鏁翠釜鏈嶅姟鍣ㄧ殑浣撶郴鏋舵瀯鍜屽悓姝ユ満鍒剁殑璁捐銆?br><br>銆銆闈炲満鏅湇鍔″櫒錛氬畠涓昏璐熻矗瀹屾垚涓庢父鎴忓満鏅笉鐩稿叧鐨勬父鎴忛昏緫錛岃繖浜涢昏緫涓嶄緷闈犳父鎴忕殑鍦板浘緋葷粺涔熻兘姝e父榪涜錛屾瘮濡傚叕浼氳亰澶╂垨涓栫晫鑱婂ぉ錛屼箣鎵浠ユ妸瀹冧粠鍦烘櫙鏈嶅姟鍣ㄤ腑鐙珛鍑烘潵錛屾槸涓轟簡鑺傜渷鍦烘櫙鏈嶅姟鍣ㄧ殑CPU鍜屽甫瀹借祫婧愶紝璁╁満鏅湇鍔″櫒鑳藉灝藉彲鑳藉揩鍦板鐞嗛偅浜涘娓告垙嫻佺晠鎬у獎鍝嶈緝澶х殑娓告垙閫昏緫銆?br><br>銆銆鏈嶅姟鍣ㄧ鐞嗗櫒錛氫負浜嗗疄鐜頒紬澶氱殑鍦烘櫙鏈嶅姟鍣ㄤ箣闂翠互鍙婂満鏅湇鍔″櫒涓庨潪鍦烘櫙鏈嶅姟鍣ㄤ箣闂寸殑鏁版嵁鍚屾錛屾垜浠繀欏誨緩绔嬩竴涓粺涓鐨勭鐞嗚咃紝榪欎釜綆$悊鑰呭氨鏄湇鍔″櫒緇勪腑鐨勬湇鍔″櫒綆$悊鍣ㄣ傚畠鐨勪換鍔′富瑕佹槸鍦ㄥ悇鏈嶅姟鍣ㄤ箣闂翠綔鏁版嵁鍚屾錛屾瘮濡傜帺瀹朵笂涓嬬嚎淇℃伅鐨勫悓姝ャ傚叾鏈涓昏鐨勫姛鑳借繕鏄畬鎴愬満鏅垏鎹㈡椂鐨勬暟鎹悓姝ャ傚綋鐜╁闇瑕佷粠涓涓満鏅疉鍒囨崲鍒板彟涓涓満鏅疊鏃訛紝鏈嶅姟鍣ㄧ鐞嗗櫒璐熻矗灝嗙帺瀹剁殑鏁版嵁浠庡満鏅疉杞Щ鍒板満鏅疊錛屽茍閫氳繃鍗忚閫氱煡榪欎袱涓満鏅暟鎹悓姝ョ殑寮濮嬩笌緇撴潫銆傛墍浠ワ紝涓轟簡瀹炵幇榪欎簺鍐呭綣佹潅鐨勬暟鎹悓姝ヤ換鍔★紝鏈嶅姟鍣ㄧ鐞嗗櫒閫氬父浼氫笌鎵鏈夌殑鍦烘櫙鏈嶅姟鍣ㄥ拰闈炲満鏅湇鍔″櫒淇濇寔socket榪炴帴銆?br><br>銆銆AI錛堜漢宸ユ櫤鑳斤級鏈嶅姟鍣細鐢變簬鎬墿鐨勪漢宸ユ櫤鑳借綆楅潪甯告秷鑰楃郴緇熻祫婧愶紝鎵浠ユ垜浠妸瀹冪嫭绔嬫垚鍗曠嫭鐨勬湇鍔″櫒銆侫I鏈嶅姟鍣ㄧ殑涓昏浣滅敤鏄礋璐h綆楁墿鐨凙I錛屽茍灝嗚綆楃粨鏋滆繑鍥炵粰鍦烘櫙鏈嶅姟鍣紝涔熷氨鏄錛孉I鏈嶅姟鍣ㄦ槸鍗曠嫭涓哄満鏅湇鍔″櫒鏈嶅姟鐨勶紝瀹冨畬鎴愪粠鍦烘櫙鏈嶅姟鍣ㄤ氦榪囨潵鐨勮綆椾換鍔★紝騫跺皢璁$畻緇撴灉榪斿洖緇欏満鏅湇鍔″櫒銆傛墍浠ワ紝浠庣綉緇滈氫俊鏂歸潰鏉ヨ錛孉I鏈嶅姟鍣ㄥ彧涓庝紬澶氬満鏅湇鍔″櫒淇濇寔socket榪炴帴銆?br><br>銆銆鏁版嵁搴撲唬鐞嗘湇鍔″櫒錛氬湪緗戞父鐨勬暟鎹簱璇誨啓鏂歸潰錛岄氬父鏈変袱縐嶄綔娉曪紝涓縐嶆槸鍦ㄥ簲鐢ㄦ湇鍔″櫒涓洿鎺ュ姞榪涙暟鎹簱璁塊棶鐨勪唬鐮佽繘琛屾暟鎹簱璁塊棶錛岃繕鏈変竴縐嶆柟寮忔槸灝嗘暟鎹簱璇誨啓鐙珛鍑烘潵錛屽崟鐙綔鎴愭暟鎹簱浠g悊錛岀敱瀹冪粺涓榪涜鏁版嵁搴撹闂茍榪斿洖璁塊棶緇撴灉銆?br><br>銆銆鍏朵腑錛岄潪鍦烘櫙鏈嶅姟鍣ㄥ湪涓嶅悓鐨勬父鎴忛」鐩腑鍙兘浼氳璁捐鎴愪笉鍚岀殑鍔熻兘錛屾瘮濡備互緇勯槦銆佸叕浼氭垨鍏ㄩ閬撹亰澶╀負鐗硅壊鐨勬父鎴忥紝寰堝彲鑳戒負浜嗘弧瓚崇帺瀹剁殑鑱婂ぉ闇姹傝岃绔嬪崟鐙殑鑱婂ぉ鏈嶅姟鍣紱鑰屽鏋滄槸浠ョ墿鍝佽錘鏄擄紙濡傛媿鍗栫瓑錛変負鐗硅壊鐨勬父鎴忥紝寰堝彲鑳戒負浜嗘弧瓚蟲媿鍗栫殑闇姹傝屽崟鐙绔嬫媿鍗栨湇鍔″櫒銆傚埌搴曟槸涓嶆槸鏈夊繀瑕佸皢鏌愪竴欏規父鎴忓姛鑳界嫭绔嬪鐞嗘垚涓涓湇鍔″櫒錛岃瑙嗚鍔熻兘瀵規父鎴忕殑涓誨満鏅昏緫錛堟寚琛岃蛋銆佹垬鏂楃瓑鐜╁鏃ュ父娓告垙琛屼負錛夌殑褰卞搷紼嬪害鑰屽畾銆傚鏋滆鍔熻兘瀵逛富鍦烘櫙閫昏緫鐨勫獎鍝嶆瘮杈冨ぇ錛屽彲鑳藉涓誨満鏅昏緫鐨勮繍琛岄犳垚姣旇緝涓ラ噸鐨勬ц兘鍜屾晥鐜囨崯澶憋紝閭d箞搴旇冭檻灝嗗叾浠庝富鍦烘櫙閫昏緫涓墺紱伙紝浣嗚兘鍚﹀墺紱昏繕鏈夊彟涓涓墠鎻愶細姝ゅ姛鑳芥槸鍚︿笌娓告垙鍦烘櫙錛堝嵆鍦板浘鍧愭爣緋葷粺錛夌浉鍏熾傚鏋滄鍔熻兘涓庡満鏅浉鍏沖張紜疄褰卞搷鍒頒簡涓誨満鏅昏緫鐨勬墽琛屾晥鐜囷紝鍒欏彲鑳介渶瑕佸湪鍦烘櫙鏈嶅姟鍣ㄤ笂璁劇珛涓撻棬鐨勭嚎紼嬫潵澶勭悊鑰屼笉鏄皢瀹冪嫭绔嬫垚涓涓崟鐙殑鏈嶅姟鍣ㄣ?br><br>銆銆浠ヤ笂鏄竴涓湇鍔″櫒緇勫唴鐨勫悇鏈嶅姟鍣ㄧ粍鎴愭儏鍐典粙緇嶏紝閭d箞錛屽悇鏈嶅姟鍣ㄤ箣闂存槸濡備綍閫氫俊鐨勫憿錛熷畠鐨勫熀鏈氫俊鏋勬灦鏈夊摢浜涘憿錛?br>銆銆MMORPG鐨勫崟緇勬湇鍔″櫒鏋舵瀯閫氬父鍙互鍒嗕負涓ょ錛氱涓縐嶆槸甯︾綉鍏崇殑鏈嶅姟鍣ㄦ灦鏋勶紱絎簩縐嶆槸涓嶅甫緗戝叧鐨勬湇鍔″櫒鏋舵瀯銆備袱縐嶆柟妗堝悇鏈夊埄寮娿?br><br>銆銆灝卞甫緗戝叧鐨勬湇鍔″櫒鏋舵瀯鑰岃█錛岀敱浜庡畠瀵瑰鍙悜鐜╁鎻愪緵鍞竴鐨勪竴涓氫俊绔彛錛屾墍浠ュ湪鐜╁涓渚т細鏈夋瘮杈冩祦鐣呯殑娓告垙浣撻獙錛岃繖閫氬父涔熸槸閭d簺瓚呭ぇ瑙勬ā鏃犵紳鍦板浘緗戞父鎵閲囩敤鐨勬柟妗堬紝浣嗚繖縐嶆柟妗堢殑緙虹偣鏄湇鍔″櫒緇勫唴鐨勯氫俊鏋舵瀯璁捐鐩稿澶嶆潅銆佽皟璇曚笉鏂逛究銆佺綉鍏崇殑閫氫俊鍘嬪姏榪囧ぇ銆佸緗戝叧鐨勯氫俊妯″瀷璁捐瑕佹眰杈冮珮絳夈傜浜岀鏂規浼氬悓鏃跺悜鐜╁寮鏀懼涓父鎴忔湇鍔″櫒绔彛錛岄櫎浜嗘父鎴忓満鏅湇鍔″櫒鐨勯氫俊绔彛澶栵紝鍚屾椂榪樺彲鑳芥彁渚涜濡傝亰澶╂湇鍔″櫒絳夌殑閫氫俊绔彛銆傝繖縐嶆柟妗堢殑涓昏緙虹偣鏄湪榪涜鍦烘櫙鏈嶅姟鍣ㄧ殑鍒囨崲鏃訛紝鐜╁瀹㈡埛绔殑琛ㄧ幇涓氬父浼氭湁涓涓濡傚満鏅皟鍏ョ殑鐣岄潰鍑虹幇錛屽獎鍝嶄簡娓告垙鐨勬祦鐣呮劅銆傚熀浜庤繖縐嶆柟妗堢殑娓告垙鍦ㄥ鎴風鐨勭晫闈㈠鐞嗘柟闈紝姣旇緝鍏稿瀷鐨勮〃鐜版槸錛氬綋瑕佽繘琛屽満鏅垏鎹㈡椂錛屽彧鑳介氳繃鐩稿簲鐨?#8220;浼犻佸姛鑳?#8221;浼犻佸埌鍙﹀鐨勫満鏅幓錛屾垨鑰呴渶瑕佽繘鍏ユ柊鐨勫満鏅椂錛屽鎴風浼氭湁姣旇緝闀挎椂闂寸殑絳夊緟榪涘叆鏂板満鏅殑絳夊緟鐣岄潰(Loading鐣岄潰)銆?br><br>銆銆浠庢妧鏈搴﹁岃█錛岀瑪鑰呮洿鍊懼悜浜庡皢鐙珛鐨勬湇鍔″櫒緇勮璁℃垚甯︾綉鍏崇殑妯″瀷錛岃櫧鐒惰繖鍔犲ぇ浜嗘湇鍔″櫒鐨勮璁¢毦搴︼紝浣嗗嵈澧炲己浜嗘父鎴忕殑嫻佺晠鎰熷拰瀹夊叏鎬э紝榪欑鑺辮垂榪樻槸鍊煎緱鐨勩?br>銆銆絎旇呭湪涓嬮潰闄勪笂浜嗗甫緗戝叧鐨凪MORPG閫氫俊鏋舵瀯鍥撅紝甯屾湜鑳界粰涓氬唴鐨勬湅鍙嬩滑涓鐐規湁鐩婄殑鍚開銆? <img src ="http://www.shnenglu.com/jack-wang/aggbug/70963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">灝忕帇</a> 2009-01-02 02:23 <a href="http://www.shnenglu.com/jack-wang/archive/2009/01/02/70963.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://www44552.com" target="_blank">国产精品视频九色porn</a>| <a href="http://5588gww.com" target="_blank">亚洲成人在线视频播放</a>| <a href="http://jxyptsw.com" target="_blank">最新日韩av</a>| <a href="http://977mo.com" target="_blank">欧美日韩国产精品一区</a>| <a href="http://9niuw.com" target="_blank">亚洲特级片在线</a>| <a href="http://epiegame.com" target="_blank">亚洲国产91</a>| <a href="http://889644.com" target="_blank">夜夜嗨av一区二区三区免费区</a>| <a href="http://myav2.com" target="_blank">亚洲国产精品成人精品</a>| <a href="http://whdzjc.com" target="_blank">欧美精品在欧美一区二区少妇</a>| <a href="http://www353488.com" target="_blank">国产精品99久久久久久久vr</a>| <a href="http://126film.com" target="_blank">亚洲精品一区二区三</a>| <a href="http://joy-learn.com" target="_blank">国产精品国色综合久久</a>| <a href="http://yx3369.com" target="_blank">久久在线免费观看视频</a>| <a href="http://ggg4444.com" target="_blank">欧美国产大片</a>| <a href="http://ccc159.com" target="_blank">欧美一区二区</a>| <a href="http://qq666qq.com" target="_blank">欧美α欧美αv大片</a>| <a href="http://yx3369.com" target="_blank">亚洲永久免费av</a>| <a href="http://ynjzwh.com" target="_blank">久久久精彩视频</a>| <a href="http://287975.com" target="_blank">99国产精品99久久久久久</a>| <a href="http://jxjx11.com" target="_blank">亚洲电影天堂av</a>| <a href="http://y9z8.com" target="_blank">国产精品区一区</a>| <a href="http://xingzhiyin85.com" target="_blank">欧美成人性网</a>| <a href="http://ccltb.com" target="_blank">欧美午夜欧美</a>| <a href="http://xmjhyey.com" target="_blank">欧美freesex交免费视频</a>| <a href="http://261262.com" target="_blank">先锋影音国产精品</a>| <a href="http://329374.com" target="_blank">亚洲激情网站</a>| <a href="http://012492.com" target="_blank">性欧美8khd高清极品</a>| <a href="http://daqinhkvip.com" target="_blank">亚洲日本va午夜在线电影</a>| <a href="http://kk8586.com" target="_blank">一本色道久久88综合亚洲精品ⅰ</a>| <a href="http://www-26333com.com" target="_blank">国产日韩欧美成人</a>| <a href="http://yys4.com" target="_blank">亚洲精品国久久99热</a>| <a href="http://yunyang0991.com" target="_blank">国产一区二区三区直播精品电影</a>| <a href="http://aimashe.com" target="_blank">亚洲激情电影中文字幕</a>| <a href="http://hnjlhgw.com" target="_blank">国产资源精品在线观看</a>| <a href="http://663747.com" target="_blank">一区二区三区日韩在线观看</a>| <a href="http://562595.com" target="_blank">亚洲第一成人在线</a>| <a href="http://www353488.com" target="_blank">亚洲免费在线观看视频</a>| <a href="http://rxbbei.com" target="_blank">日韩性生活视频</a>| <a href="http://jiujiuri8.com" target="_blank">久久性色av</a>| <a href="http://798200.com" target="_blank">久久精品一区二区三区不卡</a>| <a href="http://jxchunlong.com" target="_blank">欧美日韩在线免费观看</a>| <a href="http://710691.com" target="_blank">亚洲国产日韩欧美在线动漫</a>| <a href="http://www-42189.com" target="_blank">国产日韩欧美制服另类</a>| <a href="http://yyy922.com" target="_blank">宅男66日本亚洲欧美视频</a>| <a href="http://cc1024.com" target="_blank">91久久精品一区二区三区</a>| <a href="http://149155.com" target="_blank">久久av一区</a>| <a href="http://gzw33.com" target="_blank">久久精品一区中文字幕</a>| <a href="http://3315588.com" target="_blank">国产精品毛片a∨一区二区三区|国</a>| <a href="http://jivbus.com" target="_blank">亚洲第一页中文字幕</a>| <a href="http://24kshopss.com" target="_blank">红桃视频一区</a>| <a href="http://388268.com" target="_blank">久久电影一区</a>| <a href="http://ipx758.com" target="_blank">久久av在线</a>| <a href="http://www446168.com" target="_blank">国产精品亚洲不卡a</a>| <a href="http://chaoxibg.com" target="_blank">亚洲婷婷综合久久一本伊一区</a>| <a href="http://880895.com" target="_blank">亚洲激情黄色</a>| <a href="http://jisuyswang.com" target="_blank">能在线观看的日韩av</a>| <a href="http://7811c.com" target="_blank">欧美成人午夜</a>| <a href="http://hbsmhy.com" target="_blank">亚洲欧洲日韩综合二区</a>| <a href="http://www7495.com" target="_blank">久久婷婷国产综合国色天香</a>| <a href="http://9931111.com" target="_blank">久久永久免费</a>| <a href="http://www284tv.com" target="_blank">黄色国产精品一区二区三区</a>| <a href="http://hzdss.com" target="_blank">欧美在线视频观看</a>| <a href="http://ks180.com" target="_blank">久久久久久久久久久成人</a>| <a href="http://hhsp13.com" target="_blank">国产精品亚洲欧美</a>| <a href="http://lovehefei.com" target="_blank">一区二区国产在线观看</a>| <a href="http://yye321.com" target="_blank">亚洲一区二区影院</a>| <a href="http://xwsj2020.com" target="_blank">欧美午夜一区二区</a>| <a href="http://yx3369.com" target="_blank">日韩视频一区二区在线观看</a>| <a href="http://xingda-sh.com" target="_blank">亚洲国产欧洲综合997久久</a>| <a href="http://www-273111.com" target="_blank">久热爱精品视频线路一</a>| <a href="http://hhh699.com" target="_blank">欧美激情视频网站</a>| <a href="http://233116.com" target="_blank">国产精品视频xxx</a>| <a href="http://http456446.com" target="_blank">久久精品91久久久久久再现</a>| <a href="http://dacellflex.com" target="_blank">国产精品普通话对白</a>| <a href="http://82b2.com" target="_blank">性久久久久久</a>| <a href="http://163263.com" target="_blank">欧美成人精品一区</a>| <a href="http://zj-jufeng.com" target="_blank">日韩亚洲国产精品</a>| <a href="http://710477.com" target="_blank">国产精品久久婷婷六月丁香</a>| <a href="http://winkwink333.com" target="_blank">一区二区久久</a>| <a href="http://794238.com" target="_blank">久久精品72免费观看</a>| <a href="http://6633kj.com" target="_blank">亚洲二区视频</a>| <a href="http://sishengnv.com" target="_blank">欧美日韩福利在线观看</a>| <a href="http://submro.com" target="_blank">亚洲在线一区二区三区</a>| <a href="http://138128.com" target="_blank">久久漫画官网</a>| <a href="http://9927tv.com" target="_blank">亚洲日本中文字幕免费在线不卡</a>| <a href="http://cgnwp.com" target="_blank">欧美国产成人在线</a>| <a href="http://wwmm9.com" target="_blank">亚洲午夜电影</a>| <a href="http://zisxks.com" target="_blank">老司机亚洲精品</a>| <a href="http://yujiaosanye.com" target="_blank">日韩视频一区二区</a>| <a href="http://www-833898.com" target="_blank">欧美日韩国产一区二区三区</a>| <a href="http://yys4.com" target="_blank">亚洲免费视频一区二区</a>| <a href="http://1369080.com" target="_blank">美国十次成人</a>| <a href="http://6h8c.com" target="_blank">亚洲免费影视第一页</a>| <a href="http://clgtzz.com" target="_blank">国色天香一区二区</a>| <a href="http://www-4997.com" target="_blank">欧美精品在线看</a>| <a href="http://439368.com" target="_blank">欧美亚洲综合在线</a>| <a href="http://312012.com" target="_blank">最新亚洲一区</a>| <a href="http://www3344cao.com" target="_blank">久久国产色av</a>| <a href="http://royaljinma.com" target="_blank">亚洲毛片av</a>| <a href="http://babylonmovi.com" target="_blank">国产精品三区www17con</a>| <a href="http://1177898.com" target="_blank">久久不射电影网</a>| <a href="http://7v51.com" target="_blank">亚洲乱码国产乱码精品精可以看</a>| <a href="http://caofujia.com" target="_blank">欧美一区二区三区喷汁尤物</a>| <a href="http://tk99444.com" target="_blank">亚洲国产天堂网精品网站</a>| <a href="http://mruyan.com" target="_blank">国产精品久久久久9999吃药</a>| <a href="http://xingmaokeji.com" target="_blank">久久久伊人欧美</a>| <a href="http://yymh1056.com" target="_blank">一区二区欧美亚洲</a>| <a href="http://96ykm.com" target="_blank">亚洲第一精品夜夜躁人人躁 </a>| <a href="http://y65y.com" target="_blank">亚洲天堂av高清</a>| <a href="http://uniconmgt.com" target="_blank">嫩草伊人久久精品少妇av杨幂</a>| <a href="http://820002.com" target="_blank">亚洲视频在线播放</a>| <a href="http://cmtqd.com" target="_blank">亚洲第一偷拍</a>| <a href="http://zxxx3.com" target="_blank">国产亚洲欧美一区在线观看</a>| <a href="http://wwwcao88.com" target="_blank">欧美精品色一区二区三区</a>| <a href="http://www-44469.com" target="_blank">久久国产精品电影</a>| <a href="http://vipaiqiyi.com" target="_blank">亚洲一区免费观看</a>| <a href="http://rosi2030.com" target="_blank">亚洲人成久久</a>| <a href="http://qdssqt.com" target="_blank">欧美福利专区</a>| <a href="http://4322333.com" target="_blank">老司机午夜精品视频在线观看</a>| <a href="http://3dxxoo.com" target="_blank">亚洲欧美视频在线观看</a>| <a href="http://www11108b.com" target="_blank">99精品国产在热久久下载</a>| <a href="http://569688.com" target="_blank">一区二区三区在线视频免费观看</a>| <a href="http://www-136445.com" target="_blank">欧美偷拍一区二区</a>| <a href="http://123-sj.com" target="_blank">欧美久久久久</a>| <a href="http://17kfe.com" target="_blank">欧美精品偷拍</a>| <a href="http://cctbdy.com" target="_blank">欧美电影在线观看</a>| <a href="http://sdtricoop.com" target="_blank">久久这里有精品15一区二区三区</a>| <a href="http://66jj99.com" target="_blank">亚洲永久字幕</a>| <a href="http://tao62bao.com" target="_blank">亚洲一区二区三区午夜</a>| <a href="http://1369080.com" target="_blank">亚洲美女在线国产</a>| <a href="http://shyihegu.com" target="_blank">亚洲精品在线看</a>| <a href="http://3c3c3c.com" target="_blank">亚洲日本在线观看</a>| <a href="http://5252bnet.com" target="_blank">欧美激情中文不卡</a>| <a href="http://292q.com" target="_blank">欧美激情精品久久久久久免费印度 </a>| <a href="http://520taose.com" target="_blank">久久久久91</a>| <a href="http://by3787.com" target="_blank">欧美一区国产一区</a>| <a href="http://9niuw.com" target="_blank">亚洲欧美精品中文字幕在线</a>| <a href="http://456985.com" target="_blank">中文国产成人精品</a>| <a href="http://www227ee.com" target="_blank">这里只有视频精品</a>| <a href="http://689658.com" target="_blank">亚洲一区二区在线视频</a>| <a href="http://gyzhoucheng.com" target="_blank">亚洲亚洲精品三区日韩精品在线视频 </a>| <a href="http://saobi6.com" target="_blank">美女网站久久</a>| <a href="http://wyy66.com" target="_blank">久久久人成影片一区二区三区观看</a>| <a href="http://9882355.com" target="_blank">亚洲淫性视频</a>| <a href="http://6399128.com" target="_blank">亚洲一区二区四区</a>| <a href="http://sz-changrong.com" target="_blank">亚洲综合色在线</a>| <a href="http://ssni888.com" target="_blank">欧美一区二区免费视频</a>| <a href="http://ww323.com" target="_blank">欧美一区二区视频在线观看</a>| <a href="http://sp106.com" target="_blank">亚洲欧美日韩另类</a>| <a href="http://miaoxp.com" target="_blank">欧美在线视频导航</a>| <a href="http://6661639.com" target="_blank">久久综合综合久久综合</a>| <a href="http://www-33tt.com" target="_blank">欧美高清在线一区</a>| <a href="http://977mo.com" target="_blank">欧美日韩美女一区二区</a>| <a href="http://559dd.com" target="_blank">欧美日韩亚洲激情</a>| <a href="http://4r6b.com" target="_blank">国产欧美日本</a>| <a href="http://qkspvip.com" target="_blank">永久91嫩草亚洲精品人人</a>| <a href="http://036762.com" target="_blank">亚洲电影视频在线</a>| <a href="http://www-919198.com" target="_blank">亚洲精品影视</a>| <a href="http://naturalgiftfashion.com" target="_blank">亚洲一区二区三区精品在线</a>| <a href="http://wwwyinyinai149.com" target="_blank">亚洲欧美不卡</a>| <a href="http://maoshimh.com" target="_blank">久久久久成人精品</a>| <a href="http://atmub.com" target="_blank">亚洲国语精品自产拍在线观看</a>| <a href="http://2111952.com" target="_blank">亚洲精品免费观看</a>| <a href="http://www-55655.com" target="_blank">亚洲综合色自拍一区</a>| <a href="http://ybshg.com" target="_blank">久久一二三区</a>| <a href="http://hjk56.com" target="_blank">欧美午夜精品久久久</a>| <a href="http://by66336.com" target="_blank">国产亚洲福利</a>| <a href="http://nebnb89.com" target="_blank">亚洲精品视频在线看</a>| <a href="http://maoshimh.com" target="_blank">亚洲欧美国产一区二区三区</a>| <a href="http://fulong-tj.com" target="_blank">久久久久国产精品人</a>| <a href="http://99cheats.com" target="_blank">欧美激情第一页xxx</a>| <a href="http://huaihuaihuai.com" target="_blank">99国内精品久久</a>| <a href="http://894322.com" target="_blank">久久激情久久</a>| <a href="http://y66776.com" target="_blank">欧美色图五月天</a>| <a href="http://nbpacking.com" target="_blank">国内偷自视频区视频综合</a>| <a href="http://k37b.com" target="_blank">99国内精品久久</a>| <a href="http://my8823.com" target="_blank">久久久精品tv</a>| <a href="http://www901aaa.com" target="_blank">日韩一级大片在线</a>| <a href="http://3333577.com" target="_blank">久久久国际精品</a>| <a href="http://609005.com" target="_blank">国产精品久久久久久久久免费桃花 </a>| <a href="http://eee285.com" target="_blank">亚洲一区尤物</a>| <a href="http://842332.com" target="_blank">免费人成精品欧美精品</a>| <a href="http://8w82.com" target="_blank">国产精品免费福利</a>| <a href="http://czwangluoyouhua.com" target="_blank">影音先锋日韩资源</a>| <a href="http://221080.com" target="_blank">亚洲自拍偷拍色片视频</a>| <a href="http://3333347.com" target="_blank">欧美成人免费观看</a>| <a href="http://www249aaa.com" target="_blank">亚洲欧美在线一区二区</a>| <a href="http://xxxsxx.com" target="_blank">欧美精品一卡</a>| <a href="http://btbt7086.com" target="_blank">亚洲成人在线视频网站</a>| <a href="http://www62265.com" target="_blank">午夜精品一区二区在线观看</a>| <a href="http://tefahsop.com" target="_blank">欧美国内亚洲</a>| <a href="http://xiaocao-av.com" target="_blank">欧美一级黄色录像</a>| <a href="http://099553.com" target="_blank">欧美日韩日本国产亚洲在线</a>| <a href="http://188267.com" target="_blank">今天的高清视频免费播放成人</a>| <a href="http://74w4.com" target="_blank">亚洲自拍偷拍一区</a>| <a href="http://maoshimh.com" target="_blank">亚洲国产欧美在线人成</a>| <a href="http://obatshaka.com" target="_blank">久久精品最新地址</a>| <a href="http://wwwgay456.com" target="_blank">国产日产欧美a一级在线</a>| <a href="http://gjjlzs.com" target="_blank">亚洲一区在线播放</a>| <a href="http://chufengguanye.com" target="_blank">91久久久久</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>