锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Accept鏂規硶錛孊ind鏂規硶錛孋lose鏂規硶錛圵insock鎺т歡錛夛紝Listen鏂規硶錛孭eerData鏂規硶錛孲endData鏂規硶錛孏etData鏂規硶錛圵inSock鎺т歡錛夛紝GetData鏂規硶錛圓ctiveX鎺т歡錛夈?br />
浜嬩歡
Close浜嬩歡錛孋onnectionRequest浜嬩歡錛孌ataArrival浜嬩歡錛孲endComplete浜嬩歡錛孲endProgress浜嬩歡錛孍rror浜嬩歡錛孋onnect浜嬩歡錛圵insock鎺т歡錛夛紝Connect浜嬩歡銆?br />
Winsock 鎺т歡瀵圭敤鎴鋒潵璇存槸涓嶅彲瑙佺殑錛屽畠鎻愪緵浜嗚闂?TCP 鍜?UDP 緗戠粶鏈嶅姟鐨勬柟渚塊斿緞銆侻icrosoft Access銆乂isual Basic銆乂isual C++ 鎴?Visual FoxPro 鐨勫紑鍙戜漢鍛橀兘鍙嬌鐢ㄥ畠銆備負緙栧啓瀹㈡埛鎴栨湇鍔″櫒搴旂敤紼嬪簭錛屼笉蹇呬簡瑙?TCP 鐨勭粏鑺傛垨璋冪敤浣庣駭鐨?Winsock APIs銆傞氳繃璁劇疆鎺т歡鐨勫睘鎬у茍璋冪敤鍏舵柟娉曞氨鍙交鏄撹繛鎺ュ埌涓鍙拌繙紼嬫満鍣ㄤ笂鍘伙紝騫朵笖榪樺彲鍙屽悜浜ゆ崲鏁版嵁銆?br />
TCP 鍩虹
鏁版嵁浼犺緭鍗忚鍏佽鍒涘緩鍜岀淮鎶や笌榪滅▼璁$畻鏈虹殑榪炴帴銆傝繛鎺ヤ袱鍙拌綆楁満灝卞彲褰兼榪涜鏁版嵁浼犺緭銆?br />
濡傛灉鍒涘緩瀹㈡埛搴旂敤紼嬪簭錛屽氨蹇呴』鐭ラ亾鏈嶅姟鍣ㄨ綆楁満鍚嶆垨鑰?IP 鍦板潃錛圧emoteHost 灞炴э級錛岃繕瑕佺煡閬撹繘琛?#8220;渚﹀惉”鐨勭鍙o紙RemotePort 灞炴э級錛岀劧鍚庤皟鐢?Connect 鏂規硶銆?br />
濡傛灉鍒涘緩鏈嶅姟鍣ㄥ簲鐢ㄧ▼搴忥紝灝卞簲璁劇疆涓涓敹鍚鍙o紙LocalPort 灞炴э級騫惰皟鐢?Listen 鏂規硶銆傚綋瀹㈡埛璁$畻鏈洪渶瑕佽繛鎺ユ椂灝變細鍙戠敓 ConnectionRequest 浜嬩歡銆備負浜嗗畬鎴愯繛鎺ワ紝鍙皟鐢?ConnectionRequest 浜嬩歡鍐呯殑 Accept 鏂規硶銆?br />
寤虹珛榪炴帴鍚庯紝浠諱綍涓鏂硅綆楁満閮藉彲浠ユ敹鍙戞暟鎹備負浜嗗彂閫佹暟鎹紝鍙皟鐢?SendData 鏂規硶銆傚綋鎺ユ敹鏁版嵁鏃朵細鍙戠敓 DataArrival 浜嬩歡銆傝皟鐢?DataArrival 浜嬩歡鍐呯殑 GetData 鏂規硶灝卞彲鑾峰彇鏁版嵁銆?br />
UDP 鍩虹
鐢ㄦ埛鏁版嵁鏂囨姤鍗忚 (UDP) 鏄竴涓棤榪炴帴鍗忚銆傝窡 TCP 鐨勬搷浣滀笉鍚岋紝璁$畻鏈哄茍涓嶅緩绔嬭繛鎺ャ傚彟澶?UDP 搴旂敤紼嬪簭鍙互鏄鎴鋒満錛屼篃鍙互鏄湇鍔″櫒銆?br />
涓轟簡浼犺緭鏁版嵁錛岄鍏堣璁劇疆瀹㈡埛璁$畻鏈虹殑 LocalPort 灞炴с傜劧鍚庯紝鏈嶅姟鍣ㄨ綆楁満鍙渶灝?RemoteHost 璁劇疆涓哄鎴瘋綆楁満鐨?Internet 鍦板潃錛屽茍灝?RemotePort 灞炴ц緗負璺熷鎴瘋綆楁満鐨?LocalPort 灞炴х浉鍚岀殑绔彛錛屽茍璋冪敤 SendData 鏂規硶鏉ョ潃鎵嬪彂閫佷俊鎭備簬鏄紝瀹㈡埛璁$畻鏈轟嬌鐢?DataArrival 浜嬩歡鍐呯殑 GetData 鏂規硶鏉ヨ幏鍙栧凡鍙戦佺殑淇℃伅銆?/font>
]]>
Sockets鏄湪Unix緋葷粺涓婃彁鍑烘潵鐨勶紝涓寮濮嬩富瑕佹槸鐢ㄤ簬鏈湴閫氳錛屼絾寰堝揩灝卞簲鐢ㄥ埌C/S浣撶郴涓娿侻icroSoft鍏徃鍦ㄦ鍩虹涓婂垱寤轟簡 WinSock鎺т歡錛屼笓闂ㄧ敤浜嶹indows鎺ュ彛錛屼笌Sockets瀹屽叏鍏煎銆俉insock鎺т歡瀵圭敤鎴鋒潵璇存槸涓嶅彲瑙佺殑錛屽畠鎻愪緵浜嗚闂?TCP 鍜?UDP 緗戠粶鏈嶅姟鐨勬柟渚塊斿緞銆侻icrosoft Access銆乂isual Basic銆乂isual C++ 鎴?Visual FoxPro 鐨勫紑鍙戜漢鍛橀兘鍙嬌鐢ㄥ畠銆備負緙栧啓瀹㈡埛鎴栨湇鍔″櫒搴旂敤紼嬪簭錛屼笉蹇呬簡瑙?TCP 鐨勭粏鑺傛垨璋冪敤浣庣駭鐨?Winsock APIs銆傞氳繃璁劇疆鎺т歡鐨勫睘鎬у茍璋冪敤鍏舵柟娉曞氨鍙交鏄撹繛鎺ュ埌涓鍙拌繙紼嬫満鍣ㄤ笂鍘伙紝騫朵笖榪樺彲鍙屽悜浜ゆ崲鏁版嵁銆備笅闈㈠氨鍒╃敤VB5涓殑WinSock鎺т歡緙栧啓涓涓綉涓?鑱婂ぉ紼嬪簭銆?
涓錛夌綉緇滈氫俊鍗忚鐨勫熀紜鍜岄夋嫨
1錛? TCP錛堟暟鎹紶杈撳崗璁級鍩虹
鏁版嵁浼犺緭鍗忚鍏佽鍒涘緩鍜岀淮鎶や笌榪滅▼璁$畻鏈虹殑榪炴帴銆傝繛鎺ヤ袱鍙拌綆楁満灝卞彲褰兼榪涜鏁版嵁浼犺緭銆?
濡傛灉鍒涘緩瀹㈡埛搴旂敤紼嬪簭錛屽氨蹇呴』鐭ラ亾鏈嶅姟鍣ㄨ綆楁満鍚嶆垨鑰?IP 鍦板潃錛圧emoteHost 灞炴э級錛岃繕瑕佺煡閬撹繘琛?#8220;渚﹀惉”鐨勭鍙o紙RemotePort 灞炴э級錛岀劧鍚庤皟鐢?Connect 鏂規硶銆?
濡傛灉鍒涘緩鏈嶅姟鍣ㄥ簲鐢ㄧ▼搴忥紝灝卞簲璁劇疆涓涓敹鍚鍙o紙LocalPort 灞炴э級騫惰皟鐢?Listen 鏂規硶銆傚綋瀹㈡埛璁$畻鏈洪渶瑕佽繛鎺ユ椂灝變細鍙戠敓 ConnectionRequest 浜嬩歡銆備負浜嗗畬鎴愯繛鎺ワ紝鍙皟鐢?ConnectionRequest 浜嬩歡鍐呯殑 Accept 鏂規硶銆?
寤虹珛榪炴帴鍚庯紝浠諱綍涓鏂硅綆楁満閮藉彲浠ユ敹鍙戞暟鎹備負浜嗗彂閫佹暟鎹紝鍙皟鐢?SendData 鏂規硶銆傚綋鎺ユ敹鏁版嵁鏃朵細鍙戠敓 DataArrival 浜嬩歡銆傝皟鐢?DataArrival 浜嬩歡鍐呯殑 GetData 鏂規硶灝卞彲鑾峰彇鏁版嵁銆?
1錛? UDP錛堢敤鎴鋒暟鎹枃鎶ュ崗璁級鍩虹
鐢ㄦ埛鏁版嵁鏂囨姤鍗忚 (UDP) 鏄竴涓棤榪炴帴鍗忚銆傝窡 TCP 鐨勬搷浣滀笉鍚岋紝璁$畻鏈哄茍涓嶅緩绔嬭繛鎺ャ傚彟澶?UDP 搴旂敤紼嬪簭鍙互鏄鎴鋒満錛屼篃鍙互鏄湇鍔″櫒銆?
涓轟簡浼犺緭鏁版嵁錛岄鍏堣璁劇疆瀹㈡埛璁$畻鏈虹殑 LocalPort 灞炴с傜劧鍚庯紝鏈嶅姟鍣ㄨ綆楁満鍙渶灝?RemoteHost 璁劇疆涓哄鎴瘋綆楁満鐨?Internet 鍦板潃錛屽茍灝?RemotePort 灞炴ц緗負璺熷鎴瘋綆楁満鐨?LocalPort 灞炴х浉鍚岀殑绔彛錛屽茍璋冪敤 SendData 鏂規硶鏉ョ潃鎵嬪彂閫佷俊鎭備簬鏄紝瀹㈡埛璁$畻鏈轟嬌鐢?DataArrival 浜嬩歡鍐呯殑 GetData 鏂規硶鏉ヨ幏鍙栧凡鍙戦佺殑淇℃伅銆?
1錛? 閫夋嫨閫氳鍗忚
鍦ㄤ嬌鐢?WinSock 鎺т歡鏃訛紝棣栧厛闇瑕佽冭檻浣跨敤浠涔堝崗璁傚彲浠ヤ嬌鐢ㄧ殑鍗忚鍖呮嫭 TCP 鍜?UDP銆備袱縐嶅崗璁箣闂寸殑閲嶈鍖哄埆鍦ㄤ簬瀹冧滑鐨勮繛鎺ョ姸鎬侊細
TCP 鍗忚鏄湁榪炴帴鐨勫崗璁紝鍙互灝嗗畠鍚岀數璇濈郴緇熺浉姣斻傚湪寮濮嬫暟鎹紶杈撲箣鍓嶏紝鐢ㄦ埛蹇呴』鍏堝緩绔嬭繛鎺ャ?
UDP 鍗忚鏄竴縐嶆棤榪炴帴鍗忚錛屼袱鍙拌綆楁満涔嬮棿鐨勪紶杈撶被浼間簬浼犻掗偖浠訛細娑堟伅浠庝竴鍙拌綆楁満鍙戦佸埌鍙︿竴鍙拌綆楁満錛屼絾鏄袱鑰呬箣闂存病鏈夋槑紜殑榪炴帴銆傚彟澶栵紝鍗曟浼犺緭鐨勬渶澶ф暟鎹噺鍙栧喅浜庡叿浣撶殑緗戠粶銆?
鍒板簳閫夋嫨鍝竴縐嶅崗璁氬父鏄敱闇瑕佸垱寤虹殑搴旂敤紼嬪簭鍐沖畾鐨勩備笅闈㈢殑鍑犱釜闂灝嗘湁鍔╀簬閫夋嫨閫傚疁鐨勫崗璁細
1. 鍦ㄦ敹鍙戞暟鎹殑鏃跺欙紝搴旂敤紼嬪簭鏄惁闇瑕佸緱鍒板鎴風鎴栬呮湇鍔″櫒鐨勭‘璁や俊鎭紵濡傛灉闇瑕侊紝浣跨敤 TCP 鍗忚錛屽湪鏀跺彂鏁版嵁涔嬪墠鍏堝緩绔嬫槑紜殑榪炴帴銆?
2. 鏁版嵁閲忔槸鍚︾壒鍒ぇ錛堜緥濡傚浘璞′笌澹伴煶鏂囦歡錛夛紵鍦ㄨ繛鎺ュ緩绔嬩箣鍚庯紝TCP 鍗忚灝嗙淮鎶よ繛鎺ュ茍紜繚鏁版嵁鐨勫畬鏁存с備笉榪囷紝榪欑榪炴帴闇瑕佹洿澶氱殑璁$畻璧勬簮錛屽洜鑰屾槸姣旇緝“鏄傝吹”鐨勩?
3. 鏁版嵁鍙戦佹槸闂存瓏鐨勶紝榪樻槸鍦ㄤ竴涓細璇濆唴錛熶緥濡傦紝濡傛灉搴旂敤紼嬪簭鍦ㄦ煇涓換鍔″畬鎴愮殑鏃跺欓渶瑕侀氱煡鏌愪釜璁$畻鏈猴紝UDP 鍗忚鏄洿閫傚疁鐨勩俇DP 鍗忚閫傚悎鍙戦佸皯閲忕殑鏁版嵁銆?
閫氳鍗忚鐨勯夋嫨鏄氳繃璁劇疆WinSock鐨凱rotocol灞炴ф潵瀹炵幇鐨勩備笅闈㈤夋嫨TCP閫氳鍗忚緙栧啓緗戜笂鑱婂ぉ紼嬪簭錛屽湪姝や箣鍓嶅繀欏葷煡閬撲竴涓瀬鍏墮噸瑕佺殑鍙傛暟---鏈嶅姟鍣ㄧ鐨処P鍦板潃鎴栬綆楁満鍚嶃?
浜岋級紜畾璁$畻鏈虹殑鍚嶅瓧
1. 鍦ㄨ綆楁満鐨勬闈笂錛屽彸閿崟鍑?#8220;緗戜笂閭誨眳”銆?
2. 閫夋嫨“灞炴?#8221;銆?
3. 鍗曞嚮“鏍囪瘑”閫夐」鍗°?
4. 鍦?#8220;璁$畻鏈哄悕縐?#8221;妗嗕腑鍙互鎵懼埌璁$畻鏈虹殑鍚嶇О銆?
紜畾璁$畻鏈虹殑 IP鍦板潃
1. 鍗曞嚮“浠誨姟鏉?#8221;涓婄殑“鍚姩”銆?
2. 閫夋嫨“榪愯”銆?
3. 鑻ユ湇鍔″櫒绔搷浣滅郴緇熶負win95鍒欏湪“鎵撳紑”涓~鍏?#8220;winipcfg”錛岃嫢鏈嶅姟鍣ㄧ鎿嶄綔緋葷粺涓簑innt鍒欏湪“鎵撳紑”涓~鍏?#8220;ipconfig”銆?
4. 鎸変笅“紜畾”閿?
涓婇潰鎵懼埌鐨勮綆楁満鍚嶇О鎴朓P鍦板潃鍙互浣滀負WinSock鐨凴emoteHost 灞炴х殑鍊箋?
涓夛級 winsock鎺т歡鐨凷tate灞炴с?
state 灞炴х殑璁劇疆鍊兼槸錛?甯?鏁?
鍊?鎻?榪?
sckclosed 0 緙虹渷鐨勩傚叧闂?
sckopen 1 鎵撳紑
scklistening 2 渚﹀惉
sckconnectionpending 3 榪炴帴鎸傝搗
sckresolvinghost 4 璇嗗埆涓繪満
sckhostresolved 5 宸茶瘑鍒富鏈?
sckconnecting 6 姝e湪榪炴帴
sckconnected 7 宸茶繛鎺?
sckclosing 8 鍚岀駭浜哄憳姝e湪鍏抽棴榪炴帴
sckerror 9 閿欒
涓嬮潰涓昏瑕佺敤鍒皊ckClosed.sckConnected涓や釜State灞炴х殑鍊箋?
鍥涳級緗戜笂鑱婂ぉ紼嬪簭鐨勭紪鍒?
4錛? 紼嬪簭涓湇鍔″櫒绔墍璧風殑浣滅敤銆?
浠庡浘紺轟腑鍙互鐪嬪埌鏈嶅姟鍣ㄧ鐨勪袱涓獁insock鎺т歡涔嬮棿騫朵笉瀛樺湪鐩存帴鐨勯氳錛屽悓鏃秙ckServer1鍜宻ckClient2鍙?sckServer2鍜宻ckClient1涔嬮棿鏄笉鑳界洿鎺ラ氳鐨勩傝繖涔熷嵆鏄鑻ckClient1鍚憇ckClient2鍙戝嚭淇℃伅錛屼俊鎭鍏堣 sckServer1鎺ュ彈錛宻ckServer1鍐嶅皢淇℃伅浼犵粰紼嬪簭鐨勪俊鎭鐞嗛儴鍒嗭紝淇℃伅澶勭悊閮ㄥ垎鍐嶅皢澶勭悊濂界殑淇℃伅浼犵粰sckServer2錛屽啀鐢?sckServer2浼犵粰sckClient2銆傚弽涔嬩害鐒躲傞偅涔堟湇鍔″櫒绔殑淇℃伅澶勭悊閮ㄥ垎鍙堣繘琛屼粈涔堝伐浣滃憿錛?
1. 瀵歸氳鐨勯氶亾鏁頒綔涓浜涢檺鍒躲?
2. 瀵逛嬌鐢ㄥ悗宸插叧闂殑閫氶亾錛屽繀欏昏兘澶熼噸鏂頒嬌鐢ㄤ互鑺傜渷璧勬簮銆?
3. 蹇呴』瀵規墍浼犻掔殑鏁版嵁鍖呬俊鎭綔鐢戝埆錛屼粠鑰屼綔鍑轟笉鍚岀殑澶勭悊銆?
閫氳繃瑙e紑鏁版嵁鐨勫寘澶村氨鍙尯鍒嗕笉鍚岀殑淇℃伅銆?
緗戜笂鑱婂ぉ鏈変袱縐嶆柟寮忥細絎竴縐嶏紝浠ュ箍鎾柟寮忥紱絎簩縐嶏紝浠ョ偣瀵圭偣鐨勬柟寮忋傚箍鎾柟寮忓嵆鎵鏈夊鎴烽兘鑳芥敹鍒版煇涓瀹㈡埛鍙戝嚭鐨勪俊鎭傜偣瀵圭偣鐨勬柟寮忓嵆鎯寵“鎮勬倓璇?”鐨勪竴瀵瑰鎴蜂笓闂ㄥ紑杈熶簡涓闂磋皥璇濈殑“灝忓眿”錛屽埆鐨勫鎴蜂笉鑳?#8220;鍚?#8221;鍒頒粬浠殑璋堣瘽銆傚湪涓嬮潰鐨勭▼搴忎腑灝嗙湅鍒板浣曞埄鐢ㄦ暟鎹殑涓嶅悓鍖呭ご鏉ュ尯鍒嗙敤鎴鋒槸鎯充互騫挎挱鏂瑰紡榪樻槸 浠ョ偣瀵圭偣鐨勬柟寮忚繘琛岃皥璇濈殑錛堢偣瀵圭偣鏂瑰紡鏁版嵁鐨勫寘澶翠負“PT”,騫挎挱鏂瑰紡鍒欐棤鍖呭ご錛夈?
4錛? 瀹㈡埛绔殑紼嬪簭
1. 鍦ㄥ鎴風鍒涘緩涓涓柊鐨勫伐紼嬪皢鍏跺懡鍚嶄負“ClientPrj”
2. 灝嗙己鐪佺獥浣撳懡鍚嶄負 frmClient銆?
3. 灝嗙獥浣撶殑鏍囬鏀逛負“Client”銆?
4. 鍦ㄧ獥浣撲腑娣誨姞涓涓?WinSock 鎺т歡錛屽茍灝嗗叾鍛藉悕涓?tcpClient銆?
5. 鍦?frmClient 涓坊鍔犱竴涓狶istBox 鎺т歡銆傚皢鍏跺懡鍚嶄負lstReceive銆?
6. 鍦?frmClient 涓坊鍔犱竴涓?TextBox 鎺т歡銆傚皢鍏跺懡鍚嶄負 txtSend銆?
7. 鍦ㄧ獥浣撲笂鏀句袱涓?CommandButton 鎺т歡錛屽茍灝嗗叾鍛藉悕涓?cmdConnect鍜宑mdSent銆?
8. 灝哻mdConnect鎺т歡鐨勬爣棰樻敼涓?Connect, 灝哻mdSent鎺т歡鐨勬爣棰樻敼涓?Sent銆?
9. 鍦ㄧ獥浣撲腑娣誨姞濡備笅鐨勪唬鐮併?
Private Sub cmdConnect_Click()
On Error GoTo ErrorPro
sckClient.Connect
Exit Sub
ErrorPro:
MsgBox "鏈嶅姟鍣ㄦ湭寮鎴栫綉緇滃嚭閿欙紒"
End
End Sub
Private Sub cmdSent_Click()
sckClient.SendData txtSent.Text
End Sub
Private Sub Form_Load()
' RemoteComputerName涓烘湇鍔″櫒绔殑璁$畻鏈哄悕鎴朓P鍦板潃銆?
sckClient.RemoteHost = "RemoteComputerName"
sckClient.RemotePort = 1000
End Sub
Private Sub sckClient_Close()
MsgBox "鏈嶅姟鍣ㄩ氶亾宸插叧闂紒"
End
End Sub
Private Sub sckClient_Connect()
MsgBox "榪炴帴鎴愬姛錛?
cmdConnect.Enabled = False
End Sub
Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)
Dim s As String
sckClient.GetData s
lstReceive.AddItem s
End Sub
Private Sub sckClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, _ ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
sckClient.Close
cmdConnect.Enabled = True
End Sub
4錛? 鏈嶅姟鍣ㄧ鐨勭▼搴?
1. 鍦ㄦ湇鍔″櫒绔垱寤轟竴涓柊鐨勫伐紼嬪皢鍏跺懡鍚嶄負“ServerPrj”銆?
2. 灝嗙己鐪佺獥浣撳懡鍚嶄負“frmServer”銆?
3. 鍦ㄧ獥浣撲腑娣誨姞涓涓狶istBox鎺т歡錛屽皢鍏跺懡鍚嶄負“lstReceive”銆?
4. 鍦ㄧ獥浣撲腑娣誨姞涓変釜WinSock鎺т歡錛屽皢鍏跺垎鍒懡鍚嶄負“sckListen”錛宻ckBusy鍜?#8220;sckServer”騫跺皢“sckServer”鐨?#8220;Index”灞炴ц緗負0銆?
5. 鍦ㄧ獥浣撲腑娣誨姞濡備笅浠g爜.銆?
'鏈澶ч氶亾鏁?
Private MaxChan As Integer
Private Sub Form_Load()
Dim i As Integer
MaxChan = 10
For i = 1 To MaxChan - 1
Load sckServer(i)
Next i
sckListen.LocalPort = 1000
sckListen.Listen
End Sub
Private Sub sckBusy_Close()
sckBusy.Close
End Sub
Private Sub sckBusy_DataArrival(ByVal bytesTotal As Long)
sckBusy.SendData "鏈嶅姟鍣ㄥ繖錛岃紼嶅悗鍐嶈繛鎺ワ紒"
DoEvents
End Sub
Private Sub sckListen_ConnectionRequest(ByVal requestID As Long)
Dim i As Integer
'鍐沖畾鐢卞摢涓Winsock鎺ュ彈璇鋒眰
For i = 0 To MaxChan - 1
If sckServer(i).State = 0 Then
Exit For
End If
Next i
If sckServer(i).State = 0 Then
sckServer(i).Accept requestID
Exit Sub
End If
'濡傛灉鎵鏈塛insock閮界敤瀹屽垯鐢變笓闂ㄧ殑“蹇?#8221;Winsock鎺ュ彈璇鋒眰錛屼互鍏嶇敤鎴瘋姹傚緱涓嶅埌鍝嶅簲
sckBusy.Close
sckBusy.Accept requestID
End Sub
Private Sub sckListen_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, _ ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
sckListen.Close
sckListen.LocalPort = 1000
sckListen.Listen
End Sub
Private Sub sckServer_Close(Index As Integer)
sckServer(Index).Close
End Sub
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim s As String
Dim i As Integer
sckServer(Index).GetData s
If UCase(Left(Trim(s), 2)) = "PT" Then '鍒ゆ柇鏄惁涓烘倓鎮勮瘽錛岀偣瀵圭偣鏂瑰紡
If IsNumeric(Mid(Trim(s), 3, 1)) Then
i = Mid(Trim(s), 3, 1)
sckServer(i).SendData "Channel " & Index & " " & Right(Trim(s), Len(Trim(s)) - 3)
DoEvents
End If
Else '騫挎挱鏂瑰紡
For i = 0 To MaxChan - 1
'鍒╃敤winsock鐨凷tate灞炴х粰鎵鏈夎繛鎺ュ湪鏈嶅姟鍣ㄤ笂鐨勫鎴峰彂娑堟伅
If sckServer(i).State = 7 Then
sckServer(i).SendData "Channel " & Index & " " & Trim(s)
DoEvents
End If
Next i
End If
lstReceive.AddItem "Channel " & Index & " " & Trim(s)
End Sub
Private Sub sckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As _
Long, CancelDisplay As Boolean)
sckServer(Index).Close
End Sub
浠庣▼搴忎腑鍙互鐪嬪埌錛氱涓錛岀▼搴忎腑闄愬埗浜嗛氶亾鏁幫紙10璺級銆傜浜岋紝閫氳繃鍒ゆ柇WinSock鎺т歡鐨凷tate灞炴ф槸鍚︿負0錛堝叧闂姸鎬侊級錛屾潵閲嶆柊浣跨敤宸?鍏抽棴鐨刉inSock鎺т歡銆傜涓夛紝閫氳繃緇橶inSock鎺т歡浼犻掔殑淇℃伅鍔犱笂鍖呭ご錛屾潵瀵逛俊鎭繘琛屼笉鍚岀殑澶勭悊錛堢▼搴忎腑鑻ヤ俊鎭墠鍔犱笂浜?#8220;PT"錛圥rivate Talk錛?"閫氶亾鏁?#8221;鐨勫寘澶達紝鐢辨灝辯煡閬撳鎴鋒兂瑕佸悓鎷ユ湁姝?#8220;閫氶亾鏁?#8221;鐨勫彟涓瀹㈡埛榪涜“鎮勬倓璇?#8221;錛屽惁鍒欏氨浠ュ箍鎾柟寮忓皢淇℃伅鍙戠粰鎵鏈夊鎴鳳級銆?
浜旓級 緇撴潫璇?
WinSock鎺т歡涓嶄粎浠呮槸鐢ㄦ潵緙栧埗緗戜笂鑱婂ぉ紼嬪簭錛岃屼笖鍙互鐢ㄦ潵緙栧埗鍚勭緗戠粶娓告垙鎴栫綉緇滈氫俊紼嬪簭銆傚疄闄呬笂WinSock鎺т歡鏄紪鍒跺悇縐岰/S紼嬪簭 鐨勫埄鍣ㄣ傚湪瀹為檯浣跨敤涓氬父鏄皢WinSock鎺т歡灝佽鍦ˋctivex DLL錛堣繘紼嬪唴錛夈丄ctivex EXE錛堣繘紼嬪錛夐儴浠剁殑綾諱腑錛堢被涓紩鐢級鏉ヤ嬌鐢ㄧ殑銆傞氳繃鍖哄垎鎵浼犱俊鎭墠鐨勪笉鍚岀殑鍖呭ご錛岀敤RaiseEvent鍛戒護寮曞彂涓嶅悓 鐨勪簨浠訛紝鍐嶅浜嬩歡鍒嗗埆榪涜澶勭悊銆傝繖鏍蜂笉浠呭鍔犱簡紼嬪簭鐨勫彲璋冭瘯鎬у拰瀹夊叏鎬э紝鑰屼笖鏇寸鍚堜簨浠墮┍鍔ㄧ紪紼嬫柟娉曠殑鐗圭偣銆?/font>
]]>
涓嬮潰鏄疻insock鎺т歡鐨勭浉鍏沖睘鎬э紝鏂規硶鍜屼簨浠躲?鐣ュ幓涓浜涙殏鐢ㄤ笉鍒扮殑)
*灞炴?
-------------------------------------------------------------------------
LocalHostName | 鏈湴鏈哄櫒鍚?
LocalIP | 鏈湴鏈哄櫒IP鍦板潃
LocalPort | 鏈湴鏈哄櫒閫氫俊紼嬪簭鐨勭鍙?0 <绔彛 <65536)
RemoteHost | 榪滅▼鏈哄櫒鍚?
RemotePort | 榪滅▼鏈哄櫒鐨勯氫俊紼嬪簭绔彛
state | 榪炴帴鐨勫綋鍓嶇姸鎬?鏂囧悗鏈夎緇嗚鏄?
Protocal | 浣跨敤TCP鎴朥DP鍗忚(榪欓噷鎴戜滑閫?#8216;0-sckTCPProtocal’)
--------------------------------------------------------------------------
*鏂規硶
--------------------------------------------------------------------------
Listen
Listen鏂規硶鐢ㄤ簬鏈嶅姟鍣ㄧ▼搴忥紝絳夊緟瀹㈡埛璁塊棶銆?
鏍煎紡錛歐insock瀵硅薄.listen
Connect
Connect鏂規硶鐢ㄤ簬鍚戣繙紼嬩富鏈哄彂鍑鴻繛鎺ヨ姹?
鏍煎紡錛歐insock瀵硅薄.connect [榪滅▼涓繪満IP,榪滅▼绔彛]
Accept
Accept鏂規硶鐢ㄤ簬鎺ュ彈涓涓繛鎺ヨ姹?
鏍煎紡錛歐insock瀵硅薄.accept Request ID
Senddata
姝ゆ柟娉曠敤浜庡彂閫佹暟鎹?
鏍煎紡錛歐insock瀵硅薄.senddata 鏁版嵁
Getdata
鐢ㄦ潵鍙栧緱鎺ユ敹鍒扮殑鏁版嵁
鏍煎紡錛歐insock瀵硅薄.getdata 鍙橀噺 [,鏁版嵁綾誨瀷 [,鏈澶ч暱搴]
Close
鍏抽棴褰撳墠榪炴帴
鏍煎紡錛歐insock瀵硅薄.close
*浜嬩歡
----------------------------------------------------------------------------
Close | 榪滅▼鏈哄櫒鍏抽棴榪炴帴鏃惰Е鍙?
Connect | 榪炴帴寤虹珛濂斤紝鍙互榪涜閫氫俊鏃惰Е鍙?瀹㈡埛绔?
ConnectRequest | 鏈夎姹傝繛鎺ュ埌杈炬椂浜х敓(鏈嶅姟鍣ㄧ)
DataArrival | 鏈夋暟鎹埌杈炬椂瑙﹀彂
Error | 鍙戠敓閿欒鏃跺彂鐢?
SendProgress | 鏁版嵁浼犻佽繘搴?
-----------------------------------------------------------------------------
鏈嶅姟鍣ㄧ▼搴忕殑瀹炵幇榪囩▼鏄細
錛?錛夋湇鍔″櫒紼嬪簭蹇呴』璁劇疆濂絃ocalPort灞炴э紝浣滀負渚﹀惉绔彛錛岃鍊間負涓涓暣鏁幫紙鍙鏄竴涓叾瀹僒CP/IP搴旂敤紼嬪簭娌℃湁浣跨敤榪囩殑鍊煎嵆鍙級銆?
錛?錛変嬌鐢↙isten鏂規硶榪涘叆渚﹀惉鐘舵侊紝絳夊緟瀹㈡埛鏈虹▼搴忕殑榪炴帴璇鋒眰銆?
錛?錛夊鎴鋒満紼嬪簭鍙戝嚭榪炴帴璇鋒眰錛屼嬌鏈嶅姟鍣ㄧ▼搴忎駭鐢烠onnectionRequest浜嬩歡錛岃浜嬩歡寰楀埌涓涓弬鏁皉equestID銆?
錛?錛夋湇鍔″櫒紼嬪簭鐢ˋccept鏂規硶鎺ュ彈瀹㈡埛鏈虹▼搴忕殑requestID璇鋒眰銆傝繖鏍鳳紝鏈嶅姟鍣ㄧ▼搴忓氨鍙互鐢⊿endData鏂規硶鍙戦佹暟鎹簡銆侫ccept鏂規硶蹇呴』鐢ㄤ笂涓姝ュ緱鍒扮殑requestID浣滀負鍏跺弬鏁般?
錛?錛夊綋鏈嶅姟鍣ㄧ▼搴忔帴鏀跺埌鏁版嵁鏃訛紝浜х敓DataArrival浜嬩歡錛屽弬鏁癇ytesTotal鍖呭惈鎺ユ敹鍒扮殑鏁版嵁瀛楄妭鏁般傚湪璇ヤ簨浠朵腑錛屽彲浠ョ敤GetData鏂規硶鎺ユ敹鏁版嵁銆?
錛?錛夊鏋滄帴鍙楀埌Close浜嬩歡錛屽垯鐢–lose鏂規硶鍏抽棴TCP/IP榪炴帴銆?
瀹㈡埛鏈虹▼搴忕殑瀹炵幇榪囩▼鏄細
錛?錛?瀹㈡埛紼嬪簭璁劇疆Remotehost灞炴э紝浠ヤ究鎸囧畾榪愯鏈嶅姟鍣ㄧ▼搴忕殑涓繪満 鍚嶏紝璇ュ瓧絎︿覆鍙湪“鎺у埗闈㈡澘|緗戠粶|鏍囪瘑|璁$畻鏈哄悕”涓煡鍒般?
錛?錛?璁劇疆RemotePort灞炴?浠ヤ究鎸囧畾鏈嶅姟鍣ㄧ▼搴忕殑渚﹀惉绔彛銆?
錛?錛変嬌鐢–onnect鏂規硶錛屽悜鏈嶅姟鍣ㄦ彁鍑鴻繛鎺ヨ姹傘?
錛?錛夋湇鍔″櫒鎺ュ彈瀹㈡埛鏈虹▼搴忕殑璇鋒眰錛屽鎴鋒満紼嬪簭浜х敓Connect浜嬩歡錛屽氨鍙互鐢⊿endData鏂規硶鍙戦佹暟鎹簡銆?
錛?錛夊綋瀹㈡埛鏈虹▼搴忔帴鏀跺埌鏁版嵁鏃訛紝浜х敓DataArrival浜嬩歡錛屽弬鏁癇ytesTotal鍖呭惈鎺ユ敹鍒扮殑鏁版嵁瀛楄妭鏁般傚湪璇ヤ簨浠朵腑錛屽彲浠ョ敤GetData鏂規硶鎺ユ敹鏁版嵁銆?
錛?錛夊鏋滄帴鍙楀埌Close浜嬩歡錛屽垯鐢–lose鏂規硶鍏抽棴榪炴帴銆?
Winsock鎺т歡榪樻湁涓や釜閲嶈鐨勫睘鎬э紝鍗砅rotocol鍜孲tate銆侾rotocol璁懼畾浣跨敤鐨勫崗璁槸TCP榪樻槸UDP錛氬彇鍊?sckTCPProtocol琛ㄧずTCP, 鍙栧約ckUDPProtocol鍒欒〃紺篣DP銆傚洜涓篧insock鎺т歡鐨勭己鐪佽緗槸sckTCPProtocol錛屾墍浠ョ▼搴忎腑騫舵病鏈変嬌鐢?Protocol灞炴с係tate灞炴у弽鏄犵殑鏄綋鍓峊CP/IP鐨勮繛鎺ョ姸鎬侊紝鍙栧煎琛?鎵紺恒?
琛? Winsock鎺т歡鐨凷tate灞炴у強鍏舵弿榪?
甯告暟 鍊?鎻忚堪
SckClosed 0 緙虹渷鍊鹼紝鍏抽棴
SckOpen 1 鎵撳紑
SckListening 2 渚﹀惉
SckConnectionPending 3 榪炴帴鎸傝搗
SckResolvingHost 4 璇嗗埆涓繪満
SckHostResolved 5 宸茶瘑鍒富鏈?
SckConnecting 6 姝e湪榪炴帴
SckConnected 7 宸茶繛鎺?
SckClosing 8 鍚岀駭浜哄憳姝e湪鍏抽棴榪炴帴
SckError 9 閿欒
鍏堝湪涓鍙拌綆楁満涓婅繍琛屾湇鍔″櫒紼嬪簭錛屾鏃剁獥鍙d笂鍙湁涓涓?#8220;閫鍑?#8221;鎸夐挳銆?鍐嶅湪鍙︿竴鍙拌綆楁満涓婅繍琛屽鎴鋒満紼嬪簭錛屽湪“榪炴帴”鎸夐挳鍙寵竟鐨勬枃鏈涓緭鍏ユ湇鍔″櫒鐨勪富鏈哄悕鍚庡崟鍑?#8220;榪炴帴”鎸夐挳銆傚鏋滆繛鎺ユ垚鍔燂紝鍒欐湇鍔″櫒鍜屽鎴鋒満紼嬪簭紿楀彛閮戒細鍑?鐜頒袱涓枃鏈銆傝繖鏃訛紝涓ょ閮藉彲浠ュ湪涓婇潰鐨勬枃鏈涓緭鍏ユ枃瀛楋紝榪欎簺鏂囧瓧浼氱珛鍗沖湪涓嬮潰鐨勬枃鏈涓嚭鐜般?
鏈嶅姟鍣ㄧ▼搴忎嬌鐢ㄧ殑鎺т歡濡備笅錛?
錛?錛塁ommand1錛氶鍑烘寜閽紱
錛?錛塼extsend錛氬彂閫佹暟鎹枃鏈錛?
錛?錛塛insockserver錛?鏈嶅姟鍣╓insock錛?
錛?錛塼extget 錛氭帴鏀舵暟鎹枃鏈銆?
鏈嶅姟鍣ㄧ▼搴忕殑鐣岄潰濡傚浘鎵紺恒?
鏈嶅姟鍣ㄧ▼搴忕殑婧愪唬鐮佸涓嬶細
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
textsend.Visible = False
textget.Visible = False
Winsockserver.LocalPort = 1001
Winsockserver.Listen
End Sub
Private Sub textsend_Change()
Winsockserver.SendData textsend.Text
End Sub
Private Sub Winsockserver_Close()
Winsockserver.Close
End
End Sub
Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
textsend.Visible = True
textget.Visible = True
If Winsockserver.State <> sckClosed Then Winsockserver.Close
Winsockserver.Accept requestID
End Sub
Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String
Winsockserver.GetData tmpstr
textget.Text = tmpstr
End Sub
瀹㈡埛鏈虹▼搴忎嬌鐢ㄧ殑鎺т歡濡備笅錛?
錛?錛塁ommand1錛氶鍑烘寜閽紱
錛?錛塁ommand2錛氳繛鎺ユ寜閽紱
錛?錛塛insockclient錛氬鎴稺insock錛?
錛?錛塗ext1錛氫富鏈哄悕鏂囨湰妗嗭紱
錛?錛塗extsend錛氬彂閫佹暟鎹枃鏈錛?
錛?錛塗extget錛氭帴鏀舵暟鎹枃鏈錛?銆銆
瀹㈡埛鏈虹▼搴忕殑婧愪唬鐮佸涓嬶細
Private Sub Command1_Click()
End
End Sub
Private Sub Command2_Click()
Winsockclient.Connect
End Sub
Private Sub Form_Load()
textsend.Visible = False
textget.Visible = False
Winsockclient.RemotePort = 1001
Winsockclient.RemoteHost = "sccdsz"
End Sub
Private Sub Text1_Change()
Winsockclient.RemoteHost = Text1.Text
End Sub
Private Sub textsend_Change()
Winsockclient.SendData textsend.Text
End Sub
Private Sub Winsockclient_Close()
Winsockclient.Close
End
End Sub
Private Sub winsockclient_Connect()
textsend.Visible = True
textget.Visible = True
Command2.Visible = False
End Sub
Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String
Winsockclient.GetData tmpstr
textget.Text = tmpstr
End Sub
鎴戣瘯榪囦簡錛屽彲浠ョ敤
Private Sub Workbook_Open()
Dim cbr As CommandBar
Dim ctrMenu As CommandBarControl
Dim ctr As CommandBarControl
Set cbr = Application.CommandBars("Worksheet Menu Bar")
For Each ctr In cbr.Controls
If ctr.Caption = "custom" Then
Exit Sub
End If
Next
Set ctlMenu = cbr.Controls.Add(Type:=msoControlPopup)
With ctlMenu
.Caption = "custom"
With .Controls.Add(Type:=msoControlButton)
.Caption = "aa"
.OnAction = "action1"
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = "bb"
.OnAction = "action2"
End With
End With
End Sub
涓轟粈涔堣鑰冭檻鍒拌繖涓棶棰樺憿錛?/p>
鐢變簬鍘嗗彶鐨勫師鍥狅紝瀹㈡埛浠ュ墠鐨勬暟鎹緢澶氶兘鏄湪瀛樺叆鍦ㄦ枃鏈暟鎹簱涓紝濡侫cess銆丒xcel銆丗oxpro銆傜幇鍦ㄧ郴緇熷崌綰у強鏁版嵁搴撴湇鍔″櫒濡係QLServer銆丱RACLE鍚庯紝緇忓父闇瑕佽闂枃鏈暟鎹簱涓殑鏁版嵁錛屾墍浠ュ氨浼氫駭鐢熻繖鏍風殑闇姹傘傚墠孌墊椂闂村嚭宸殑欏圭洰錛屽氨鏄潰涓磋繖鏍風殑涓涓棶棰橈細SQLServer鍜孷FP涔嬮棿鐨勬暟鎹氦鎹€?/p>
瑕佸畬鎴愭爣棰樼殑闇瑕侊紝鍦⊿QLServer涓槸涓浠墮潪甯哥畝鍗曠殑浜嬫儏銆?/p>
閫氬父鐨勫彲浠ユ湁3縐嶆柟寮忥細1銆丏TS宸ュ叿 2銆丅CP 3銆佸垎甯冨紡鏌ヨ
DTS灝變笉闇瑕佽浜嗭紝鍥犱負閭f槸鍥懼艦鍖栨搷浣滅晫闈紝寰堝鏄撲笂鎵嬨?/p>
榪欓噷涓昏璁蹭笅鍚庨潰涓や滑錛屽垎鍒互鏌ャ佸銆佸垹銆佹敼浣滀負綆鍗曠殑渚嬪瓙錛?/p>
涓嬮潰搴熻瘽灝變笉璇翠簡錛岀洿鎺ヤ互T-SQL鐨勫艦寮忚〃鐜板嚭鏉ャ?/p>
涓銆丼QLServer鍜孉ccess
1銆佹煡璇ccess涓暟鎹殑鏂規硶錛?/p>
select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
鎴?/p>
select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB2.mdb";User ID=Admin;Password=')...serv_user
2銆佷粠SQLServer鍚慉ccess鍐欐暟鎹細
insert into OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee琛?)
select * from SQLServer琛?br />
鎴栫敤BCP
master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'
涓婇潰鐨勫尯鍒富瑕佹槸錛歄penRowSet闇瑕乵db鍜岃〃瀛樺湪錛孊CP浼氬湪涓嶅瓨鍦ㄧ殑鏃跺欑敓鎴愯mdb
3銆佷粠Access鍚慡QLServer鍐欐暟鎹細鏈変簡涓婇潰鐨勫熀紜錛岃繖涓氨寰堢畝鍗曚簡
insert into SQLServer琛?select * from
OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee琛?)
鎴栫敤BCP
master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" in "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'
4銆佸垹闄ccess鏁版嵁錛?/p>
delete from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
where lock=0
5銆佷慨鏀笰ccess鏁版嵁錛?/p>
update OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
set lock=1
SQLServer鍜孉ccess澶ц嚧灝辮繖涔堝銆?/p>
浜屻丼QLServer鍜孍xcel
1銆佸悜Excel鏌ヨ
select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]') where c like '%f%'
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\book1.xls',[sheet1$])
1)hdr=yes鏃跺彲浠ユ妸xls鐨勭1琛屼綔涓哄瓧孌電湅寰咃紝濡傜1涓腑hdr=no鐨勮瘽錛寃here鏃跺氨浼氭姤閿?br /> 2)[]鍜岀編鍦?蹇呴』瑕侊紝鍚﹀垯M$鍙笉璁よ繖涓處
2銆佷慨鏀笶xecl
update OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet1$]')
set a='erquan' where c like '%f%'
3銆佸鍏ュ鍑?/p>
insert into OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet2$]')(id,name)
select id,name from serv_user
鎴朆CP
master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out "c:\book2.xls" -c -q -S"." -U"sa" -P"sa"'
浠嶦xcel鍚慡QLServer瀵煎叆錛?/p>
select * into serv_user_bak
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]')
濡傛灉琛╯erv_user_bak涓嶅瓨鍦紝鍒欏垱寤?/p>
鏈夊叧BCP鍜屽垎甯冨紡鏌ヨ鐨勮緇嗚В絳旓紝灝辨煡SQLServer鑷甫鐨勫府鍔╁惂銆?br /> SQLServer鍜宼xt鏂囦歡銆丠TML鏂囦歡銆乂FP鏂囦歡鐨勬暟鎹氦鎹㈤兘鏄懼緱闈炲父瀹規槗浜嗐傘傘傘?/p>
鍏跺疄榪欎簺鍐呭鍦ㄥ府鍔╅噷閮芥湁錛屽伓鍙笉榪囨槸鎬葷粨浜嗕竴涓嬶紝鏂逛究澶у鍙傝冿紝鍛靛懙~~
浠ヤ笂鍐呭閮界粡榪囨祴璇晘~