锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品在线观,欧美一级大片在线观看,欧美另类69精品久久久久9999http://www.shnenglu.com/tx7do/category/1513.html涓ヤ互寰嬪繁,瀹戒互寰呬漢. 涓夋濊屽悗琛?</br> GMail/GTalk: yanglinbo#google.com;</br> MSN/Email: tx7do#yahoo.com.cn;</br> QQ: 3 0 3 3 9 6 9 2 0 .zh-cnThu, 10 Jun 2010 17:03:12 GMTThu, 10 Jun 2010 17:03:12 GMT60 Linux Socket緙栫▼瀹炰緥(涓涓狧ello World紼嬪簭) http://www.shnenglu.com/tx7do/articles/5966.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:49:00 GMThttp://www.shnenglu.com/tx7do/articles/5966.htmlhttp://www.shnenglu.com/tx7do/comments/5966.htmlhttp://www.shnenglu.com/tx7do/articles/5966.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5966.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5966.html闃呰鍏ㄦ枃

]]>
Linux 涓婼ocket緙栫▼鍩虹 http://www.shnenglu.com/tx7do/articles/5962.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:40:00 GMThttp://www.shnenglu.com/tx7do/articles/5962.htmlhttp://www.shnenglu.com/tx7do/comments/5962.htmlhttp://www.shnenglu.com/tx7do/articles/5962.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5962.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5962.html 浣滆咃細 涓滃寳澶у縐︾殗宀涘垎鏍¤蔣浠朵腑蹇冩妧鏈爺鍙戦儴 鏁寕鍗?/td>
1銆?nbsp;寮曡█
Linux鐨勫叴璧峰彲浠ヨ鏄疘nternet鍒涢犵殑涓涓榪廣侺inux浣滀負涓涓畬鍏ㄥ紑鏀懼叾鍘熶唬鐮佺殑鍏嶈垂鐨勮嚜鐢辮蔣浠訛紝鍏煎浜嗗悇縐峌NIX鏍囧噯錛堝POSIX銆乁NIX System V 鍜?nbsp;BSD UNIX 絳夛級鐨勫鐢ㄦ埛銆佸浠誨姟鐨勫叿鏈夊鏉傚唴鏍哥殑鎿嶄綔緋葷粺銆傚湪涓浗錛岄殢鐫Internet鐨勬櫘鍙婏紝涓鎵逛富瑕佷互楂樼瓑闄㈡牎鐨勫鐢熷拰ISP鐨勬妧鏈漢鍛樼粍鎴愮殑Linux鐖卞ソ鑰呴槦浼嶅凡緇忚摤鍕冩垚闀胯搗鏉ャ傝秺鏉ヨ秺澶氱殑緙栫▼鐖卞ソ鑰呬篃閫愭笎閰風埍涓婅繖涓紭縐鐨勮嚜鐢辮蔣浠躲傛湰鏂囦粙緇嶄簡Linux涓婼ocket鐨勫熀鏈蹇靛拰鍑芥暟璋冪敤銆?br>
2銆?nbsp;浠涔堟槸Socket
Socket錛堝鎺ュ瓧錛夋槸閫氳繃鏍囧噯鐨刄NIX鏂囦歡鎻忚堪絎﹀拰鍏跺畠紼嬪簭閫氳鐨勪竴涓柟娉曘傛瘡涓涓鎺ュ瓧閮界敤涓涓崐鐩稿叧鎻忚堪錛歿鍗忚錛屾湰鍦板湴鍧銆佹湰鍦扮鍙鏉ヨ〃紺猴紱涓涓畬鏁寸殑濂楁帴瀛楀垯鐢ㄤ竴涓浉鍏蟲弿榪幫細{鍗忚錛屾湰鍦板湴鍧銆佹湰鍦扮鍙c佽繙紼嬪湴鍧銆佽繙紼嬬鍙錛屾瘡涓涓鎺ュ瓧閮芥湁涓涓湰鍦扮殑鐢辨搷浣滅郴緇熷垎閰嶇殑鍞竴鐨勫鎺ュ瓧鍙楓?br>
3銆?nbsp;Socket鐨勪笁縐嶇被鍨?br>錛?錛?nbsp;嫻佸紡Socket錛圫OCK_STREAM錛?br>嫻佸紡濂楁帴瀛楁彁渚涘彲闈犵殑銆侀潰鍚戣繛鎺ョ殑閫氫俊嫻侊紱瀹冧嬌鐢═CP鍗忚錛屼粠鑰屼繚璇佷簡鏁版嵁浼犺緭鐨勬紜у拰欏哄簭鐨勩?br>錛?錛?nbsp;鏁版嵁鎶ocket錛圫OCK_DGRAM錛?br>鏁版嵁鎶ュ鎺ュ瓧瀹氫箟浜嗕竴縐嶆棤榪炴帴鐨勬湇鍔★紝鏁版嵁閫氳繃鐩鎬簰鐙珛鐨勬姤鏂囪繘琛屼紶杈擄紝鏄棤搴忕殑錛屽茍涓斾笉淇濊瘉鍙潬銆佹棤宸敊銆傚畠浣跨敤鏁版嵁鎶ュ崗璁甎DP
錛?錛?nbsp;鍘熷Socket
鍘熷濂楁帴瀛楀厑璁稿搴曞眰鍗忚濡侷P鎴朓CMP鐩存帴璁塊棶錛屽畠鍔熻兘寮哄ぇ浣嗕嬌鐢ㄨ緝涓轟笉渚匡紝涓昏鐢ㄤ簬涓浜涘崗璁殑寮鍙戙?br>
4銆?nbsp;鍒╃敤濂楁帴瀛楀彂閫佹暟鎹?br>1銆?nbsp;瀵逛簬嫻佸紡濂楁帴瀛楃敤緋葷粺璋冪敤send錛堬級鏉ュ彂閫佹暟鎹?br>2銆?nbsp;瀵逛簬鏁版嵁鎶ュ鎺ュ瓧錛屽垯闇瑕佽嚜宸卞厛鍔犱竴涓俊鎭ご錛岀劧鍚庤皟鐢╯endto錛堬級鍑芥暟鎶婃暟鎹彂閫佸嚭鍘匯?br>
5銆?nbsp;Linux涓璖ocket鐨勬暟鎹粨鏋?br>錛?錛?nbsp;struct sockaddr { //鐢ㄤ簬瀛樺偍濂楁帴瀛楀湴鍧
unsigned short sa_family錛?/鍦板潃綾誨瀷
char sa_data[14]錛?nbsp;//14瀛楄妭鐨勫崗璁湴鍧
}錛?br>錛?錛?nbsp;struct sockaddr_in{ //in 浠h〃internet
short int sin_family錛?nbsp;//internet鍗忚鏃?br>unsigned short int sin_port錛?/绔彛鍙鳳紝蹇呴』鏄綉緇滃瓧鑺傞『搴?br>struct in_addr sin_addr錛?/internet鍦板潃錛屽繀欏繪槸緗戠粶瀛楄妭欏哄簭
unsigned char sin_zero錛?/娣?錛堝拰struct sockaddr涓鏍峰ぇ灝?br>}錛?br>錛?錛?nbsp;struct in_addr{
unsigned long s_addr錛?br>}錛?br>
6銆?nbsp;緗戠粶瀛楄妭欏哄簭鍙婂叾杞崲鍑芥暟
錛?錛?nbsp;緗戠粶瀛楄妭欏哄簭
姣忎竴鍙版満鍣ㄥ唴閮ㄥ鍙橀噺鐨勫瓧鑺傚瓨鍌ㄩ『搴忎笉鍚岋紝鑰岀綉緇滀紶杈撶殑鏁版嵁鏄竴瀹氳緇熶竴欏哄簭鐨勩傛墍浠ュ鍐呴儴瀛楄妭琛ㄧず欏哄簭涓庣綉緇滃瓧鑺傞『搴忎笉鍚岀殑鏈哄櫒錛屼竴瀹氳瀵規暟鎹繘琛岃漿鎹紝浠庣▼搴忕殑鍙Щ妞嶆ц姹傛潵璁詫紝灝辯畻鏈満鐨勫唴閮ㄥ瓧鑺傝〃紺洪『搴忎笌緗戠粶瀛楄妭欏哄簭鐩稿悓涔熷簲璇ュ湪浼犺緭鏁版嵁浠ュ墠鍏堣皟鐢ㄦ暟鎹漿鎹㈠嚱鏁幫紝浠ヤ究紼嬪簭縐繪鍒板叾瀹冩満鍣ㄤ笂鍚庤兘姝g‘鎵ц銆傜湡姝h漿鎹㈣繕鏄笉杞崲鏄敱緋葷粺鍑芥暟鑷繁鏉ュ喅瀹氱殑銆?br>錛?錛?nbsp;鏈夊叧鐨勮漿鎹㈠嚱鏁?br>* unsigned short int htons錛坲nsigned short int hostshort錛夛細
涓繪満瀛楄妭欏哄簭杞崲鎴愮綉緇滃瓧鑺傞『搴忥紝瀵規棤絎﹀彿鐭瀷榪涜鎿嶄綔4bytes
* unsigned long int htonl錛坲nsigned long int hostlong錛夛細
涓繪満瀛楄妭欏哄簭杞崲鎴愮綉緇滃瓧鑺傞『搴忥紝瀵規棤絎﹀彿闀垮瀷榪涜鎿嶄綔8bytes
* unsigned short int ntohs錛坲nsigned short int netshort錛夛細
緗戠粶瀛楄妭欏哄簭杞崲鎴愪富鏈哄瓧鑺傞『搴忥紝瀵規棤絎﹀彿鐭瀷榪涜鎿嶄綔4bytes
* unsigned long int ntohl錛坲nsigned long int netlong錛夛細
緗戠粶瀛楄妭欏哄簭杞崲鎴愪富鏈哄瓧鑺傞『搴忥紝瀵規棤絎﹀彿闀垮瀷榪涜鎿嶄綔8bytes
娉細浠ヤ笂鍑芥暟鍘熷瀷瀹氫箟鍦╪etinet/in.h閲?br>
7銆?nbsp;IP鍦板潃杞崲
鏈変笁涓嚱鏁板皢鏁板瓧鐐瑰艦寮忚〃紺虹殑瀛楃涓睮P鍦板潃涓?2浣嶇綉緇滃瓧鑺傞『搴忕殑浜岃繘鍒跺艦寮忕殑IP鍦板潃榪涜杞崲
錛?錛?nbsp;unsigned long int inet_addr(const char * cp)錛氳鍑芥暟鎶婁竴涓敤鏁板瓧鍜岀偣琛ㄧず鐨処P鍦板潃鐨勫瓧絎︿覆杞崲鎴愪竴涓棤絎﹀彿闀挎暣鍨嬶紝濡傦細struct sockaddr_in ina
ina.sin_addr.s_addr=inet_addr("202.206.17.101")
璇ュ嚱鏁版垚鍔熸椂錛氳繑鍥炶漿鎹㈢粨鏋滐紱澶辮觸鏃惰繑鍥炲父閲廔NADDR_NONE錛岃甯擱噺=-1錛屼簩榪涘埗鐨勬棤絎﹀彿鏁存暟-1鐩稿綋浜?55.255.255.255錛岃繖鏄竴涓箍鎾湴鍧錛屾墍浠ュ湪紼嬪簭涓皟鐢╥ner_addr錛堬級鏃訛紝涓瀹氳浜轟負鍦板璋冪敤澶辮觸榪涜澶勭悊銆傜敱浜庤鍑芥暟涓嶈兘澶勭悊騫挎挱鍦板潃錛屾墍浠ュ湪紼嬪簭涓簲璇ヤ嬌鐢ㄥ嚱鏁癷net_aton錛堬級銆?br>錛?錛塱nt inet_aton錛坈onst char * cp,struct in_addr * inp錛夛細姝ゅ嚱鏁板皢瀛楃涓插艦寮忕殑IP鍦板潃杞崲鎴愪簩榪涘埗褰㈠紡鐨処P鍦板潃錛涙垚鍔熸椂榪斿洖1錛屽惁鍒欒繑鍥?錛岃漿鎹㈠悗鐨処P鍦板潃瀛樺偍鍦ㄥ弬鏁癷np涓?br>錛?錛?nbsp;char * inet_ntoa錛坰truct in-addr in錛夛細灝?2浣嶄簩榪涘埗褰㈠紡鐨処P鍦板潃杞崲涓烘暟瀛楃偣褰㈠紡鐨処P鍦板潃錛岀粨鏋滃湪鍑芥暟榪斿洖鍊間腑榪斿洖錛岃繑鍥炵殑鏄竴涓寚鍚戝瓧絎︿覆鐨勬寚閽堛?br>
8銆?nbsp;瀛楄妭澶勭悊鍑芥暟
Socket鍦板潃鏄瀛楄妭鏁版嵁錛屼笉鏄互絀哄瓧絎︾粨灝劇殑錛岃繖鍜孋璇█涓殑瀛楃涓叉槸涓嶅悓鐨勩侺inux鎻愪緵浜嗕袱緇勫嚱鏁版潵澶勭悊澶氬瓧鑺傛暟鎹紝涓緇勪互b錛坆yte錛夊紑澶達紝鏄拰BSD緋葷粺鍏煎鐨勫嚱鏁幫紝鍙︿竴緇勪互mem錛堝唴瀛橈級寮澶達紝鏄疉NSI C鎻愪緵鐨勫嚱鏁般?br>浠寮澶寸殑鍑芥暟鏈夛細
錛?錛?nbsp;void bzero錛坴oid * s,int n錛夛細灝嗗弬鏁皊鎸囧畾鐨勫唴瀛樼殑鍓峮涓瓧鑺傝緗負0錛岄氬父瀹冪敤鏉ュ皢濂楁帴瀛楀湴鍧娓?銆?br>錛?錛?nbsp;void bcopy錛坈onst void * src錛寁oid * dest錛宨nt n錛夛細浠庡弬鏁皊rc鎸囧畾鐨勫唴瀛樺尯鍩熸嫹璐濇寚瀹氭暟鐩殑瀛楄妭鍐呭鍒板弬鏁癲est鎸囧畾鐨勫唴瀛樺尯鍩熴?br>錛?錛?nbsp;int bcmp錛坈onst void * s1錛宑onst void * s2錛宨nt n錛夛細姣旇緝鍙傛暟s1鎸囧畾鐨勫唴瀛樺尯鍩熷拰鍙傛暟s2鎸囧畾鐨勫唴瀛樺尯鍩熺殑鍓峮涓瓧鑺傚唴瀹癸紝濡傛灉鐩稿悓鍒欒繑鍥?錛屽惁鍒欒繑鍥為潪0銆?br>娉細浠ヤ笂鍑芥暟鐨勫師鍨嬪畾涔夊湪strings.h涓?br>浠em寮澶寸殑鍑芥暟鏈夛細
錛?錛?nbsp;void * memset錛坴oid * s錛宨nt c錛宻ize_t n錛夛細灝嗗弬鏁皊鎸囧畾鐨勫唴瀛樺尯鍩熺殑鍓峮涓瓧鑺傝緗負鍙傛暟c鐨勫唴瀹廣?br>錛?錛?nbsp;void * memcpy錛坴oid * dest錛宑onst void * src錛宻ize_t n錛夛細鍔熻兘鍚宐copy錛堬級錛屽尯鍒細鍑芥暟bcopy錛堬級鑳藉鐞嗗弬鏁皊rc鍜屽弬鏁癲est鎵鎸囧畾鐨勫尯鍩熸湁閲嶅彔鐨勬儏鍐碉紝memcpy錛堬級鍒欎笉鑳姐?br>錛?錛?nbsp;int memcmp錛坈onst void * s1錛宑onst void * s2錛宻ize_t n錛夛細姣旇緝鍙傛暟s1鍜屽弬鏁皊2鎸囧畾鍖哄煙鐨勫墠n涓瓧鑺傚唴瀹癸紝濡傛灉鐩稿悓鍒欒繑鍥?錛屽惁鍒欒繑鍥為潪0銆?br>娉細浠ヤ笂鍑芥暟鐨勫師鍨嬪畾涔夊湪string.h涓?br>
9銆?nbsp;鍩烘湰濂楁帴瀛楀嚱鏁?br>錛?錛?nbsp;socket錛堬級
#include< sys/types.h> 
#include< sys/socket.h> 
int socket(int domain錛宨nt type錛宨nt protocol)
鍙傛暟domain鎸囧畾瑕佸垱寤虹殑濂楁帴瀛楃殑鍗忚鏃忥紝鍙互鏄涓嬪鹼細
AF_UNIX //UNIX鍩熷崗璁棌錛屾湰鏈虹殑榪涚▼闂撮氳鏃朵嬌鐢?br>AF_INET //Internet鍗忚鏃忥紙TCP/IP錛?br>AF_ISO //ISO鍗忚鏃?br>鍙傛暟type鎸囧畾濂楁帴瀛楃被鍨嬶紝鍙互鏄涓嬪鹼細
SOCK_STREAM //嫻佸鎺ュ瓧錛岄潰鍚戣繛鎺ョ殑鍜屽彲闈犵殑閫氫俊綾誨瀷
SOCK_DGRAM //鏁版嵁鎶ュ鎺ュ瓧錛岄潪闈㈠悜榪炴帴鐨勫拰涓嶅彲闈犵殑閫氫俊綾誨瀷
SOCK_RAW //鍘熷濂楁帴瀛楋紝鍙Internet鍗忚鏈夋晥錛屽彲浠ョ敤鏉ョ洿鎺ヨ闂甀P鍗忚
鍙傛暟protocol閫氬父璁劇疆鎴?錛岃〃紺轟嬌鐢ㄩ粯璁ゅ崗璁紝濡侷nternet鍗忚鏃忕殑嫻佸鎺ュ瓧浣跨敤TCP鍗忚錛岃屾暟鎹姤濂楁帴瀛椾嬌鐢║DP鍗忚銆傚綋濂楁帴瀛楁槸鍘熷濂楁帴瀛楃被鍨嬫椂錛岄渶瑕佹寚瀹氬弬鏁皃rotocol錛屽洜涓哄師濮嬪鎺ュ瓧瀵瑰縐嶅崗璁湁鏁堬紝濡侷CMP鍜孖GMP絳夈?br>Linux緋葷粺涓垱寤轟竴涓鎺ュ瓧鐨勬搷浣滀富瑕佹槸錛氬湪鍐呮牳涓垱寤轟竴涓鎺ュ瓧鏁版嵁緇撴瀯錛岀劧鍚庤繑鍥炰竴涓鎺ュ瓧鎻忚堪絎︽爣璇嗚繖涓鎺ュ瓧鏁版嵁緇撴瀯銆傝繖涓鎺ュ瓧鏁版嵁緇撴瀯鍖呭惈榪炴帴鐨勫悇縐嶄俊鎭紝濡傚鏂瑰湴鍧銆乀CP鐘舵佷互鍙婂彂閫佸拰鎺ユ敹緙撳啿鍖虹瓑絳夛紝TCP鍗忚鏍規嵁榪欎釜濂楁帴瀛楁暟鎹粨鏋勭殑鍐呭鏉ユ帶鍒惰繖鏉¤繛鎺ャ?br>錛?錛?nbsp;鍑芥暟connect錛堬級
#include< sys/types.h> 
#include< sys/socket.h> 
int connect錛坕nt sockfd錛宻truct sockaddr * servaddr錛宨nt addrlen錛?br>鍙傛暟sockfd鏄嚱鏁皊ocket榪斿洖鐨勫鎺ュ瓧鎻忚堪絎︼紱鍙傛暟servaddr鎸囧畾榪滅▼鏈嶅姟鍣ㄧ殑濂楁帴瀛楀湴鍧錛屽寘鎷湇鍔″櫒鐨処P鍦板潃鍜岀鍙e彿錛涘弬鏁癮ddrlen鎸囧畾榪欎釜濂楁帴瀛楀湴鍧鐨勯暱搴︺傛垚鍔熸椂榪斿洖0錛屽惁鍒欒繑鍥?1錛屽茍璁劇疆鍏ㄥ眬鍙橀噺涓轟互涓嬩換浣曚竴縐嶉敊璇被鍨嬶細ETIMEOUT銆丒CONNREFUSED銆丒HOSTUNREACH鎴朎NETUNREACH銆?br>鍦ㄨ皟鐢ㄥ嚱鏁癱onnect涔嬪墠錛屽鎴鋒満闇瑕佹寚瀹氭湇鍔″櫒榪涚▼鐨勫鎺ュ瓧鍦板潃銆傚鎴鋒満涓鑸笉闇瑕佹寚瀹氳嚜宸辯殑濂楁帴瀛楀湴鍧錛圛P鍦板潃鍜岀鍙e彿錛夛紝緋葷粺浼氳嚜鍔ㄤ粠1024鑷?000鐨勭鍙e彿鑼冨洿鍐呬負瀹冮夋嫨涓涓湭鐢ㄧ殑绔彛鍙鳳紝鐒跺悗浠ヨ繖涓鍙e彿鍜屾湰鏈虹殑IP鍦板潃濉厖榪欎釜濂楁帴瀛楀湴鍧銆?br>瀹㈡埛鏈鴻皟鐢ㄥ嚱鏁癱onnect鏉ヤ富鍔ㄥ緩绔嬭繛鎺ャ傝繖涓嚱鏁板皢鍚姩TCP鍗忚鐨?嬈℃彙鎵嬭繃紼嬨傚湪寤虹珛榪炴帴涔嬪悗鎴栧彂鐢熼敊璇椂鍑芥暟榪斿洖銆傝繛鎺ヨ繃紼嬪彲鑳藉嚭鐜扮殑閿欒鎯呭喌鏈夛細
錛?錛?nbsp;濡傛灉瀹㈡埛鏈篢CP鍗忚娌℃湁鎺ユ敹鍒板瀹冪殑SYN鏁版嵁孌電殑紜錛屽嚱鏁頒互閿欒榪斿洖錛岄敊璇被鍨嬩負ETIMEOUT銆傞氬父TCP鍗忚鍦ㄥ彂閫丼YN鏁版嵁孌靛け璐ヤ箣鍚庯紝浼氬嬈″彂閫丼YN鏁版嵁孌碉紝鍦ㄦ墍鏈夌殑鍙戦侀兘楂樹腑澶辮觸涔嬪悗錛屽嚱鏁頒互閿欒榪斿洖銆?br>娉細SYN錛坰ynchronize錛変綅錛氳姹傝繛鎺ャ俆CP鐢ㄨ繖縐嶆暟鎹鍚戝鏂筎CP鍗忚璇鋒眰寤虹珛榪炴帴銆傚湪榪欎釜鏁版嵁孌典腑錛孴CP鍗忚灝嗗畠閫夋嫨鐨勫垵濮嬪簭鍒楀彿閫氱煡瀵規柟錛屽茍涓斾笌瀵規柟鍗忚鍗忓晢鏈澶ф暟鎹澶у皬銆係YN鏁版嵁孌電殑搴忓垪鍙蜂負鍒濆搴忓垪鍙鳳紝榪欎釜SYN鏁版嵁孌佃兘澶熻紜銆傚綋鍗忚鎺ユ敹鍒板榪欎釜鏁版嵁孌電殑紜涔嬪悗錛屽緩绔婽CP榪炴帴銆?br>錛?錛?nbsp;濡傛灉榪滅▼TCP鍗忚榪斿洖涓涓猂ST鏁版嵁孌碉紝鍑芥暟绔嬪嵆浠ラ敊璇繑鍥烇紝閿欒綾誨瀷涓篍CONNREFUSED銆傚綋榪滅▼鏈哄櫒鍦⊿YN鏁版嵁孌墊寚瀹氱殑鐩殑绔彛鍙峰娌℃湁鏈嶅姟榪涚▼鍦ㄧ瓑寰呰繛鎺ユ椂錛岃繙紼嬫満鍣ㄧ殑TCP鍗忚灝嗗彂閫佷竴涓猂ST鏁版嵁孌碉紝鍚戝鎴鋒満鎶ュ憡榪欎釜閿欒銆傚鎴鋒満鐨凾CP鍗忚鍦ㄦ帴鏀跺埌RST鏁版嵁孌靛悗涓嶅啀緇х畫鍙戦丼YN鏁版嵁孌碉紝鍑芥暟绔嬪嵆浠ラ敊璇繑鍥炪?br>娉細RST錛坮eset錛変綅錛氳〃紺鴻姹傞噸緗繛鎺ャ傚綋TCP鍗忚鎺ユ敹鍒頒竴涓笉鑳藉鐞嗙殑鏁版嵁孌墊椂錛屽悜瀵規柟TCP鍗忚鍙戦佽繖縐嶆暟鎹錛岃〃紺鴻繖涓暟鎹鎵鏍囪瘑鐨勮繛鎺ュ嚭鐜頒簡鏌愮閿欒錛岃姹俆CP鍗忚灝嗚繖涓繛鎺ユ竻闄ゃ傛湁3縐嶆儏鍐靛彲鑳藉鑷碩CP鍗忚鍙戦丷ST鏁版嵁孌碉細錛?錛塖YN鏁版嵁孌墊寚瀹氱殑鐩殑绔彛澶勬病鏈夋帴鏀惰繘紼嬪湪絳夊緟錛涳紙2錛塗CP鍗忚鎯蟲斁寮冧竴涓凡緇忓瓨鍦ㄧ殑榪炴帴錛涳紙3錛塗CP鎺ユ敹鍒頒竴涓暟鎹錛屼絾鏄繖涓暟鎹鎵鏍囪瘑鐨勮繛鎺ヤ笉瀛樺湪銆傛帴鏀跺埌RST鏁版嵁孌電殑TCP鍗忚绔嬪嵆灝嗚繖鏉¤繛鎺ラ潪姝e父鍦版柇寮錛屽茍鍚戝簲鐢ㄧ▼搴忔姤鍛婇敊璇?br>錛?錛?nbsp;濡傛灉瀹㈡埛鏈虹殑SYN鏁版嵁孌靛鑷存煇涓礬鐢卞櫒浜х敓“鐩殑鍦頒笉鍙埌杈?#8221;綾誨瀷鐨処CMP娑堟伅錛屽嚱鏁頒互閿欒榪斿洖錛岄敊璇被鍨嬩負EHOSTUNREACH鎴朎NETUNREACH銆傞氬父TCP鍗忚鍦ㄦ帴鏀跺埌榪欎釜ICMP娑堟伅涔嬪悗錛岃褰曡繖涓秷鎭紝鐒跺悗緇х畫鍑犳鍙戦丼YN鏁版嵁孌碉紝鍦ㄦ墍鏈夌殑鍙戦侀兘鍛婂け璐ヤ箣鍚庯紝TCP鍗忚媯鏌ヨ繖涓狪CMP娑堟伅錛屽嚱鏁頒互閿欒榪斿洖銆?br>娉細ICMP錛欼nternet 娑堟伅鎺у埗鍗忚銆侷nternet鐨勮繍琛屼富瑕佹槸鐢盜nternet鐨勮礬鐢卞櫒鏉ユ帶鍒訛紝璺敱鍣ㄥ畬鎴怚P鏁版嵁鍖呯殑鍙戦佸拰鎺ユ敹錛屽鏋滃彂閫佹暟鎹寘鏃跺彂鐢熼敊璇紝璺敱鍣ㄤ嬌鐢↖CMP鍗忚鏉ユ姤鍛婅繖浜涢敊璇侷CMP鏁版嵁鍖呮槸灝佽鍦↖P鏁版嵁鍖呯殑鏁版嵁閮ㄥ垎涓繘琛屼紶杈撶殑錛屽叾鏍煎紡濡備笅錛?br>綾誨瀷
鐮?nbsp;
鏍¢獙鍜?br>鏁版嵁
0 8 16 24 31
綾誨瀷錛氭寚鍑篒CMP鏁版嵁鍖呯殑綾誨瀷銆?br>浠g爜錛氭彁渚汭CMP鏁版嵁鍖呯殑榪涗竴姝ヤ俊鎭?br>鏍¢獙鍜岋細鎻愪緵浜嗗鏁翠釜ICMP鏁版嵁鍖呭唴瀹圭殑鏍¢獙鍜屻?br>ICMP鏁版嵁鍖呬富瑕佹湁浠ヤ笅綾誨瀷錛?br>錛?錛?nbsp;鐩殑鍦頒笉鍙埌杈撅細A銆佺洰鐨勪富鏈烘湭榪愯錛汢銆佺洰鐨勫湴鍧涓嶅瓨鍦紱C銆佽礬鐢辮〃涓病鏈夌洰鐨勫湴鍧瀵瑰簲鐨勬潯鐩紝鍥犺岃礬鐢卞櫒鏃犳硶鎵懼埌鍘誨線鐩殑涓繪満鐨勮礬鐢便?br>錛?錛?nbsp;瓚呮椂錛氳礬鐢卞櫒灝嗘帴鏀跺埌鐨処P鏁版嵁鍖呯殑鐢熷瓨鏃墮棿錛圱TL錛夊煙鍑?錛屽鏋滆繖涓煙鐨勫煎彉涓?錛岃礬鐢卞櫒涓㈠純榪欎釜IP鏁版嵁鍖咃紝騫朵笖鍙戦佽繖縐岻CMP娑堟伅銆?br>錛?錛?nbsp;鍙傛暟鍑洪敊錛氬綋IP鏁版嵁鍖呬腑鏈夋棤鏁堝煙鏃跺彂閫併?br>錛?錛?nbsp;閲嶅畾鍚戯細灝嗕竴鏉℃柊鐨勮礬寰勯氱煡涓繪満銆?br>錛?錛?nbsp;ECHO璇鋒眰銆丒CHO鍥炵瓟錛氳繖涓ゆ潯娑堟伅鐢ㄨ嫻嬭瘯鐩殑涓繪満鏄惁鍙互鍒拌揪銆傝姹傝呭悜鐩殑涓繪満鍙戦丒CHO璇鋒眰ICMP鏁版嵁鍖咃紝鐩殑涓繪満鍦ㄦ帴鏀跺埌榪欎釜ICMP鏁版嵁鍖呬箣鍚庯紝榪斿洖ECHO鍥炵瓟ICMP鏁版嵁鍖呫?br>錛?錛?nbsp;鏃舵埑璇鋒眰銆佹椂鎴沖洖絳旓細ICMP鍗忚浣跨敤榪欎袱縐嶆秷鎭粠鍏朵粬鏈哄櫒澶勮幏寰楀叾鏃墮挓鐨勫綋鍓嶆椂闂淬?br>
璋冪敤鍑芥暟connect鐨勮繃紼嬩腑錛屽綋瀹㈡埛鏈篢CP鍗忚鍙戦佷簡SYN鏁版嵁孌電殑紜涔嬪悗錛孴CP鐘舵佺敱CLOSED鐘舵佽漿涓篠YN_SENT鐘舵侊紝鍦ㄦ帴鏀跺埌瀵筍YN鏁版嵁孌電殑紜涔嬪悗錛孴CP鐘舵佽漿鎹㈡垚ESTABLISHED鐘舵侊紝鍑芥暟鎴愬姛榪斿洖銆傚鏋滆皟鐢ㄥ嚱鏁癱onnect澶辮觸錛屽簲璇ョ敤close鍏抽棴榪欎釜濂楁帴瀛楁弿榪扮錛屼笉鑳藉啀嬈′嬌鐢ㄨ繖涓鎺ュ瓧鎻忚堪絎︽潵璋冪敤鍑芥暟connect銆?br>
娉細TCP鍗忚鐘舵佽漿鎹㈠浘錛?br>
琚姩OPEN CLOSE 涓誨姩OPEN
錛堝緩绔婽CB錛?nbsp;錛堝垹闄CB錛?nbsp;錛堝緩绔婽CB錛?br>鍙戦丼YN錛?br>鎺ユ敹SYN SEND
錛堝彂閫丼YN錛孉CK錛?nbsp;錛堝彂閫丼YN錛?br>
鎺ユ敹SYN鐨凙CK錛堟棤鍔ㄤ綔錛?nbsp;
鎺ユ敹SYN鐨凙CK 鎺ユ敹SYN錛孉CK 
錛堟棤鍔ㄤ綔錛?nbsp;錛堝彂閫丄CK錛?br>CLOSE
錛堝彂閫丗IN錛?nbsp;CLOSE 鎺ユ敹FIN
錛堝彂閫丗IN錛?nbsp;錛堝彂閫丗IN錛?br>
鎺ユ敹FIN
鎺ユ敹FIN鐨凙CK錛堟棤鍔ㄤ綔錛?nbsp;錛堝彂閫丄CK錛?nbsp;CLOSE錛堝彂閫丗IN錛?br>

鎺ユ敹FIN 鎺ユ敹FIN鐨凙CK 鎺ユ敹FIN鐨凙CK
錛堝彂閫丄CK錛?nbsp;錛堟棤鍔ㄤ綔錛?nbsp;錛堟棤鍔ㄤ綔錛?br>
2MSL瓚呮椂錛堝垹闄CB錛?nbsp;
錛?錛?nbsp;鍑芥暟bind錛堬級
鍑芥暟bind灝嗘湰鍦板湴鍧涓庡鎺ュ瓧緇戝畾鍦ㄤ竴璧鳳紝鍏跺畾涔夊涓嬶細
#include< sys/types.h> 
#include< sys/socket.h> 
int bind(int sockfd,struct sockaddr * myaddr,int addrlen)錛?br>鍙傛暟sockfd鏄嚱鏁皊ockt榪斿洖鐨勫鎺ュ瓧鎻忚堪絎︼紱鍙傛暟myaddr鏄湰鍦板湴鍧錛涘弬鏁癮ddrlen鏄鎺ュ瓧鍦板潃緇撴瀯鐨勯暱搴︺傛墽琛屾垚鍔熸椂榪斿洖0錛屽惁鍒欙紝榪斿洖-1錛屽茍璁劇疆鍏ㄥ眬鍙橀噺errno涓洪敊璇被鍨婨ADDRINUSER銆?br>鏈嶅姟鍣ㄥ拰瀹㈡埛鏈洪兘鍙互璋冪敤鍑芥暟bind鏉ョ粦瀹氬鎺ュ瓧鍦板潃錛屼絾涓鑸槸鏈嶅姟鍣ㄨ皟鐢ㄥ嚱鏁癰ind鏉ョ粦瀹氳嚜宸辯殑鍏绔彛鍙楓傜粦瀹氭搷浣滀竴鑸湁濡備笅鍑犵緇勫悎鏂瑰紡錛?br>琛?
紼嬪簭綾誨瀷
IP鍦板潃
绔彛鍙?br>璇存槑
鏈嶅姟鍣?br>INADDR_ANY
闈為浂鍊?br>鎸囧畾鏈嶅姟鍣ㄧ殑鍏绔彛鍙?br>鏈嶅姟鍣?br>鏈湴IP鍦板潃
闈為浂鍊?br>鎸囧畾鏈嶅姟鍣ㄧ殑IP鍦板潃鍜屽叕璁ょ鍙e彿
瀹㈡埛鏈?br>INADDR_ANY
闈為浂鍊?br>鎸囧畾瀹㈡埛鏈虹殑榪炴帴绔彛鍙?br>瀹㈡埛鏈?br>鏈湴IP鍦板潃
闈為浂鍊?br>鎸囧畾瀹㈡埛鏈虹殑IP鍦板潃榪炴帴绔彛鍙?br>瀹㈡埛鏈?br>鏈湴IP鍦板潃
闆?br>鎸囧畾瀹㈡埛鏈虹殑IP鍦板潃
鍒嗗埆璇存槑濡備笅錛?br>錛?錛?nbsp;鏈嶅姟鍣ㄦ寚瀹氬鎺ュ瓧鍦板潃鐨勫叕璁ょ鍙e彿錛屼笉鎸囧畾IP鍦板潃錛氬嵆鏈嶅姟鍣ㄨ皟鐢╞ind鏃訛紝璁劇疆濂楁帴瀛楃殑IP鍦板潃涓虹壒孌婄殑INADDE-ANY錛岃〃紺哄畠鎰挎剰鎺ユ敹鏉ヨ嚜浠諱綍緗戠粶璁懼鎺ュ彛鐨勫鎴鋒満榪炴帴銆傝繖鏄湇鍔″櫒鏈甯哥敤鐨勭粦瀹氭柟寮忋?br>錛?錛?nbsp;鏈嶅姟鍣ㄦ寚瀹氬鎺ュ瓧鍦板潃鐨勫叕璁ょ鍙e彿鍜孖P鍦板潃錛氭湇鍔″櫒璋冪敤bind鏃訛紝濡傛灉璁劇疆濂楁帴瀛楃殑IP鍦板潃涓烘煇涓湰鍦癐P鍦板潃錛岃繖琛ㄧず榪欏彴鏈哄櫒鍙帴鏀舵潵鑷搴斾簬榪欎釜IP鍦板潃鐨勭壒瀹氱綉緇滆澶囨帴鍙g殑瀹㈡埛鏈鴻繛鎺ャ傚綋鏈嶅姟鍣ㄦ湁澶氬潡緗戝崱鏃訛紝鍙互鐢ㄨ繖縐嶆柟寮忔潵闄愬埗鏈嶅姟鍣ㄧ殑鎺ユ敹鑼冨洿銆?br>錛?錛?nbsp;瀹㈡埛鏈烘寚瀹氬鎺ュ瓧鍦板潃鐨勮繛鎺ョ鍙e彿錛氫竴鑸儏鍐典笅錛屽鎴鋒満璋冪敤connect鍑芥暟鏃朵笉鐢ㄦ寚瀹氳嚜宸辯殑濂楁帴瀛楀湴鍧鐨勭鍙e彿銆傜郴緇熶細鑷姩涓哄畠閫夋嫨涓涓湭鐢ㄧ殑绔彛鍙鳳紝騫朵笖鐢ㄦ湰鍦扮殑IP鍦板潃鏉ュ~鍏呭鎺ュ瓧鍦板潃涓殑鐩稿簲欏廣備絾鏈夋椂瀹㈡埛鏈洪渶瑕佷嬌鐢ㄤ竴涓壒瀹氱殑绔彛鍙鳳紙姣斿淇濈暀绔彛鍙鳳級錛岃岀郴緇熶笉浼氭湭瀹㈡埛鏈鴻嚜鍔ㄥ垎閰嶄竴涓繚鐣欑鍙e彿錛屾墍浠ラ渶瑕佽皟鐢ㄥ嚱鏁癰ind鏉ュ拰涓涓湭鐢ㄧ殑淇濈暀绔彛鍙風粦瀹氥?br>錛?錛?nbsp;鎸囧畾瀹㈡埛鏈虹殑IP鍦板潃鍜岃繛鎺ョ鍙e彿錛氳〃紺哄鎴鋒満浣跨敤鎸囧畾鐨勭綉緇滆澶囨帴鍙e拰绔彛鍙瘋繘琛岄氫俊銆?br>錛?錛?nbsp;鎸囧畾瀹㈡埛鏈虹殑IP鍦板潃錛氳〃紺哄鎴鋒満浣跨敤鎸囧畾鐨勭綉緇滆澶囨帴鍙e拰绔彛鍙瘋繘琛岄氫俊錛岀郴緇熻嚜鍔ㄤ負瀹㈡埛鏈洪変竴涓湭鐢ㄧ殑绔彛鍙楓備竴鑸彧鏈夊湪涓繪満鏈夊涓綉緇滆澶囨帴鍙f椂浣跨敤銆?br>鎴戜滑涓鑸笉鍦ㄥ鎴鋒満涓婁嬌鐢ㄥ浐瀹氱殑瀹㈡埛鏈虹鍙e彿錛岄櫎闈炴槸蹇呴』浣跨敤鐨勬儏鍐點傚湪瀹㈡埛鏈轟笂浣跨敤鍥哄畾鐨勭鍙e彿鏈変互涓嬩笉鍒╋細
錛?錛?nbsp;鏈嶅姟鍣ㄦ墽琛屼富鍔ㄥ叧闂搷浣滐細鏈嶅姟鍣ㄦ渶鍚庤繘鍏IME_WAIT鐘舵併傚綋瀹㈡埛鏈哄啀嬈′笌榪欎釜鏈嶅姟鍣ㄨ繘琛岃繛鎺ユ椂錛屼粛浣跨敤鐩稿悓鐨勫鎴鋒満绔彛鍙鳳紝浜庢槸榪欎釜榪炴帴涓庡墠嬈¤繛鎺ョ殑濂楁帴瀛楀瀹屽叏涓鏍鳳紝浣嗘槸涓鍛€佷負鍓嶆榪炴帴澶勪簬TIME_WAIT鐘舵侊紝騫舵湭娑堝け錛屾墍浠ヨ繖嬈¤繛鎺ヨ姹傝鎷掔粷錛屽嚱connect浠ラ敊璇繑鍥烇紝閿欒綾誨瀷涓篍CONNREFUSED
錛?錛?nbsp;瀹㈡埛鏈烘墽琛屼富鍔ㄥ叧闂搷浣滐細瀹㈡埛鏈烘渶鍚庤繘鍏IME_WAIT鐘舵併傚綋椹笂鍐嶆鎵ц榪欎釜瀹㈡埛鏈虹▼搴忔椂錛屽鎴鋒満灝嗙戶緇笌榪欎釜鍥哄畾瀹㈡埛鏈虹鍙e彿緇戝畾錛屼絾鍥犱負鍓嶆榪炴帴澶勪簬TIME_WAIT鐘舵侊紝騫舵湭娑堝け錛岀郴緇熶細鍙戠幇榪欎釜绔彛鍙蜂粛琚崰鐢紝鎵浠ヨ繖嬈$粦瀹氭搷浣滃け璐ワ紝鍑芥暟bind浠ラ敊璇繑鍥烇紝閿欒綾誨瀷涓篍ADDRINUSE銆?br>錛?錛?nbsp;鍑芥暟listen錛堬級
鍑芥暟listen灝嗕竴涓鎺ュ瓧杞崲涓哄緛鍚鎺ュ瓧錛屽畾涔夊涓嬶紱
#include< sys/socket,h> 
int listen(int sockfd錛宨nt backlog)
鍙傛暟sockfd鎸囧畾瑕佽漿鎹㈢殑濂楁帴瀛楁弿榪扮錛涘弬鏁癰acklog璁劇疆璇鋒眰闃熷垪鐨勬渶澶ч暱搴︼紱鎵ц鎴愬姛鏃惰繑鍥?錛?nbsp;鍚﹀垯榪斿洖-1銆傚嚱鏁發isten鍔熻兘鏈変袱涓細
錛?錛?nbsp;灝嗕竴涓皻鏈繛鎺ョ殑涓誨姩濂楁帴瀛楋紙鍑芥暟socket鍒涘緩鐨勫彲浠ョ敤鏉ヨ繘琛屼富鍔ㄨ繛鎺ヤ絾涓嶈兘鎺ュ彈榪炴帴璇鋒眰鐨勫鎺ュ瓧錛夎漿鎹㈡垚涓涓鍔ㄨ繛鎺ュ鎺ュ瓧銆傛墽琛宭isten涔嬪悗錛屾湇鍔″櫒鐨凾CP鐘舵佺敱CLOSED杞負LISTEN鐘舵併?br>錛?錛?nbsp;TCP鍗忚灝嗗埌杈劇殑榪炴帴璇鋒眰闃熷垪錛屽嚱鏁發isten鐨勭浜屼釜鍙傛暟鎸囧畾榪欎釜闃熷垪鐨勬渶澶ч暱搴︺?br>娉細鍙傛暟backlog鐨勪綔鐢細
TCP鍗忚涓烘瘡涓涓緛鍚鎺ュ瓧緇存姢涓や釜闃熷垪錛?br>錛?錛?nbsp;鏈畬鎴愯繛鎺ラ槦鍒楋細姣忎釜灝氭湭瀹屾垚3嬈℃彙鎵嬫搷浣滅殑TCP榪炴帴鍦ㄨ繖涓槦鍒椾腑鍗犳湁涓欏廣俆CP甯屾湜浠湪鎺ユ敹鍒頒竴涓鎴鋒満SYN鏁版嵁孌典箣鍚庯紝鍦ㄨ繖涓槦鍒椾腑鍒涘緩涓涓柊鏉$洰錛岀劧鍚庡彂閫佸瀹㈡埛鏈篠YN鏁版嵁孌電殑紜鍜岃嚜宸辯殑SYN鏁版嵁孌碉紙ACK+SYN鏁版嵁孌碉級錛岀瓑寰呭鎴鋒満瀵硅嚜宸辯殑SYN鏁版嵁孌電殑紜銆傛鏃訛紝濂楁帴瀛楀浜嶴YN_RCVD鐘舵併傝繖涓潯鐩皢淇濆瓨鍦ㄨ繖涓槦鍒椾腑錛岀洿鍒板鎴鋒満榪斿洖瀵筍YN鏁版嵁孌電殑紜鎴栬呰繛鎺ヨ秴鏃躲?br>錛?錛?nbsp;瀹屾垚榪炴帴闃熷垪錛氭瘡涓凡緇忓畬鎴?嬈℃彙鎵嬫搷浣滐紝浣嗗皻鏈搴旂敤紼嬪簭鎺ユ敹錛堣皟鐢ㄥ嚱鏁癮ccept錛夌殑TCP榪炴帴鍦ㄨ繖涓槦鍒椾腑鍗犳湁涓欏廣傚綋涓涓湪鏈畬鎴愯繛鎺ラ槦鍒椾腑鐨勮繛鎺ユ帴鏀跺埌瀵筍YN鏁版嵁孌電殑紜涔嬪悗錛屽畬鎴?嬈℃彙鎵嬫搷浣滐紝TCP鍗忚灝嗗畠浠庢湭瀹屾垚榪炴帴闃熷垪縐誨埌瀹屾垚榪炴帴闃熷垪涓傛鏃訛紝濂楁帴瀛楀浜嶦STABLISHED鐘舵併傝繖涓潯鐩皢淇濆瓨鍦ㄨ繖涓槦鍒椾腑錛岀洿鍒板簲鐢ㄧ▼搴忚皟鐢ㄥ嚱鏁癮ccept鏉ユ帴鏀跺畠銆?br>鍙傛暟backlog鎸囧畾鏌愪釜寰佸惉濂楁帴瀛楃殑瀹屾垚榪炴帴闃熷垪鐨勬渶澶ч暱搴︼紝琛ㄧず榪欎釜濂楁帴瀛楄兘澶熸帴鏀剁殑鏈澶ф暟鐩殑鏈帴鏀惰繛鎺ャ傚鏋滃綋涓涓鎴鋒満鐨凷YN鏁版嵁孌靛埌杈炬椂錛屽緛鍚鎺ュ瓧鐨勫畬鎴愰槦鍒楀凡緇忔弧浜嗭紝閭d箞TCP鍗忚灝嗗拷鐣ヨ繖涓猄YN鏁版嵁孌點傚浜庝笉鑳芥帴鏀剁殑SYN鏁版嵁孌碉紝TCP鍗忚涓嶅彂閫丷ST鏁版嵁孌碉紝
錛?錛?nbsp;鍑芥暟accept錛堬級
鍑芥暟accept浠庡緛鍚鎺ュ瓧鐨勫畬鎴愰槦鍒椾腑鎺ユ敹涓涓凡緇忓緩绔嬭搗鏉ョ殑TCP榪炴帴銆傚鏋滃畬鎴愯繛鎺ラ槦鍒椾負絀猴紝閭d箞榪欎釜榪涚▼鐫$湢銆?br>#include< sys/socket.h> 
int accept(int sockfd錛宻truct sockaddr * addr錛宨nt * addrlen)
鍙傛暟sockfd鎸囧畾寰佸惉濂楁帴瀛楁弿榪扮錛涘弬鏁癮ddr涓烘寚鍚戜竴涓狪nternet濂楁帴瀛楀湴鍧緇撴瀯鐨勬寚閽堬紱鍙傛暟addrlen涓烘寚鍚戜竴涓暣鍨嬪彉閲忕殑鎸囬拡銆傛墽琛屾垚鍔熸椂錛岃繑鍥?涓粨鏋滐細鍑芥暟榪斿洖鍊間負涓涓柊鐨勫鎺ュ瓧鎻忚堪絎︼紝鏍囪瘑榪欎釜鎺ユ敹鐨勮繛鎺ワ紱鍙傛暟addr鎸囧悜鐨勭粨鏋勫彉閲忎腑瀛樺偍瀹㈡埛鏈哄湴鍧錛涘弬鏁癮ddrlen鎸囧悜鐨勬暣鍨嬪彉閲忎腑瀛樺偍瀹㈡埛鏈哄湴鍧鐨勯暱搴︺傚け璐ユ椂榪斿洖-1銆?br>寰佸惉濂楁帴瀛椾笓涓烘帴鏀跺鎴鋒満榪炴帴璇鋒眰錛屽畬鎴?嬈℃彙鎵嬫搷浣滆岀敤鐨勶紝鎵浠CP鍗忚涓嶈兘浣跨敤寰佸惉濂楁帴瀛楁弿榪扮鏉ユ爣璇嗚繖涓繛鎺ワ紝浜庢槸TCP鍗忚鍒涘緩涓涓柊鐨勫鎺ュ瓧鏉ユ爣璇嗚繖涓鎺ユ敹鐨勮繛鎺ワ紝騫跺皢瀹冪殑鎻忚堪絎﹀彂鎸ョ粰搴旂敤紼嬪簭銆傜幇鍦ㄦ湁涓や釜濂楁帴瀛楋紝涓涓槸璋冪敤鍑芥暟accept鏃朵嬌鐢ㄧ殑寰佸惉濂楁帴瀛楋紝鍙︿竴涓槸鍑芥暟accept榪斿洖鐨勮繛鎺ュ鎺ュ瓧錛坈onnected socket錛夈備竴涓湇鍔″櫒閫氬父鍙渶鍒涘緩涓涓緛鍚鎺ュ瓧錛屽湪鏈嶅姟鍣ㄨ繘紼嬬殑鏁翠釜媧誨姩鏈熼棿錛岀敤瀹冩潵鎺ユ敹鎵鏈夊鎴鋒満鐨勮繛鎺ヨ姹傦紝鍦ㄦ湇鍔″櫒榪涚▼緇堟鍓嶅叧闂繖涓緛鍚鎺ュ瓧錛涘浜庢病涓涓帴鏀剁殑錛坅ccepted錛夎繛鎺ワ紝TCP鍗忚閮藉垱寤轟竴涓柊鐨勮繛鎺ュ鎺ュ瓧鏉ユ爣璇嗚繖涓繛鎺ワ紝鏈嶅姟鍣ㄤ嬌鐢ㄨ繖涓繛鎺ュ鎺ュ瓧涓庡鎴鋒満榪涜閫氫俊鎿嶄綔錛屽綋鏈嶅姟鍣ㄥ鐞嗗畬榪欎釜瀹㈡埛鏈鴻姹傛椂錛屽叧闂繖涓繛鎺ュ鎺ュ瓧銆?br>褰撳嚱鏁癮ccept闃誨絳夊緟宸茬粡寤虹珛鐨勮繛鎺ユ椂錛屽鏋滆繘紼嬫崟鑾峰埌淇″彿錛屽嚱鏁板皢浠ラ敊璇繑鍥烇紝閿欒綾誨瀷涓篍INTR銆傚浜庤繖縐嶉敊璇紝涓鑸噸鏂拌皟鐢ㄥ嚱鏁癮ccept鏉ユ帴鏀惰繛鎺ャ?br>錛?錛?nbsp;鍑芥暟close錛堬級
鍑芥暟close鍏抽棴涓涓鎺ュ瓧鎻忚堪絎︺傚畾涔夊涓嬶細
#include< unistd.h> 
int close(int sockfd)錛?br>鎵ц鎴愬姛鏃惰繑鍥?錛屽惁鍒欒繑鍥?1銆備笌鎿嶄綔鏂囦歡鎻忚堪絎︾殑close涓鏍鳳紝鍑芥暟close灝嗗鎺ュ瓧鎻忚堪絎︾殑寮曠敤璁℃暟鍣ㄥ噺1錛屽鏋滄弿榪扮鐨勫紩鐢ㄨ鏁板ぇ浜?錛屽垯琛ㄧず榪樻湁榪涚▼寮曠敤榪欎釜鎻忚堪絎︼紝鍑芥暟close姝e父榪斿洖錛涘鏋滀負0錛屽垯鍚姩娓呴櫎濂楁帴瀛楁弿榪扮鐨勬搷浣滐紝鍑芥暟close绔嬪嵆姝e父榪斿洖銆?br>璋冪敤close涔嬪悗錛岃繘紼嬪皢涓嶅啀鑳藉璁塊棶榪欎釜濂楁帴瀛楋紝浣員CP鍗忚灝嗙戶緇嬌鐢ㄨ繖涓鎺ュ瓧錛屽皢灝氭湭鍙戦佺殑鏁版嵁浼犻掑埌瀵規柟錛岀劧鍚庡彂閫丗IN鏁版嵁孌碉紝鎵ц鍏抽棴鎿嶄綔錛屼竴鐩寸瓑鍒拌繖涓猅CP榪炴帴瀹屽叏鍏抽棴涔嬪悗錛孴CP鍗忚鎵嶅垹闄よ濂楁帴瀛椼?br>錛?錛?nbsp;鍑芥暟read錛堬級鍜寃rite錛堬級
鐢ㄤ簬浠庡鎺ュ瓧璇誨啓鏁版嵁銆傚畾涔夊涓嬶細
int read(int fd錛宑har * buf錛宨nt len)
int write(int fd錛宑har * buf錛宨nt len)
鍑芥暟鎵ц鎴愬姛鏃訛紝榪斿洖璇繪垨鍐欑殑鏁版嵁閲忕殑澶у皬錛屽け璐ユ椂榪斿洖-1銆?br>姣忎釜TCP濂楁帴瀛楅兘鏈変袱涓紦鍐插尯錛氬鎺ュ瓧鍙戦佺紦鍐插尯銆佸鎺ュ瓧鎺ユ敹緙撳啿鍖猴紝鍒嗗埆澶勭悊鍙戦佸拰鎺ユ敹浠誨姟銆備粠緗戠粶璇匯佸啓鏁版嵁鐨勬搷浣滄槸鐢盩CP鍗忚鍦ㄥ唴鏍鎬腑瀹屾垚鐨勶細TCP鍗忚灝嗕粠緗戠粶涓婃帴鏀跺埌鐨勬暟鎹繚瀛樺湪鐩稿簲濂楁帴瀛楃殑鎺ユ敹緙撳啿鍖轟腑錛岀瓑寰呯敤鎴瘋皟鐢ㄥ嚱鏁板皢瀹冧滑浠庢帴鏀剁紦鍐插尯鎷瘋礉鍒扮敤鎴風紦鍐插尯錛涚敤鎴峰皢瑕佸彂閫佺殑鏁版嵁鎷瘋礉鍒扮浉搴斿鎺ュ瓧鐨勫彂閫佺紦鍐插尯涓紝鐒跺悗鐢盩CP鍗忚鎸夌収涓瀹氱殑綆楁硶澶勭悊榪欎簺鏁版嵁銆?br>璇誨啓榪炴帴濂楁帴瀛楃殑鎿嶄綔涓庤鍐欐枃浠剁殑鎿嶄綔綾諱技錛屼篃鍙互浣跨敤鍑芥暟read鍜寃rite銆傚嚱鏁皉ead瀹屾垚灝嗘暟鎹粠濂楁帴瀛楁帴鏀剁紦鍐插尯鎷瘋礉鍒扮敤鎴風紦鍐插尯錛氬綋濂楁帴瀛楁帴鏀剁紦鍐插尯鏈夋暟鎹彲璇繪椂錛?錛氬彲璇繪暟鎹噺澶т簬鍑芥暟read鎸囧畾鍊鹼紝榪斿洖鍑芥暟鍙傛暟len鎸囧畾鐨勬暟鎹噺錛?錛氫簡搴︽暟鎹噺灝忎簬鍑芥暟read鎸囧畾鍊鹼紝鍑芥暟read涓嶇瓑寰呰姹傜殑鎵鏈夋暟鎹兘鍒拌揪錛岃屾槸绔嬪嵆榪斿洖瀹為檯璇誨埌鐨勬暟鎹噺錛涘綋鏃犳暟鎹彲璇繪椂錛屽嚱鏁皉ead灝嗛樆濉炰笉榪斿洖錛岀瓑寰呮暟鎹埌杈俱?br>褰揟CP鍗忚鎺ユ敹鍒癋IN鏁版嵁孌碉紝鐩稿綋浜庣粰璇繪搷浣滀竴涓枃浠剁粨鏉熺錛屾鏃秗ead鍑芥暟榪斿洖0錛屽茍涓斾互鍚庢墍鏈夊湪榪欎釜濂楁帴瀛椾笂鐨勮鎿嶄綔鍧囪繑鍥?錛岃繖鍜屾櫘閫氭枃浠朵腑閬囧埌鏂囦歡緇撴潫絎︽槸涓鏍風殑銆?br>褰揟CP鍗忚鎺ユ敹鍒癛ST鏁版嵁孌碉紝琛ㄧず榪炴帴鍑虹幇浜嗘煇縐嶉敊璇紝鍑芥暟read灝嗕互閿欒榪斿洖錛岄敊璇被鍨嬩負ECONNERESET銆傚茍涓斾互鍚庢墍鏈夊湪榪欎釜濂楁帴瀛椾笂鐨勮鎿嶄綔鍧囪繑鍥為敊璇傞敊璇繑鍥炴椂榪斿洖鍊煎皬浜?銆?br>鍑芥暟write瀹屾垚灝嗘暟鎹粠鐢ㄦ埛緙撳啿鍖烘嫹璐濆埌濂楁帴瀛楀彂閫佺紦鍐插尯鐨勪換鍔★細鍒板鎺ュ瓧鍙戦佺紦鍐插尯鏈夎凍澶熸嫹璐濇墍鏈夌敤鎴鋒暟鎹殑絀洪棿鏃訛紝鍑芥暟write灝嗘暟鎹嫹璐濆埌榪欎釜緙撳啿鍖轟腑錛屽茍榪斿洖鑰佽緢鐨勬暟閲忓ぇ灝忥紝濡傛灉鍙敤絀洪棿灝忎簬write鍙傛暟len鎸囧畾鐨勫ぇ灝忔椂錛屽嚱鏁皐rite灝嗛樆濉炰笉榪斿洖錛岀瓑寰呯紦鍐插尯鏈夎凍澶熺殑絀洪棿銆?br>褰揟CP鍗忚鎺ユ敹鍒癛ST鏁版嵁孌碉紙褰撳鏂瑰凡緇忓叧闂簡榪欐潯榪炴帴涔嬪悗錛岀戶緇悜榪欎釜濂楁帴瀛楀彂閫佹暟鎹皢瀵艱嚧瀵規柟TCP鍗忚榪斿洖RST鏁版嵁孌碉級錛孴CP鍗忚鎺ユ敹鍒癛ST鏁版嵁孌墊椂錛屽嚱鏁皐rite灝嗕互閿欒榪斿洖錛岄敊璇被鍨嬩負EINTR銆備互鍚庡彲浠ョ戶緇湪榪欎釜濂楁帴瀛椾笂鍐欐暟鎹?br>錛?錛?nbsp;鍑芥暟getsockname錛堬級鍜実etpeername錛堬級
鍑芥暟getsockname榪斿洖濂楁帴瀛楃殑鏈湴鍦板潃錛涘嚱鏁癵etpeername榪斿洖濂楁帴瀛楀搴旂殑榪滅▼鍦板潃銆?br>
10銆?nbsp;緇撴潫璇?br>緗戠粶紼嬪簭璁捐鍏ㄩ潬濂楁帴瀛楁帴鏀跺拰鍙戦佷俊鎭備笂鏂囦富瑕佽榪頒簡Linux 涓婼ocket鐨勫熀鏈蹇點丼ockets API浠ュ強Socket鎵娑夊強鍒扮殑TCP甯歌瘑

]]>
socket緙栫▼鈥旀妧鏈疄鐜?/title><link>http://www.shnenglu.com/tx7do/articles/5961.html</link><dc:creator>鏉ㄧ布娉?/dc:creator><author>鏉ㄧ布娉?/author><pubDate>Thu, 20 Apr 2006 09:36:00 GMT</pubDate><guid>http://www.shnenglu.com/tx7do/articles/5961.html</guid><wfw:comment>http://www.shnenglu.com/tx7do/comments/5961.html</wfw:comment><comments>http://www.shnenglu.com/tx7do/articles/5961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tx7do/comments/commentRss/5961.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tx7do/services/trackbacks/5961.html</trackback:ping><description><![CDATA[ <span id="hvzpftn" class="tpc_content"> <font size="2">榪欏嚑澶╅兘鍦ㄧ帺socket浜嗭紝鏈変竴鐐瑰績寰楋紝璐村嚭鏉ヤ笌澶у鍏辮祻錛岃嫢鏈変笉濡ユ垨閿欒鐨勫湴鏂癸紝榪樿鍚勪綅鐪嬪畼鎸囩偣涓浜屻?br /><br />浠涔堟槸socket錛焥ocket灝辨槸...錛屾垜鍦ㄨ繖閲屽氨涓嶆妱涔︿簡錛屾湁鍏磋叮鐨勫悓浠佸幓鏌ユ煡涔﹀惂銆?br />涓嶈繃榪樿璇翠竴鍙ワ紝socket灝辨槸涓嶅悓榪涚▼涔嬮棿鐨勪竴縐嶉氫俊鏂瑰紡銆傚氨璞℃墦鐢佃瘽鏄湅鍙嬩箣闂寸殑涓縐嶉氫俊鏂瑰紡鏄竴鏍楓備釜浜虹悊瑙o細鎵璋撯滈氫俊鈥濓紝灝辨槸鐩鎬簰涔嬮棿鍙戦佹暟鎹傛湁浜虹悊瑙ocket鏄笉鍚岃綆楁満涔嬮棿鐨勪竴縐嶉氫俊鏂?br />寮忥紝榪欐槸涓嶇‘鍒囩殑銆備袱涓繘紼嬶紝涓嶇鏄繍琛屽湪鍚屼竴鍙拌綆楁満涓婏紝榪樻槸榪愯鍦ㄤ笉鍚岃綆楁満涓婏紝閮藉彲閫氳繃<br />socket鎶鏈繘琛岄氫俊銆?br /><br />socket濂楁帴瀛楃殑浣跨敤闇瑕佹湁緗戝崱鐨勬敮鎸侊紝鎵浠ocket涓鑸兘琚敤鏉ュ湪涓嶅悓鏈哄櫒涔嬮棿閫氫俊錛岃屽鏋滃湪鍚屼竴鍙拌綆楁満涓婄殑涓や釜榪涚▼榪涜閫氫俊錛岄氬父閲囩敤鏁堢巼鏇撮珮鐨勫叡浜唴瀛樻妧鏈潵瀹炵幇銆?br /><br />涓や釜榪涚▼涔嬮棿榪涜閫氳錛屽氨闇瑕佷袱涓繘紼嬪悓鏃墮兘鍦ㄨ繍琛屼簡錛堝簾璇濓級錛屽湪鍏蜂綋瀹炵幇涓紝涓や釜榪涚▼鎴戜滑閫氬父瑕佸尯鍒寰咃紝涓涓繘紼嬩笓闂ㄧ瓑寰呭彟涓涓繘紼嬬粰鑷繁鍙戞秷鎭紝鏀跺埌娑堟伅鍚庤繘琛屽鐞嗭紝鍦ㄦ妸澶勭悊緇撴灉鍙戦佸洖鍘匯傛垜浠妸涓撻棬澶勭悊娑堟伅銆佹彁渚涙湇鍔$殑榪涚▼縐頒負鏈嶅姟鍣ㄧ錛屾妸鍙戦佹秷鎭佽姹傚鐞嗙殑榪涚▼縐頒負瀹㈡埛绔傛諱綋榪囩▼灝辨槸瀹㈡埛绔彂閫佷竴涓秷鎭粰鏈嶅姟鍣ㄧ錛屾湇鍔″櫒绔繘紼嬫敹鍒版秷鎭繘琛屽鐞嗭紝鎶婂鐞嗙粨鏋滃彂閫佺粰瀹㈡埛绔傛仼錛屽氨鏄繖鏍楓?br /><br />榪樻湁涓涓棶棰橈紝濡傛灉鎴戠幇鍦ㄦ湁涓涓繘紼嬭璺熷彟涓鍙拌綆楁満涓婄殑鏌愪釜榪涚▼榪涜socket閫氫俊錛岄偅鍦ㄦ垜榪欎釜榪涚▼涓浣曟寚瀹氬彟涓涓繘紼嬪憿錛熻繖閲岃繕闇瑕佽涓涓嬪彟涓涓蹇碘斺旂鍙o紝濡傛灉鎶婃搷浣滅郴緇熸瘮浣滀竴搴ф埧瀛愮殑璇濓紝閭g鍙e氨鏄埧瀛愮殑紿楀彛錛屾槸緋葷粺澶栫晫鍚岀郴緇熷唴閮ㄨ繘琛岄氫俊鐨勯氶亾銆傚湪socket瀹炵幇涓紝鎴戜滑涓嶈繘琛屽彟涓涓繘紼嬬殑鎸囧畾錛岃屾槸鎸囧畾鍙戦佹秷鎭垨鎺ユ敹娑堟伅鐨勭鍙e彿銆傛瘮濡傝鐜板湪榪涚▼A瑕佺粰榪涚▼B鍙戞秷鎭紝鎴戜滑浼氭妸娑堟伅鍙戦佸埌榪涚▼B鎵榪愯鐨勮綆楁満鐨勭鍙涓婏紝鑰岃繘紼婤姝ゆ椂姝e湪鐩戣绔彛N錛岃繖鏍瘋繘紼婤灝辮兘鏀跺埌榪涚▼A鍙戦佹潵鐨勬暟鎹紝鍚屾牱榪涚▼B涔熸妸娑堟伅鍙戦佸埌璇ョ鍙d笂錛岃繘紼婣涔熻兘浠庤绔彛鏀跺埌榪涚▼B鍙戦佹潵鐨勬暟鎹紝褰撶劧錛岃繖闇瑕佸鎴風鍜屾湇鍔″櫒绔叧浜庣鍙e彿榪涜涓涓害瀹氾紝鍗沖叡鍚屾搷浣滃悓涓涓鍙c傚鏋滃鎴風鎶婃秷鎭彂閫佸埌绔彛N1涓婏紝鑰屾湇鍔″櫒绔洃瑙嗙殑鏄鍙2錛岄偅閫氫俊涓瀹氫笉鑳芥垚鍔熴傜鍙e彿鏈澶т負65535錛屼笉鑳芥瘮榪欎釜鍐嶅ぇ浜嗭紝浣嗗湪鎴戜滑鑷繁鐨勭▼搴忎腑灝介噺涓嶈鐢ㄥ皬浜?024鐨勭鍙e彿錛屽皬浜?024鐨勭鍙eソ寰堝閮借緋葷粺浣跨敤浜嗭紝姣斿23琚玹elnet鎵浣跨敤銆?br /><br />socket鐨勫疄鐜版槸寰堢畝鍗曠殑錛屽彧瑕佹寜鐓т竴瀹氱殑姝ラ錛屽氨鍙┈涓婂緩绔嬩竴涓繖鏍風殑閫氫俊閫氶亾銆?br /><br />涓嬮潰杈冭緇嗙殑浠嬬粛鍑犱釜鏍稿績鐨勫嚱鏁幫細<br /><br />SOCKET socket(int af, int type, int protocol);<br />鏃犺鏄鎴風榪樻槸鏈嶅姟鍣ㄧ錛屼笅闈㈣繖涓嚱鏁版槸涓瀹氳鐢ㄥ埌鐨勶紝涔熸槸鏈鍏堢敤鍒扮殑銆?br />榪欎釜鍑芥暟鏄鍛婅瘔緋葷粺錛岀粰鎴戝噯澶囧ソ涓涓猻ocket閫氶亾錛屾垜瑕佸拰鍏跺畠榪涚▼閫氫俊浜嗐傚嚱鏁扮殑榪斿洖鍊煎緢閲嶈錛屾垜浠璁頒笅鏉ワ紝瀹冭〃紺虹郴緇熶負鎴戜滑鍑嗗濂界殑榪欎釜socket閫氶亾錛屽湪浠ュ悗鐨勬瘡涓猻ocket鐩稿叧鍑芥暟涓兘浼氱敤鍒幫紝濡傛灉榪欎釜鍊肩瓑浜嶴OCKET_ERROR錛岃〃紺哄嚱鏁版墽琛屽け璐ヤ簡銆傚嚱鏁扮殑鍙傛暟鎴戜滑鍒嗗埆緇欙細PF_INET銆丼OCK_STREAM鍜孖PPROTO_TCP銆?br /><br />int bind(SOCKET s, const sockaddr *addr, int namelen);<br />榪欎釜鍑芥暟鍙湁鏈嶅姟鍣ㄧ紼嬪簭浣跨敤錛屼綔鐢ㄦ槸涓庢煇涓猻ocket閫氶亾緇戝畾銆傚彲浠ョ敤榪斿洖鍊煎垽鏂鍑芥暟鎵ц緇撴灉鎬庝箞鏍鳳紝濡傛灉絳変簬SOCKET_ERROR錛岄偅灝辨槸澶辮觸浜嗐傜涓涓弬鏁皊錛屽氨鏄痵ocket()鍑芥暟鐨勮繑鍥炲鹼紱鍦ㄧ粨鏋刟ddr涓紝鎴戜滑瑕佺粰瀹氫竴涓鍙e彿錛沶amelen絳変簬緇撴瀯sockaddr鐨勫ぇ灝忋?br /><br />int listen(SOCKET s, int backlog);<br />榪欎釜鍑芥暟鍙湁鏈嶅姟鍣ㄧ紼嬪簭浣跨敤錛屼綔鐢ㄦ槸鐩戝惉璇ョ鍙c傝繑鍥炲間笌bind鍑芥暟鎰忎箟涓鏍楓?br /><br />int accept(SOCKET s, sockaddr *addr, int *addrlen);<br />榪欎釜鍑芥暟鍙湁鏈嶅姟鍣ㄧ紼嬪簭浣跨敤錛屼綔鐢ㄦ槸鍝嶅簲瀹㈡埛绔殑榪炴帴銆傝繑鍥炲間笌bind鍑芥暟鎰忎箟涓鏍楓?br /><br />int connect(SOCKET s, const sockaddr *name, int namelen);<br />榪欎釜鍑芥暟鍙湁瀹㈡埛绔▼搴忎嬌鐢紝浣滅敤鏄妸瀹㈡埛绔拰鏌愪釜璁$畻鏈虹殑鏌愪釜绔彛寤虹珛榪炴帴銆傝繑鍥炲間笌bind鍑芥暟鎰忎箟涓鏍楓傜涓涓弬鏁皊錛屽氨鏄痵ocket()鍑芥暟鐨勮繑鍥炲鹼紱鍦ㄧ粨鏋刵ame涓紝鎴戜滑瑕佺粰瀹氫竴涓鍙e彿鍜岀洰鐨勬満鍣ㄥ悕錛沶amelen絳変簬緇撴瀯sockaddr鐨勫ぇ灝忋?br /><br />int send(SOCKET s, char *buf, int len, int flags);<br />int recv(SOCKET s, char *buf, int len, int flags);<br />榪欎袱涓嚱鏁板氨鏄彂閫佹暟鎹拰鎺ユ敹鏁版嵁錛屽鎴風鍜屾湇鍔″櫒绔▼搴忛兘鑳界敤錛屽摢涓彂閫佸摢涓帴鏀朵笉鐢ㄨ浜嗗惂錛熷懙鍛點?br />浠庡嚱鏁扮殑榪斿洖鍊煎彲浠ユ鏌ュ嚱鏁版墽琛屾槸鍚︽垚鍔熴傚弬鏁頒腑buf鏄寚鍚戝彂閫佹垨鎺ユ敹鐨勬暟鎹殑鎸囬拡錛宭en鏄暟鎹暱搴︺俧lags鎴戜滑緇欎釜0灝卞彲浠ワ紙鍏跺疄鏄垜涓嶇煡閬撳叿浣撳惈涔夛級銆?br /><br />鏈鍚庡氨鏄叧闂璼ocket浜嗭紝榪欎釜寰堝鏄撳繕鎺夛紝浣嗚繖涓嚱鏁板緢閲嶈錛屼竴瀹氳鐢ㄣ?br />int closesocket(SOCKET s);<br /><br /><br />濂戒簡錛屽叧閿嚱鏁板氨榪欎箞鍑犱釜錛屼笅鍥炬槸榪欏嚑涓嚱鏁扮殑鎵ц欏哄簭錛?br /><br />client绔?service绔?br /><br />聽 | 聽 聽 |<br />聽 v 聽 聽 v<br />socket() socket()<br />聽 | 聽 聽 |<br />聽 | 聽 聽 v<br />聽 | 聽 bind()<br />聽 | 聽 聽 |<br />聽 | 聽 聽 v<br />聽 | 聽 listen()<br />聽 | 聽 聽 |<br />聽 | 聽 聽 v<br />聽 | 聽 accept() 鎸傝搗錛岀洿鍒版湁瀹㈡埛绔潵榪炴帴<br />聽 | 聽 聽 |<br />聽 v 聽 涓夋鎻℃墜榪囩▼ 聽 |<br />connect() <-------------> |<br />聽 | 聽 聽 |<br />聽 v 聽 鍙戦佹秷鎭?聽 v<br />聽 +---> send() ---------------> recv() <-------+<br />聽 | 聽 | 聽 聽 . |<br />聽 | 聽 | 聽 聽 . 澶勭悊娑堟伅 |<br />聽 | 聽 v 聽 鍝嶅簲娑堟伅 聽 . |<br />聽 +---- recv() <--------------- send() --------+<br />聽 | 聽 聽 |<br />聽 v 聽 聽 |<br />close() ---------------> recv()<br />聽 聽 |<br />聽 聽 v<br />聽 closesocket()<br /><br />涓婂浘鎴戣寰楄兘寰堝ソ鐨勮鏄庡鎴風鍜屾湇鍔″櫒绔殑榪愯杞ㄨ抗銆?br /><br />浣跨敤浠ヤ笂鍑犱釜鍑芥暟鍦?linux 緋葷粺涓婂氨鍙垚鍔熷緩绔嬩竴涓猻ocket閫氫俊榪炶礬錛屼絾濡傛灉鍦╳indows緋葷粺涓婏紝榪樿鐢ㄥ埌鍙︿竴涓嚱鏁幫細<br />int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);<br />鍦╳indows緋葷粺涓婏紝棣栧厛瑕佹墽琛岃繖涓嚱鏁幫紝鎵浠ヨ鎶婅繖涓嚱鏁版斁鍦╯ocket()鍑芥暟鐨勫墠闈€?br /><br />鎴戝涓婇潰鐨勫嚱鏁拌繘琛屼簡涓浜涘皝瑁咃紝涓鴻妭鐪佺瘒騫咃紝鎴戝幓鎺夋墍鏈夋敞閲婂拰闈為噸瑕佺殑鍑芥暟錛屽湪榪欓噷鍙互鐪嬪埌鍚勪釜鍑芥暟鐨勫叿浣撶敤娉曪細<br /><br />鍦?VC60 鐜涓嬭榪愯涓嬮潰鐨勫嚱鏁幫紝瑕佸寘鍚ご鏂囦歡 errno.h 鍜?winsock2.h錛岃繕鏈夛紝鍦ㄨ繛鎺ョ殑鏃跺欒榪炴帴涓妛s2_32.dll鏂囦歡銆?br /><br />榪欐槸澶存枃浠跺唴瀹癸細<br />class Socket {<br />public:<br /><br />bool setup();<br /><br />void close();<br /><br />bool connect(string host, int port);<br /><br />bool listen();<br /><br />int accept();<br /><br />int recv(char *buf, int len);<br /><br />int recv(int new_fd, char *buf, int len);<br /><br />int send(const char *msg, int len);<br /><br />int send(int new_fd, const char *msg, int len);<br /><br />private:<br />聽 int _fd;<br />};<br /><br />榪欐槸瀹炵幇鏂囦歡鍐呭錛?br />bool Socket::setup() {<br /><br />WSADATA wsd;<br />_fd = WSAStartup(MAKEWORD(2,2), &wsd); <br />if(_fd) {<br />return false;<br />}<br /><br />_fd = ::socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);<br />if (_fd == -1) {<br />return false;<br />}<br />return true;<br />}<br /><br />bool Socket::listen() {<br />struct sockaddr_in my_addr;<br /><br />my_addr.sin_family = AF_INET; <br />my_addr.sin_port = htons(52309);<br />my_addr.sin_addr.s_addr = INADDR_ANY;<br /><br />if(::bind(_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == SOCKET_ERROR) {<br />return false;<br />}<br /><br />if(::listen(_fd, BACKLOG) == SOCKET_ERROR) {<br />return false;<br />}<br /><br />return true;<br />}<br /><br />int Socket::accept()<br />{<br />int new_fd;<br />struct sockaddr_in their_addr;<br />int sin_size = sizeof(their_addr);<br /><br />printf("accepting... \n");<br /><br />new_fd = ::accept(_fd, <br />聽 (struct sockaddr *)&their_addr,<br />聽 &sin_size);<br />return new_fd == SOCKET_ERROR ? -1:new_fd;<br />}<br /><br />bool Socket::connect(string host, int port) {<br />struct hostent *_h = gethostbyname(host.c_str());<br />if (_h == 0) {<br />return false;<br />}<br /><br />struct in_addr *_addr = (struct in_addr *)_h->h_addr;<br />struct sockaddr_in sin;<br />sin.sin_family = AF_INET;<br />sin.sin_addr = *_addr;<br />sin.sin_port = htons(port);<br /><br />if (::connect(_fd, (sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR) {<br />return false;<br />}<br /><br />return true;<br />}<br /><br />int Socket::recv(int new_fd, char *buf, int len)<br />{<br />int nb = ::recv(new_fd, buf, len, 0);<br />if (nb == -1) {<br />printf("Error! recv.\n");<br />}<br />return nb;<br />}<br /><br />int Socket::recv(char *buf, int len) {<br />return recv(_fd, buf, len);<br />}<br /><br />int Socket::send(const char *msg, int len) {<br />return send(_fd, msg, len);<br />}<br /><br />int Socket::send(int new_fd, const char *msg, int len)<br />{<br />int nb = ::send(new_fd, msg, len, 0);<br />if (nb == -1) {<br />printf("Error! send.\n");<br />}<br /><br />return nb;<br />}<br /><br />void Socket::close() {<br /><br />int trytimes = 0;<br />while(::closesocket(_fd) && trytimes < CLOSE_TRY_TIMES)<br />trytimes++;<br /><br />if(trytimes == 10) {<br />printf("Cannot close socket!\n");<br />}<br />}<br /><br />濂斤紝socket綾繪槸灝佽濂戒簡錛屼笅闈㈠氨鏄粍緇囦簡錛屾湇鍔″櫒绔拰瀹㈡埛绔槸涓嶄竴鏍風殑錛屼笅闈㈠垎鍒粰鍑轟唬鐮侊紝鍒拌繖閲屽凡緇忓氨寰堢畝鍗曚簡銆?br /><br />瀹㈡埛绔細<br />int main(int argc, char **argv)<br />{<br />printf("socket of client is run ...\n");<br />Socket s;<br />if (!s.connect("dezhi", 52309))<br />return 0;<br /><br />char *msg = "ok, send a message.";<br />for (int i=0; i<10; i++) {<br />s.send(msg, 20);<br />printf("message = %s\n", msg);<br />}<br />s.send("q", 1);<br />s.close();<br /><br />return 0;<br />}<br /><br />鏈嶅姟鍣細<br />int main(int argc, char **argv) {<br />printf("socket of service is run ...\n");<br /><br />Socket s;<br />s.listen();<br />int new_fd = s.accept();<br /><br />char buf[8];<br />buf[7] = '\0';<br />while (1) {<br />if (s.recv(new_fd, buf, 5) != -1) {<br />聽 printf("%s\n", buf);<br />聽 if (buf[0] == 'q')<br />聽 break;<br />}<br />}<br />s.close();<br />}<br /><br />涓嬮潰涓鴻繍琛岀粨鏋滐細<br />瀹㈡埛绔細<br />socket of client is run ...<br />Socket: WSAStartup success execute.<br />Socket: socket success execute.<br />Socket: Establish the connection to "127.0.0.1:52309"<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />message = ok, send a message.<br />Socket: Close connection to "127.0.0.1:52309"<br />Press any key to continue<br /><br />鏈嶅姟鍣ㄧ<br />socket of service is run ...<br />Socket: WSAStartup success execute.<br />Socket: socket success execute.<br />bind ok!<br />listen ok!<br />accepting...<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />ok, send a message.<br />qk, send a message.<br />Press any key to continue<br /><br />灝卞埌榪欓噷鍚с俿ocket鐨勭浉鍏沖唴瀹瑰彲榪滀笉姝㈣繖浜涳紝鎴戝湪榪欓噷鍙槸緇欏ぇ瀹舵潵涓姏鐮栧紩鐜夛紝鎯蟲繁絀訛紵璺繕寰堟極闀褲傚叧浜庤緇嗙殑瀹炵幇浠g爜錛屽幓鎴戠殑銆婃簮鐮併嬩笂鎵懼惂錛屼笉鏀懼湪榪欓噷錛屾槸涓轟簡璁╃瘒騫呭皬浜涖?/font> </span> <br /> <img src ="http://www.shnenglu.com/tx7do/aggbug/5961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tx7do/" target="_blank">鏉ㄧ布娉?/a> 2006-04-20 17:36 <a href="http://www.shnenglu.com/tx7do/articles/5961.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>socket緙栫▼http://www.shnenglu.com/tx7do/articles/5960.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:34:00 GMThttp://www.shnenglu.com/tx7do/articles/5960.htmlhttp://www.shnenglu.com/tx7do/comments/5960.htmlhttp://www.shnenglu.com/tx7do/articles/5960.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5960.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5960.html
int聽SOCK_STREAM
鍏堣繛鎺ュ埌涓鍙頒富鏈虹劧鍚庣敤嫻佹柟寮忎紶閫佹暟鎹?br />
int聽SOCK_DGRAM
涓嶈繛鎺?鍦ㄦ暟鎹寘涓寘鍚洰鏍囧湴鍧,鐒跺悗鐩存帴閫佸嚭,鍖呭湪浼犻佽繃紼嬩腑鍙兘涓㈠け鍜岄敊浣?br />
int聽SOCK_RAW
socket鏁版嵁鐨勫簳灞備紶杈?瀵逛簬涓鑸▼搴忔病鏈変粈涔堟剰涔?br />

鍦板潃鐨勮〃紺烘柟娉?br />
鐩稿叧搴?sys/socket.h
鐩稿叧鏁版嵁緇撴瀯:struct聽sockaddr聽*
sockaddr涓殑涓や釜鍏冪礌:
===short聽int聽sa_family:鎸囧嚭鍦板潃鐨勬牸寮?br />===char聽sa_data[14]:鍦板潃鍊?br />


鍦板潃鐨勬牸寮?
AF_LOCAL:鏈湴鍚嶇О絀洪棿(name聽space)鐨勫湴鍧
AF_UNIX:鍜孉F_LOCAL鐩稿悓,浣咥F_UNIX鏄疷NIX98鏍囧噯
AF_FILE:AF_LOCAL鐨勫彟涓涓悓涔夎瘝
AF_INET:浜掕仈緗戝悕縐扮┖闂?瀵瑰簲鐨勫悕縐扮┖闂村悕涓篜F_INET
AF_INET6:IPv6浜掕仈緗戝悕縐扮┖闂?br />AF_UNSPEC:鐢ㄥ埌鐨勫湴鏂瑰緢灝?姣斿娓呴櫎"甯﹁繛鎺?鐨凞ATAGRAM鐨勭洰鏍囧湴鍧絳?瀵瑰簲鐨勫悕縐扮┖闂村湪鏂扮増鏈殑libc涓凡緇忚鍘誨



璁劇疆socket鍦板潃(鍦╯ys/socket.h涓?

浣跨敤bind鍑芥暟灝嗘煇涓湴鍧鍒嗛厤緇欐煇涓猻ocket
int聽bind(int聽socket,struct聽sock_addr聽*addr,socklen_t聽length);
灝唋ength闀垮害鐨勫湴鍧sock_addr鍒嗛厤緇檚ocket
榪斿洖0浠h〃鎴愬姛,榪斿洖-1浠h〃澶辮觸



璇誨彇socket鍒嗛厤鍒扮殑鍦板潃(鍦╯ys/socket.h涓?

浣跨敤getsockname鍑芥暟鏉ュ緱鍒頒竴涓猻ocket瀵瑰簲鐨勫湴鍧
int聽getsockname(int聽socket,struct聽sockaddr聽*addr,socklen_t聽*length-ptr);
灝唖ocket涓殑淇℃伅鏀劇疆鍒?addr鍜?length-ptr鎵鎸囧畾鐨勭┖闂翠腑
榪斿洖鍊?琛ㄧず鎴愬姛-1琛ㄧず澶辮觸



緗戠粶鐣岄潰Interface鐨勭浉鍏沖彉閲忓拰鍑芥暟

浠ヤ笅鍐呭鍦ㄥ簱鏂囦歡net/if.h涓?br />
size_t聽IFNAMSIZ
琛ㄧず鍑哄綰崇晫闈㈠悕縐扮殑緙撳啿鍖虹殑澶у皬,鍖呮嫭緇撴潫絎?

unsigned聽int聽nametoindex(const聽char聽*ifname);
榪斿洖ifname鎵鎸囧嚭鐨勭綉緇滅晫闈㈢殑搴忓彿,榪斿洖0琛ㄧず姝ょ晫闈笉瀛樺湪

char聽*if_indextoname(unsigned聽int聽ifindex,char聽*ifname);
鎵懼埌涓涓綉緇滅晫闈㈠簭鍙峰搴旂殑鐣岄潰鍚嶇О,榪斿洖鍊煎湪ifname瀵瑰簲鐨勯偅孌靛唴瀛樼┖闂翠笂,榪欐絀洪棿鑷沖皯鏈塈FNAMSIZ澶?榪斿洖ifname琛ㄧず鎴愬姛,榪斿洖NULL琛ㄧず澶辮觸

struct聽if_nameindex
榪欎釜鍙橀噺鐢ㄤ簬瀛樺偍鍗曚釜緗戠粶鐣岄潰鐨勪俊鎭?鍏朵腑鍏鋒湁涓や釜鍏冪礌:
unsigned聽int聽if_index:鐣岄潰搴忓彿
char聽*if_name:鐢╪ull緇撳熬鐨勭晫闈㈠悕縐?br />
struct聽if_nameindex聽*if_nameindex(void);
榪斿洖涓涓猻truct聽if_nameindex鍒楄〃,鍏朵腑瀛樺偍浜嗘墍鏈夌晫闈㈢殑淇℃伅,鏈鍚庝竴涓猧f_nameindex鐨刬f_index搴忓彿涓洪浂,if_name涓簄ull
姝ゅ嚱鏁板緱鍒扮殑緇撴灉蹇呴渶鐢╥f_freenameindex鍑芥暟娓呴櫎

void聽if_freenameindex(struct聽if_nameindex聽*ptr);
娓呴櫎if_nameindex寰楀埌鐨勭粨鏋?br />


鏈湴鍚嶇О絀洪棿(local聽namespace)

鏈湴鍚嶇О絀洪棿琛ㄧず涓篜F_LOCAL(POSIX),PF_UNIX,PF_FILE

鏈湴鍚嶇О鏄竴涓枃浠跺悕,鍙兘鏈湴璋冪敤涓嶈兘浠庡叾浠栦富鏈轟笂榪炴帴

鏈湴socket緇撴瀯(鍦╯ys/socket.h涓?
struct聽sockaddr_un
鍏朵腑鍖呭惈鐨勫厓绱犱負
short聽int聽sun_family:鍦板潃鐨勬牸寮忓簲褰撹涓篈F_LOCAL
char聽sun_path[108]:鎵瑕佷嬌鐢ㄧ殑鏂囦歡鐨勬枃浠跺悕(鏆傛椂瀹氫負108浣嶏紝鍙兘鏂扮殑鐗堟湰涓細鏈夋墍鏀瑰彉)

sun_len鍑芥暟:
int聽SUN_LEN(struct聽sun聽family聽*);
鍏蜂綋璇村簲褰撴槸SUN_LEN瀹忥紝鐢ㄦ潵緇熻鏌愪釜sockaddr_un緇撴瀯鐨勫厓绱犻暱搴﹀拰鏂囦歡鍚嶉暱搴?涓嶆槸鍒嗛厤鐨勫瓧鑺傜┖闂寸殑闀垮害)



涓涓垱寤烘湰鍦皊ocket鐨勪緥瀛?br />#include聽<stddef.h>
#include聽<stdio.h>
#include聽<errno.h>
#include聽<stdlib.h>
#include聽<sys/socket.h>
#include聽<sys/un.h>
int聽make_named_socket聽(const聽char聽*filename)//姝ゅ嚱鏁頒綔鐢ㄦ槸鐢╢ilename鍒涘緩socket
{
聽聽struct聽sockaddr_un聽name;//socket鍦板潃鍚峮ame
聽聽int聽sock;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//socket
聽聽size_t聽size;

聽聽/*聽Create聽the聽socket.聽*/
聽聽sock聽=聽socket聽(PF_LOCAL,聽SOCK_DGRAM,聽0);//PF_LOCAL琛ㄧず鏈湴socket
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//SOCK_DGRAM琛ㄧず鏁版嵁鎶ユ柟寮?br />聽聽if聽(sock聽<聽0)//濡傚垱寤哄け璐ュ垯鎶ラ敊
聽聽聽聽{
聽聽聽聽聽聽perror聽("socket";
聽聽聽聽聽聽exit聽(EXIT_FAILURE);
聽聽聽聽}

聽聽/*聽Bind聽a聽name聽to聽the聽socket.聽*/
聽聽name.sun_family聽=聽AF_LOCAL;
聽聽strncpy聽(name.sun_path,聽filename,聽sizeof聽(name.sun_path));

聽聽/*聽鍦板潃鐨勯暱搴︿負sockaddr
聽聽聽聽聽緇撴瀯涓璮ilename寮濮嬬鐨勫亸縐婚噺
聽聽聽聽聽鍔犱笂filename涓枃浠跺悕鐨勯暱搴?br />聽聽聽聽聽鍔犱笂涓涓瓧鑺?姝ゅ瓧鑺備負緇撴潫鏍囪瘑)
聽聽聽聽聽鎴栬呰繕鍙互鐢ㄥ畯SUN_LEN:
聽聽聽聽聽size聽=聽SUN_LEN聽(&name);
聽*/
聽聽size聽=聽(offsetof聽(struct聽sockaddr_un,聽sun_path)
聽聽聽聽聽聽聽聽聽聽+聽strlen聽(name.sun_path)聽+聽1);//寮濮嬭綆?br />
聽聽if聽(bind聽(sock,聽(struct聽sockaddr聽*)聽&name,聽size)聽<聽0)
聽聽聽聽{
聽聽聽聽聽聽perror聽("bind";
聽聽聽聽聽聽exit聽(EXIT_FAILURE);
聽聽聽聽}

聽聽return聽sock;
}



鍏充簬鐢熸垚涓繪満鍦板潃鐨勫嚱鏁?br />
inet_aton(const聽char聽*name,struct聽in_addr聽*addr);
灝嗕互瀛楃涓茶〃紺虹殑鍦板潃杞崲鎴愪富鏈哄湴鍧騫跺偍瀛樺湪struct聽in_addr涓?br />
uint32_t聽inet_addr(const聽char聽*name);
灝嗗瓧絎︿覆IPv4鍦板潃杞崲鎴愪富鏈哄湴鍧騫惰繑鍥?濡傚け璐ュ垯榪斿洖INADDR_NONE(255.255.255.255);

uint32_t聽inet_network(const聽char聽*name);
灝嗗仠鐢?br />
char聽*inet_ntoa(struct聽in_addr聽addr);
灝咺Pv4涓繪満鍦板潃杞崲鎴愬瓧絎︿覆
娉ㄦ剰:姝ゅ嚱鏁扮殑榪斿洖鐨勫瓧絎︿覆瀛樺偍鍦ㄤ竴孌祍tatic綾誨瀷鐨勫唴瀛樼┖闂翠腑,涓嬫璋冪敤浼氳鐩栧師鍏堢殑緇撴灉,鍦ㄥ綰跨▼紼嬪簭鐨勮繍琛屼腑浼氬嚭鐜版販涔?鎵浠ユ帹鑽愪嬌鐢ㄤ笅鏂囦腑浠嬬粛鐨刬net_ntop

struct聽in_addr聽inet_makeaddr(uint32_t聽net,uint32_t聽local);
灝嗙綉緇滃彿net鍜屼富鏈哄悕local緇勫悎鎴怚Pv4涓繪満鍦板潃騫惰繑鍥?br />
uint32_t聽inet_lnaof(struct聽in_addr聽addr);
浠嶪Pv4緗戠粶鍦板潃涓彇鍑轟富鏈哄悕騫惰繑鍥?灝嗗仠鐢?

uint32_t聽inet_netof(struct聽in_addr聽addr);
浠嶪Pv4緗戠粶鍦板潃涓彇鍑虹綉緇滃彿騫惰繑鍥?灝嗗仠鐢?

int聽inet_pton(int聽af,const聽char聽*cp,void聽*buf);
灝咺Pv4鎴朓Pv6瀛楃涓插湴鍧杞崲鎴愮綉緇滀富鏈哄湴鍧
af:緗戠粶鍦板潃鐨勬牸寮?鍙彇鍊間負AF_INET鍜孉F_INET6
cp:鎸囧悜瀛楃涓查鍦板潃鐨勬寚閽?br />buf:鎸囧悜緇撴灉瀛樺偍絀洪棿鐨勬寚閽?搴斿綋棰勫厛鍒嗛厤濂借凍澶熺殑鍐呭瓨絀洪棿瀛樺偍緇撴灉)

const聽char聽*inet_ntop(int聽af,const聽void聽*cp,char聽*buf,size_t聽len);
灝咺Pv4鎴朓Pv6緗戠粶涓繪満鍦板潃杞崲鎴愬瓧絎︿覆
af:緗戠粶鍦板潃鐨勬牸寮?鍙彇鏁頒負AF_INET鍜孉F_INET6
cp:鎸囧悜闇瑕佽漿鎹㈢殑緗戠粶鍦板潃
buf:鎸囧悜瀛樺偍杞崲緇撴灉鐨勫唴瀛樼┖闂?br />len:buf鎵鎸囧悜鐨勭┖闂寸殑闀垮害
榪斿洖鍊間負buf



涓繪満鍚嶆暟鎹簱鏌ヨ鐨勭浉鍏沖彉閲?br />
struct聽hostent
鍏朵腑鍏冪礌:
char聽*h_name:涓繪満鐨?瀹樻柟"鍚嶇О
char聽**h_aliases:姝や富鏈虹殑鎵鏈夊埆鍚?br />int聽h_addrtype:鍦板潃綾誨瀷,鍙互涓篈F_INET(IPv4綾?鍜孉F_INET6(IPv6綾?,涔熷彲浠ュ嚭鐜板埆鐨勫?br />int聽h_length:鍦板潃鐨勫ぇ灝?鐢ㄥ瓧鑺傛暟璁$畻)
char聽**h_addr_list:姝や富鏈哄悕瀵瑰簲鐨勬墍鏈塈P,浠ヤ竴涓猲ull鎸囬拡緇撴潫
char聽*h_addr:絳変簬h_addr_list[0]



涓繪満鍚嶅拰鏁版嵁搴撴煡璇㈢浉鍏沖嚱鏁?br />
struct聽hostent聽*gethostbyname(const聽char聽*name);
榪斿洖涓繪満鍚峮ame鐨勪俊鎭?濡傛灉鏌ヨ澶辮觸鍒欒繑鍥炰竴涓猲ull鎸囬拡

struct聽hostent聽*gethostbyname2(const聽char聽*name,int聽af);
鍜実ethostbyname鐩擱?涓嶈繃鍙互鍦╝f涓寚鍑哄湴鍧鏍煎紡,鍙彇AF_INET鎴朅F_INET6,鍒嗗埆浠h〃IPv4鍜孖Pv6

struct聽hostent聽*gethostbyaddr(const聽char聽*addr,size_t聽length,int聽format);
榪斿洖鎸囧畾緗戠粶涓繪満鐨勪俊鎭?addr騫墮潪鎸囧悜瀛楃涓茶屾槸鎸囧悜涓涓綉緇滃湴鍧,length涓篴ddr涓湴鍧鐨勯暱搴?format涓哄湴鍧鐨勬牸寮?鍙彇AF_INET鎴朅F_INET6)



鍒涘緩socket

鎵闇鍑芥暟
int聽socket(int聽namespace,int聽style,int聽protocol);
namespace:socket綾誨瀷(姣斿PF_LOCAL鍜孭F_INET)
style:浼犺緭鏂瑰紡(鍙彇SOCK_STREAM鍜孲OCK_DGRAM)
protocol:鍗忚,涓鑸彇0



鍏抽棴socket

鎵闇鍑芥暟
int聽shutdown(int聽socket,int聽how);
鍏抽棴socket
榪斿洖0鎴愬姛,榪斿洖-1澶辮觸
how鍙彇鍊間負
0:鍋滄鎺ユ敹鏁版嵁
1:鍋滄閫佸嚭鏁版嵁
2:鍋滄鎺ユ敹鍜岃鍙?br />


socket瀵?socket聽pair)

涓や釜鍙互浜掔浉浼犻佺殑鏈湴socket,鍜宲ipe綾諱技,涓嶈繃pipe涓哄崟鍚?socket瀵逛負鍙屽悜

鍒涢爏ocket瀵規墍闇鍑芥暟
int聽socketpair(int聽namespace,int聽style,int聽protocol,int聽filedes[2]);
namespace:蹇呴渶涓篈F_LOCAL
style:鍙互鍙朣OCK_STREAM鎴栬匰OCK_DGRAM
filedes[2]:鍒涘緩鐨剆ocket瀵規斁鍦ㄨ繖閲?img src ="http://www.shnenglu.com/tx7do/aggbug/5960.html" width = "1" height = "1" />

]]>
Socket瀛︿範絎旇涔嬩竴錛堝父鐢ㄥ熀鏈畾涔夛級 http://www.shnenglu.com/tx7do/articles/5956.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:28:00 GMThttp://www.shnenglu.com/tx7do/articles/5956.htmlhttp://www.shnenglu.com/tx7do/comments/5956.htmlhttp://www.shnenglu.com/tx7do/articles/5956.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5956.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5956.html

甯哥敤綾誨瀷鐨勫畾涔夛細
錛堜互涓嬪畾涔変粠Winsock2.h鏂囦歡涓埅鍙栵級
/*
聽* The new type to be used in all
聽* instances which refer to sockets.
聽*/
typedef UINT_PTR聽聽聽聽聽聽聽 SOCKET;//SOCKET鍘熸潵灝辨槸涓涓猽nsigned int鐨勬寚閽堣屽凡

/*
聽* Select uses arrays of SOCKETs.聽 These macros manipulate such
聽* arrays.聽 FD_SETSIZE may be defined by the user before including
聽* this file, but the default here should be >= 64.
聽*
聽* CAVEAT IMPLEMENTOR and USER: THESE MACROS AND TYPES MUST BE
聽* INCLUDED IN WINSOCK2.H EXACTLY AS SHOWN HERE.
聽*/
#ifndef FD_SETSIZE
#define FD_SETSIZE聽聽聽聽聽 64
#endif /* FD_SETSIZE */
typedef struct fd_set {
聽聽聽聽聽聽聽 u_int fd_count;聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* how many are SET? */
聽聽聽聽聽聽聽 SOCKET聽 fd_array[FD_SETSIZE];聽聽 /* an array of SOCKETs */
} fd_set;//fd_set鏄敤鏉elect鐨勶紝琛ㄧず涓涓泦鍚堬紝STL涓笉鏄湁涓ā鏉跨被set涔?br />//瀵筬d_set緇撴瀯錛學insock2.h涓繕瀹氫箟浜嗗洓涓畯瀹氫箟鏉ユ搷浣渇d_set
//FD_CLR(fd, set),FD_SET(fd, set),FD_ZERO(set),FD_ISSET(fd, set)
//涓鑸敤娉曟槸鍏堝畾涔変竴涓猣d_set,浣跨敤涔嬪墠璋冪敤fd_zero錛屽啀灝嗕竴涓猻ocket鏀懼埌fd_set涓?br />//緇忚繃涓緋誨垪鎿嶄綔鍚庯紝鐢╢d_isset鍒ゆ柇鏌愪釜socket鏄惁榪樺湪set涓?br />//SOCKET fd;
//......
//fd_set ReadFds;
//FD_ZERO(&ReadFds);
//FD_SET(fd,&ReadFds);
//.....
//if ( FD_ISSET(fd,&ReadFds) )
//.....
/*
聽* Structure used in select() call, taken from the BSD file sys/time.h.
聽*/
struct timeval {
聽聽聽聽聽聽聽 long聽聽聽 tv_sec;聽聽聽聽聽聽聽聽 /* seconds */
聽聽聽聽聽聽聽 long聽聽聽 tv_usec;聽聽聽聽聽聽聽 /* and microseconds */
};//榪欎釜涔熸槸鐢ㄤ簬select鍑芥暟涓殑錛岃秴鏃跺弬鏁?br />struct聽 hostent {//琛ㄧず涓繪満鐨勭粨鏋?br />聽聽聽聽聽聽聽 char聽聽聽 FAR * h_name;聽聽聽聽聽聽聽聽聽聽 /* official name of host */
聽聽聽聽聽聽聽 char聽聽聽 FAR * FAR * h_aliases;聽 /* alias list */
聽聽聽聽聽聽聽 short聽聽 h_addrtype;聽聽聽聽聽聽聽聽聽聽聽聽 /* host address type */
聽聽聽聽聽聽聽 short聽聽 h_length;聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* length of address */
聽聽聽聽聽聽聽 char聽聽聽 FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr聽 h_addr_list[0]聽聽聽聽聽聽聽聽聽 /* address, for backward compat */
};
/*
聽* Internet address (old style... should be updated)//鏅曪紝浠涔堟椂鍊檜pdate錛?br />聽*///鍘熸潵姣忔鐪嬪埌in_addr緇撴瀯閮戒笉鐭ラ亾涓轟粈涔堝彨in_addr,鍘熸潵鏄繖鏍楓傘傘?br />struct in_addr {
聽聽聽聽聽聽聽 union {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 struct { u_short s_w1,s_w2; } S_un_w;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 u_long S_addr; //澶ч儴鍒嗛兘鐢ㄨ繖涓彉閲忓氨澶熶簡錛堜竴涓猧p鍦板潃32浣嶅垰濂戒竴涓猽nsigned long錛?br />聽聽聽聽聽聽聽 } S_un;
#define s_addr聽 S_un.S_addr //榪欐牱瀹氫箟浠ュ悗鐢ㄧ殑寰堟柟渚匡紝in_addr.s_addr灝卞彲浠ヤ簡銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* can be used for most tcp & ip code */
#define s_host聽 S_un.S_un_b.s_b2
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* host on imp */
#define s_net聽聽 S_un.S_un_b.s_b1
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* network */
#define s_imp聽聽 S_un.S_un_w.s_w2
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* imp */
#define s_impno S_un.S_un_b.s_b4
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* imp # */
#define s_lh聽聽聽 S_un.S_un_b.s_b3
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* logical host */
};
//榪檅1錛宐2錛宐3錛宐4錛寃1錛寃2涓嶇煡閬撴湁涔滅敤錛屼唬琛ㄤ箿鎰忔濄傘傘?br />#endif
/*
聽* Socket address, internet style.
聽*/
struct sockaddr_in {
聽聽聽聽聽聽聽 short聽聽 sin_family;//鍦板潃瀹舵棌涓鑸兘鏄疉F_INET鎴栬匬F_INET
聽聽聽聽聽聽聽 u_short sin_port;//绔彛
聽聽聽聽聽聽聽 struct聽 in_addr sin_addr;//ip鍦板潃
聽聽聽聽聽聽聽 char聽聽聽 sin_zero[8];
};
/*
聽* Structure used by kernel to store most//璁$畻鏈哄唴鏍鎬腑澶勭悊鐢ㄧ殑鏄繖縐嶈〃紺?br />聽* addresses.
聽*/
struct sockaddr {
聽聽聽聽聽聽聽 u_short sa_family;聽聽聽聽聽聽聽聽聽聽聽聽聽 /* address family */
聽聽聽聽聽聽聽 char聽聽聽 sa_data[14];聽聽聽聽聽聽聽聽聽聽聽 /* up to 14 bytes of direct address */
};
//浠旂粏綆椾竴涓媠ockaddr_in鍜宻ockaddr涓や釜緇撴瀯鐨勫ぇ灝忔槸涓鏍鳳紝鎵浠ュ彲浠ョ洿鎺ュ己鍒剁被鍨嬭漿鎹㈣祴鍊?br />//姣斿accept鍑芥暟鍏朵腑涓涓弬鏁扮被鍨媠truct sockaddr FAR * 錛屼綘濡傛灉鏈変竴涓猻truct sockaddr_in myaddr
//灝卞彲浠ョ洿鎺ccept(..(struct sockaddr *)myaddr.....
/*
聽* WinSock 2 extension -- WSABUF and QOS struct, include qos.h
聽* to pull in FLOWSPEC and related definitions
聽*/
typedef struct _WSABUF {//緙撳啿鍖猴紝涓鑸琺s鍦ㄥ甫WSA鍓嶇紑鐨刟ccept錛宺eceive錛宻end絳夊嚱鏁頒腑鎵嶇敤鍒?br />聽聽聽 u_long聽聽聽聽聽 len;聽聽聽聽 /* the length of the buffer */
聽聽聽 char FAR *聽 buf;聽聽聽聽 /* the pointer to the buffer */
} WSABUF, FAR * LPWSABUF;
typedef struct WSAData {
聽聽聽聽聽聽聽 WORD聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wVersion;
聽聽聽聽聽聽聽 WORD聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wHighVersion;
#ifdef _WIN64
聽聽聽聽聽聽聽 unsigned short聽聽聽聽聽聽聽聽聽 iMaxSockets;
聽聽聽聽聽聽聽 unsigned short聽聽聽聽聽聽聽聽聽 iMaxUdpDg;
聽聽聽聽聽聽聽 char FAR *聽聽聽聽聽聽聽聽聽聽聽聽聽 lpVendorInfo;
聽聽聽聽聽聽聽 char聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 szDescription[WSADESCRIPTION_LEN+1];
聽聽聽聽聽聽聽 char聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 szSystemStatus[WSASYS_STATUS_LEN+1];
#else
聽聽聽聽聽聽聽 char聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 szDescription[WSADESCRIPTION_LEN+1];
聽聽聽聽聽聽聽 char聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 szSystemStatus[WSASYS_STATUS_LEN+1];
聽聽聽聽聽聽聽 unsigned short聽聽聽聽聽聽聽聽聽 iMaxSockets;
聽聽聽聽聽聽聽 unsigned short聽聽聽聽聽聽聽聽聽 iMaxUdpDg;
聽聽聽聽聽聽聽 char FAR *聽聽聽聽聽聽聽聽聽聽聽聽聽 lpVendorInfo;
#endif
} WSADATA, FAR * LPWSADATA;//鍏跺疄榪欎釜緇撴瀯涓嶉渶瑕佹庝箞浜嗚В錛屽洜涓哄畠鍦ㄧ敤鐨勫緢灝戯紝灝辨槸鍦ㄨ皟鐢╓SAStartup鎵嶇敤鍒頒竴嬈?/font>

/*
聽* Address families.
聽*/
#define AF_UNSPEC聽聽聽聽聽聽 0聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* unspecified */
/*
聽* Although聽 AF_UNSPEC聽 is聽 defined for backwards compatibility, using
聽* AF_UNSPEC for the "af" parameter when creating a socket is STRONGLY
聽* DISCOURAGED.聽聽聽 The聽 interpretation聽 of聽 the聽 "protocol"聽 parameter
聽* depends聽 on the actual address family chosen.聽 As environments grow
聽* to聽 include聽 more聽 and聽 more聽 address families that use overlapping
聽* protocol聽 values聽 there聽 is聽 more聽 and聽 more聽 chance of choosing an
聽* undesired address family when AF_UNSPEC is used.
聽*/
#define AF_UNIX聽聽聽聽聽聽聽聽 1聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* local to host (pipes, portals) */
#define AF_INET聽聽聽聽聽聽聽聽 2聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* internetwork: UDP, TCP, etc. */
#define AF_IMPLINK聽聽聽聽聽 3聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* arpanet imp addresses */
#define AF_PUP聽聽聽聽聽聽聽聽聽 4聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* pup protocols: e.g. BSP */
#define AF_CHAOS聽聽聽聽聽聽聽 5聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* mit CHAOS protocols */
#define AF_NS聽聽聽聽聽聽聽聽聽聽 6聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* XEROX NS protocols */
#define AF_IPX聽聽聽聽聽聽聽聽聽 AF_NS聽聽聽聽聽聽聽聽聽聽 /* IPX protocols: IPX, SPX, etc. */
#define AF_ISO聽聽聽聽聽聽聽聽聽 7聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* ISO protocols */
#define AF_OSI聽聽聽聽聽聽聽聽聽 AF_ISO聽聽聽聽聽聽聽聽聽 /* OSI is ISO */
#define AF_ECMA聽聽聽聽聽聽聽聽 8聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* european computer manufacturers */
#define AF_DATAKIT聽聽聽聽聽 9聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* datakit protocols */
#define AF_CCITT聽聽聽聽聽聽聽 10聽聽聽聽聽聽聽聽聽聽聽聽聽 /* CCITT protocols, X.25 etc */
#define AF_SNA聽聽聽聽聽聽聽聽聽 11聽聽聽聽聽聽聽聽聽聽聽聽聽 /* IBM SNA */
#define AF_DECnet聽聽聽聽聽聽 12聽聽聽聽聽聽聽聽聽聽聽聽聽 /* DECnet */
#define AF_DLI聽聽聽聽聽聽聽聽聽 13聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Direct data link interface */
#define AF_LAT聽聽聽聽聽聽聽聽聽 14聽聽聽聽聽聽聽聽聽聽聽聽聽 /* LAT */
#define AF_HYLINK聽聽聽聽聽聽 15聽聽聽聽聽聽聽聽聽聽聽聽聽 /* NSC Hyperchannel */
#define AF_APPLETALK聽聽聽 16聽聽聽聽聽聽聽聽聽聽聽聽聽 /* AppleTalk */
#define AF_NETBIOS聽聽聽聽聽 17聽聽聽聽聽聽聽聽聽聽聽聽聽 /* NetBios-style addresses */
#define AF_VOICEVIEW聽聽聽 18聽聽聽聽聽聽聽聽聽聽聽聽聽 /* VoiceView */
#define AF_FIREFOX聽聽聽聽聽 19聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Protocols from Firefox */
#define AF_UNKNOWN1聽聽聽聽 20聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Somebody is using this! */
#define AF_BAN聽聽聽聽聽聽聽聽聽 21聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Banyan */
#define AF_ATM聽聽聽聽聽聽聽聽聽 22聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Native ATM Services */
#define AF_INET6聽聽聽聽聽聽聽 23聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Internetwork Version 6 */
#define AF_CLUSTER聽聽聽聽聽 24聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Microsoft Wolfpack */
#define AF_12844聽聽聽聽聽聽聽 25聽聽聽聽聽聽聽聽聽聽聽聽聽 /* IEEE 1284.4 WG AF */
#define AF_IRDA聽聽聽聽聽聽聽聽 26聽聽聽聽聽聽聽聽聽聽聽聽聽 /* IrDA */
#define AF_NETDES聽聽聽聽聽聽 28聽聽聽聽聽聽聽聽聽聽聽聽聽 /* Network Designers OSI & gateway
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 enabled protocols */
#define AF_TCNPROCESS聽聽 29
#define AF_TCNMESSAGE聽聽 30
#define AF_ICLFXBM聽聽聽聽聽 31

#define AF_MAX聽聽聽聽聽聽聽聽聽 32

/*
聽* Protocol families, same as address families for now.
聽*/
#define PF_UNSPEC聽聽聽聽聽聽 AF_UNSPEC
#define PF_UNIX聽聽聽聽聽聽聽聽 AF_UNIX
#define PF_INET聽聽聽聽聽聽聽聽 AF_INET
#define PF_IMPLINK聽聽聽聽聽 AF_IMPLINK
#define PF_PUP聽聽聽聽聽聽聽聽聽 AF_PUP
#define PF_CHAOS聽聽聽聽聽聽聽 AF_CHAOS
#define PF_NS聽聽聽聽聽聽聽聽聽聽 AF_NS
#define PF_IPX聽聽聽聽聽聽聽聽聽 AF_IPX
#define PF_ISO聽聽聽聽聽聽聽聽聽 AF_ISO
#define PF_OSI聽聽聽聽聽聽聽聽聽 AF_OSI
#define PF_ECMA聽聽聽聽聽聽聽聽 AF_ECMA
#define PF_DATAKIT聽聽聽聽聽 AF_DATAKIT
#define PF_CCITT聽聽聽聽聽聽聽 AF_CCITT
#define PF_SNA聽聽聽聽聽聽聽聽聽 AF_SNA
#define PF_DECnet聽聽聽聽聽聽 AF_DECnet
#define PF_DLI聽聽聽聽聽聽聽聽聽 AF_DLI
#define PF_LAT聽聽聽聽聽聽聽聽聽 AF_LAT
#define PF_HYLINK聽聽聽聽聽聽 AF_HYLINK
#define PF_APPLETALK聽聽聽 AF_APPLETALK
#define PF_VOICEVIEW聽聽聽 AF_VOICEVIEW
#define PF_FIREFOX聽聽聽聽聽 AF_FIREFOX
#define PF_UNKNOWN1聽聽聽聽 AF_UNKNOWN1
#define PF_BAN聽聽聽聽聽聽聽聽聽 AF_BAN
#define PF_ATM聽聽聽聽聽聽聽聽聽 AF_ATM
#define PF_INET6聽聽聽聽聽聽聽 AF_INET6

#define PF_MAX聽聽聽聽聽聽聽聽聽 AF_MAX


涓嬮潰榪欎簺鍑芥暟灞炰簬鍩烘湰甯哥敤鍑芥暟錛屼笅嬈″涔?br />u_long htonl(u_long hostlong)
u_short htons(u_short hostshort)
u_long ntohl(u_long netlong)
u_short ntohs(u_short netshort)
unsigned long inet_addr(const char* cp);
int getpeername(SOCKET s,struct sockaddr* name,int* namelen);
int getsockname(SOCKET s,struct sockaddr* name,int* namelen);
char* FAR inet_ntoa(struct in_addr in);
struct HOSTENT* FAR gethostbyaddr(const char* addr,int len,int type);
struct hostent* FAR gethostbyname(const char* name);
int gethostname(char* name,int namelen);
int WSAGetLastError(void);
int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
int ioctlsocket(SOCKET s,long cmd,u_long* argp);
int listen(SOCKET s,int backlog);
SOCKET accept(SOCKET s,struct sockaddr* addr,int* addrlen);
int send(SOCKET s,const char* buf,int len,int flags);
int recv(SOCKET s,char* buf,int len,int flags);



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=541158



]]>
Socket瀛︿範絎旇涔嬩簩錛堝父鐢ㄥ熀鏈嚱鏁幫級 http://www.shnenglu.com/tx7do/articles/5955.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:27:00 GMThttp://www.shnenglu.com/tx7do/articles/5955.htmlhttp://www.shnenglu.com/tx7do/comments/5955.htmlhttp://www.shnenglu.com/tx7do/articles/5955.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5955.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5955.html

鍑芥暟錛?br />u_long htonl(u_long hostlong)
u_short htons(u_short hostshort)
u_long ntohl(u_long netlong)
u_short ntohs(u_short netshort)

榪欎笂闈㈠洓涓嚱鏁扮被浼鹼紝鍔熻兘鐩鎬技錛岄兘鐢ㄦ潵杞崲鏁版嵁鏍煎紡銆傜敤鏉ュ疄鐜板鐞嗗櫒涓璼hort錛宭ong鏁版嵁綾誨瀷涓庣綉緇滀腑鐨勮漿鎹€傚湪緗戠粶涓紶杈撳潎浠ュ瓧鑺備負鍗曚綅錛堥櫎浜哹it澶栧氨鏄渶灝忕殑鍗曚綅浜嗭級銆備竴涓猻hort鍗犱袱瀛楄妭錛屼竴涓猯ong鍗犲洓涓瓧鑺傘備竴涓猻hort浠庝竴鍙版満瀛愪紶鍒板彟澶栦竴鍙版満瀛愪笂瑕佽兘澶熻繕鍘燂紝鍒欏繀欏葷粺涓瑙勫畾楂樹綆瀛楄妭欏哄簭銆傚湪TCP/IP鍗忚瑙勮寖涓璼hort鐨勯珮浣嶅湪浣庡瓧鑺傦紝浣庝綅鍦ㄩ珮瀛楄妭銆傝繖涓庢湁浜涘鐞嗗櫒涓垨鑰呯郴緇熶腑琛ㄧず涓嶄竴鏍楓備緥濡傚湪windows涓細
聽unsigned short hs = 0x0102;
聽unsigned short ns = htons( hs );
聽printf( "0x%04x",ns);//ns:0x0201
鎵浠ュ浜庣綉緇滅鍙g瓑鏁版嵁鍦ㄤ嬌鐢ㄥ墠蹇呴』榪涜緇熶竴錛屼緥濡?br />unsigned short port = 2088錛?br />m_sockaddr.sin_port = htons( port );
絳夌瓑銆傝繖鍥涗釜鍑芥暟錛屾垜寮濮嬩笉鐭ラ亾涓轟粈涔堝彇榪欎簺鍚嶅瓧鎬繪槸璁頒笉浣忥紝鍚庢潵鎯蟲槑鐧戒簡
htons琛ㄧずhost to net short錛宯tohs琛ㄧずnet to host short
htonl琛ㄧずhost to net long錛宯tohl琛ㄧずnet to host long
榪欐牱涓嶉渶瑕佸埢鎰忓幓璁頒篃灝辨槑鐧戒簡銆?/p>

unsigned long inet_addr(const char* cp);
char* FAR inet_ntoa(struct in_addr in);

榪欎袱涓嚱鏁扮敤鏉ユ妸琛ㄧずip鍦板潃鐨勫瓧絎︿覆錛堝錛?02.114.14.12錛夎窡琛ㄧずip鐨刲ong鎴栬呯粨鏋勪箣闂磋漿鎹€?br />inet_addr寰楀埌鐨勬槸宸茬粡緇熶竴瀛楄妭欏哄簭鐨勶紝鍙互鐩存帴璧嬪肩粰in_addr閲岀殑s_adr錛屼緥濡傦細
聽char *pHost = "202.114.14.12"
聽m_sockaddr.sin_addr.s_addr聽=聽inet_addr( pHost );

int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
鍔犺澆winsock搴撱傝繑鍥?琛ㄧず鎴愬姛錛岄潪0琛ㄧず閿欒銆傜涓涓弬鏁版槸鐗堟湰鍙鳳紝鐜板湪鏈楂樼増鏈槸2.2鐗堬紝涓嶈繃Win CE濂藉儚鍙敮鎸?.1鐗堬紝楂樹綅瀛楄妭琛ㄧず鍓増鏈彿錛屼綆浣嶅瓧鑺傝〃紺洪珮鐗堟湰鍙鳳紝鎵浠ヨ繖閲屼竴鑸氨鏄?x0202鎴栬?x0101鎴栬呬嬌鐢ㄥ畯瀹氫箟MAKEWORD(2,2)鎴栬匨AKEWORD(1,1)錛岀浜屼釜鍙傛暟鏄竴涓笌winsock搴撲俊鎭湁鍏崇殑緇撴瀯錛屼竴鎶婁笉鐢ㄥ幓綆″畠銆傚湪浣跨敤winsock鍓嶏紝閮藉繀欏誨姞杞斤紝涓鑸湪紼嬪簭鍒濆鍖栨椂鍊欏仛榪欎釜浜嬫儏銆備竴鑸嬌鐢ㄥ涓嬶細
聽WSADATA data;
聽if ( WSAStartup(0x0202,&data) != 0 )
聽{
聽聽printf("error id: %d",GetLastError());
聽}
涓婇潰鐨?font color="#ff6600">GetLastError()
鏄嬌鐢ㄩ潪甯擱綣佺殑鍑芥暟銆傚緢澶氬嚱鏁扮殑榪斿洖鍊煎緱鎰忎箟閮芥槸琛ㄧず鍑芥暟鎵ц鏄惁鍑洪敊銆傚綋winsock鐨勫嚱鏁板彂鐢熼敊璇椂錛岀敤GetLastError()鍙互寰楀埌鏈鍚庝竴嬈″彂鐢熼敊璇殑閿欒鍙楓傚湪.Net涓湁涓伐鍏鳳細鏌ユ壘閿欒錛岃緭鍏ラ敊璇彿錛屽緱鍒伴敊璇俊鎭?/p>

int gethostname(char* name,int namelen);
鑾峰彇涓繪満鍚嶃傝緭鍏ュ弬鏁頒負緙撳啿鍖哄湴鍧鍜屽ぇ灝忋?br />struct hostent* FAR gethostbyname(const char* name);
鐢變富鏈哄悕寰楀埌涓繪満淇℃伅錛屽彲浠ョ敤鏉ヨВ鏋愬煙鍚嶃傞渶瑕佹敞鎰忕殑鏄疢SDN涓殑涓孌佃瘽鈥淭he application must never attempt to modify this structure or to free any of its components. Furthermore, only one copy of this structure is allocated per thread, so the application should copy any information it needs before issuing any other Windows Sockets function calls鈥濊繖璇存槑浜嗕竴鑸敤娉曠殑鏃跺欙紝瑕佹妸鏁版嵁鎷瘋礉鍑烘潵錛岀湅鐪嬩笅闈唬鐮侊細
聽char聽聽聽name[255];
聽PHOSTENT聽聽phostinfo;
聽PHOSTENT聽聽phostinfo1;
聽WSADATA data;
聽struct in_addr** addrPtr;
聽struct in_addr** addrPtr1;

聽if ( WSAStartup(0x0202,&data) != 0 )
聽{
聽聽printf("error id: %d",GetLastError());
聽}

聽if( gethostname ( name, sizeof(name)) == 0)
聽{
聽聽printf("%s",name);
聽聽if((phostinfo = gethostbyname(name)) != NULL)
聽聽{
聽聽聽for (addrPtr = (struct in_addr **)phostinfo->h_addr_list;*addrPtr;addrPtr++)
聽聽聽{//鏄劇ず鎴戞満瀛愮殑ip
聽聽聽聽printf("%s\n", inet_ntoa(**addrPtr));
聽聽聽}
聽聽}
聽聽else
聽聽聽printf("error id : %d",GetLastError());
聽}
聽else
聽{
聽聽printf("error id :%d",GetLastError());
聽}

聽if((phostinfo1 = gethostbyname("bbs.whnet.edu.cn")) != NULL)
聽{
聽聽for (addrPtr1 = (struct in_addr **)phostinfo->h_addr_list;*addrPtr1;addrPtr1++)
聽聽{//鏄劇ずbbs.whnet.edu.cn鐨刬p錛?02.114.0.248
聽聽聽printf("%s\n", inet_ntoa(**addrPtr1));
聽聽}
聽}
聽else
聽聽printf("error id : %d",GetLastError());

聽for (addrPtr = (struct in_addr **)phostinfo->h_addr_list;*addrPtr;addrPtr++)
{//鍦ㄨ繖閲屾樉紺虹殑鏄痓bs.whnet.edu.cn鐨刬p錛?02.114.0.248錛屼笉鏄垜鏈哄瓙鐨刬p
聽聽printf("%s\n", inet_ntoa(**addrPtr));
聽}

struct HOSTENT* FAR gethostbyaddr(const char* addr,int len,int type);
鏍規嵁ip鍦板潃寰楀埌涓繪満淇℃伅銆傝繖閲岀殑ip蹇呴』鏄綉緇滃瓧鑺傞『搴忕殑銆傜ず渚嬩唬鐮侊細
聽PHOSTENT phostinfo2;
聽unsigned long ip = inet_addr("127.0.0.1");
聽if ( (phostinfo2 = gethostbyaddr((char*)&ip,sizeof(ip),AF_INET)) != NULL)
聽{//鏄劇ずlocalhost
聽聽printf("host name : %s",phostinfo2->h_name );
聽}
聽else
聽聽printf("error id : %d",GetLastError());

int getsockname(SOCKET s,struct sockaddr* name,int* namelen);
榪欎釜鍑芥暟鐢ㄦ潵鐨勫緱鍒皊ocket鐨勬湰鍦板湴鍧錛屼絾鏄墠鎻愭槸socket蹇呴』宸茬粡bind鎴栬呭凡緇忔槸榪炴帴涓婄殑銆傚鏋渟ocket涓嶆槸闈㈠悜榪炴帴鐨勮瘽錛屾瘮濡倁dp錛岄偅寰梥ocket涓婃湁鏁版嵁鎵嶈銆?br />int getpeername(SOCKET s,struct sockaddr* name,int* namelen);
榪欎釜鍑芥暟鐢ㄦ潵寰楀埌socket閭d竴杈逛笂鐨勫湴鍧錛屾樉鐒秙ocket蹇呴』寰楄繛鎺ヤ笂銆傗淭he getpeername function can be used only on a connected socket. For datagram sockets, only the name of a peer specified in a previous connect call will be returned鈥攁ny name specified by a previous sendto call will not be returned by getpeername.鈥?/p>

鑷充簬bind,listen,accept,recv,send絳夊悗闈㈠select妯″瀷鐨勬椂鍊欏啀浠旂粏鐮旂┒銆?/p>

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=551760



鏉ㄧ布娉?/a> 2006-04-20 17:27 鍙戣〃璇勮
]]>Windows I/O妯″瀷銆佸悓姝?寮傛銆侀樆濉?闈為樆濉?/title><link>http://www.shnenglu.com/tx7do/articles/5954.html</link><dc:creator>鏉ㄧ布娉?/dc:creator><author>鏉ㄧ布娉?/author><pubDate>Thu, 20 Apr 2006 09:25:00 GMT</pubDate><guid>http://www.shnenglu.com/tx7do/articles/5954.html</guid><wfw:comment>http://www.shnenglu.com/tx7do/comments/5954.html</wfw:comment><comments>http://www.shnenglu.com/tx7do/articles/5954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tx7do/comments/commentRss/5954.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tx7do/services/trackbacks/5954.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium/26px arial, sans-serif, 瀹嬩綋; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="LINE-HEIGHT: 22px; FONT-SIZE: 14px" class=Apple-style-span> <p style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋"><strong><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium/26px arial, sans-serif, 瀹嬩綋; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="LINE-HEIGHT: 22px; FONT-SIZE: 14px" class=Apple-style-span><strong style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">鍚屾</strong><br style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">銆銆鎵璋撳悓姝ワ紝灝辨槸鍦ㄥ彂鍑轟竴涓姛鑳借皟鐢ㄦ椂錛屽湪娌℃湁寰楀埌緇撴灉涔嬪墠錛岃璋冪敤灝變笉榪斿洖銆傛寜鐓ц繖涓畾涔夛紝鍏跺疄緇濆ぇ澶氭暟鍑芥暟閮芥槸鍚屾璋冪敤錛堜緥濡俿in, isdigit絳夛級銆備絾鏄竴鑸岃█錛屾垜浠湪璇村悓姝ャ佸紓姝ョ殑鏃跺欙紝鐗規寚閭d簺闇瑕佸叾浠栭儴浠跺崗浣滄垨鑰呴渶瑕佷竴瀹氭椂闂村畬鎴愮殑浠誨姟銆傛渶甯歌鐨勪緥瀛愬氨鏄?SendMessage銆傝鍑芥暟鍙戦佷竴涓秷鎭粰鏌愪釜紿楀彛錛屽湪瀵規柟澶勭悊瀹屾秷鎭箣鍓嶏紝榪欎釜鍑芥暟涓嶈繑鍥炪傚綋瀵規柟澶勭悊瀹屾瘯浠ュ悗錛岃鍑芥暟鎵嶆妸娑堟伅澶勭悊鍑芥暟鎵榪斿洖鐨?LRESULT鍊艱繑鍥炵粰璋冪敤鑰呫?/span></span></strong></p> <p><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium/26px arial, sans-serif, 瀹嬩綋; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="LINE-HEIGHT: 22px; FONT-SIZE: 14px" class=Apple-style-span><strong style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">寮傛</strong><br style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">銆銆寮傛鐨勬蹇靛拰鍚屾鐩稿銆傚綋涓涓紓姝ヨ繃紼嬭皟鐢ㄥ彂鍑哄悗錛岃皟鐢ㄨ呬笉鑳界珛鍒誨緱鍒扮粨鏋溿傚疄闄呭鐞嗚繖涓皟鐢ㄧ殑閮ㄤ歡鍦ㄥ畬鎴愬悗錛岄氳繃鐘舵併侀氱煡鍜屽洖璋冩潵閫氱煡璋冪敤鑰呫備互 CAsycSocket綾諱負渚嬶紙娉ㄦ剰錛孋Socket浠嶤AsyncSocket媧劇敓錛屼絾鏄搗鍔熻兘宸茬粡鐢卞紓姝ヨ漿鍖栦負鍚屾錛夛紝褰撲竴涓鎴風閫氳繃璋冪敤 Connect鍑芥暟鍙戝嚭涓涓繛鎺ヨ姹傚悗錛岃皟鐢ㄨ呯嚎紼嬬珛鍒誨彲浠ユ湞涓嬭繍琛屻傚綋榪炴帴鐪熸寤虹珛璧鋒潵浠ュ悗錛宻ocket搴曞眰浼氬彂閫佷竴涓秷鎭氱煡璇ュ璞°傝繖閲屾彁鍒版墽琛?閮ㄤ歡鍜岃皟鐢ㄨ呴氳繃涓夌閫斿緞榪斿洖緇撴灉錛氱姸鎬併侀氱煡鍜屽洖璋冦傚彲浠ヤ嬌鐢ㄥ摢涓縐嶄緷璧栦簬鎵ц閮ㄤ歡鐨勫疄鐜幫紝闄ら潪鎵ц閮ㄤ歡鎻愪緵澶氱閫夋嫨錛屽惁鍒欎笉鍙楄皟鐢ㄨ呮帶鍒躲傚鏋滄墽琛岄儴 浠剁敤鐘舵佹潵閫氱煡錛岄偅涔堣皟鐢ㄨ呭氨闇瑕佹瘡闅斾竴瀹氭椂闂存鏌ヤ竴嬈★紝鏁堢巼灝卞緢浣庯紙鏈変簺鍒濆澶氱嚎紼嬬紪紼嬬殑浜猴紝鎬誨枩嬈㈢敤涓涓驚鐜幓媯鏌ユ煇涓彉閲忕殑鍊鹼紝榪欏叾瀹炴槸涓縐嶅緢涓ラ噸 鐨勯敊璇級銆傚鏋滄槸浣跨敤閫氱煡鐨勬柟寮忥紝鏁堢巼鍒欏緢楂橈紝鍥犱負鎵ц閮ㄤ歡鍑犱箮涓嶉渶瑕佸仛棰濆鐨勬搷浣溿傝嚦浜庡洖璋冨嚱鏁幫紝鍏跺疄鍜岄氱煡娌″お澶氬尯鍒?br><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium/26px arial, sans-serif, 瀹嬩綋; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="LINE-HEIGHT: 22px; FONT-SIZE: 14px" class=Apple-style-span><strong style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋"><br>闃誨</strong><br style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">銆銆闃誨璋冪敤鏄寚璋冪敤緇撴灉榪斿洖涔嬪墠錛屽綋鍓嶇嚎紼嬩細琚寕璧楓傚嚱鏁板彧鏈夊湪寰楀埌緇撴灉涔嬪悗鎵嶄細榪斿洖銆傛湁浜轟篃璁鎬細鎶婇樆濉炶皟鐢ㄥ拰鍚屾璋冪敤絳夊悓璧鋒潵錛屽疄闄呬笂浠栨槸涓嶅悓鐨勩傚浜庡悓 姝ヨ皟鐢ㄦ潵璇達紝寰堝鏃跺欏綋鍓嶇嚎紼嬭繕鏄縺媧葷殑錛屽彧鏄粠閫昏緫涓婂綋鍓嶅嚱鏁版病鏈夎繑鍥炶屽凡銆備緥濡傦紝鎴戜滑鍦–Socket涓皟鐢≧eceive鍑芥暟錛屽鏋滅紦鍐插尯涓病鏈夋暟 鎹紝榪欎釜鍑芥暟灝變細涓鐩寸瓑寰咃紝鐩村埌鏈夋暟鎹墠榪斿洖銆傝屾鏃訛紝褰撳墠綰跨▼榪樹細緇х畫澶勭悊鍚勭鍚勬牱鐨勬秷鎭傚鏋滀富紿楀彛鍜岃皟鐢ㄥ嚱鏁板湪鍚屼竴涓嚎紼嬩腑錛岄櫎闈炰綘鍦ㄧ壒孌婄殑鐣岄潰鎿?浣滃嚱鏁頒腑璋冪敤錛屽叾瀹炰富鐣岄潰榪樻槸搴旇鍙互鍒鋒柊銆俿ocket鎺ユ敹鏁版嵁鐨勫彟澶栦竴涓嚱鏁皉ecv鍒欐槸涓涓樆濉炶皟鐢ㄧ殑渚嬪瓙銆傚綋socket宸ヤ綔鍦ㄩ樆濉炴ā寮忕殑鏃跺欙紝 濡傛灉娌℃湁鏁版嵁鐨勬儏鍐典笅璋冪敤璇ュ嚱鏁幫紝鍒欏綋鍓嶇嚎紼嬪氨浼氳鎸傝搗錛岀洿鍒版湁鏁版嵁涓烘銆?/p> <p style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋"><strong style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">闈為樆濉?/strong><br style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">銆銆闈為樆濉炲拰闃誨鐨勬蹇電浉瀵瑰簲錛屾寚鍦ㄤ笉鑳界珛鍒誨緱鍒扮粨鏋滀箣鍓嶏紝璇ュ嚱鏁頒笉浼氶樆濉炲綋鍓嶇嚎紼嬶紝鑰屼細绔嬪埢榪斿洖銆?/p> <p style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">銆銆瀵硅薄鐨勯樆濉炴ā寮忓拰闃誨鍑芥暟璋冪敤<br style="LINE-HEIGHT: 22px; FONT-FAMILY: arial, sans-serif, 瀹嬩綋">銆銆瀵硅薄鏄惁澶勪簬闃誨妯″紡鍜屽嚱鏁版槸涓嶆槸闃誨璋冪敤鏈夊緢寮虹殑鐩稿叧鎬э紝浣嗘槸騫朵笉鏄竴涓瀵瑰簲鐨勩傞樆濉炲璞′笂鍙互鏈夐潪闃誨鐨勮皟鐢ㄦ柟寮忥紝鎴戜滑鍙互閫氳繃涓瀹氱殑API鍘昏疆璇㈢姸 鎬侊紝鍦ㄩ傚綋鐨勬椂鍊欒皟鐢ㄩ樆濉炲嚱鏁幫紝灝卞彲浠ラ伩鍏嶉樆濉炪傝屽浜庨潪闃誨瀵硅薄錛岃皟鐢ㄧ壒孌婄殑鍑芥暟涔熷彲浠ヨ繘鍏ラ樆濉炶皟鐢ㄣ傚嚱鏁皊elect灝辨槸榪欐牱鐨勪竴涓緥瀛愩?/p> <p></span></span></span></span></span></span><br>鍦╓insock涓疄鐜板紓姝ョ殑鏂規硶鏈夊緢澶氾紝Winsock鐨処O妯″瀷鏈変笅闈㈠叚縐?br><strong>    涓錛歴elect妯″瀷<br>    浜岋細WSAAsyncSelect妯″瀷<br>    涓夛細WSAEventSelect妯″瀷<br>    鍥涳細Overlapped I/O 浜嬩歡閫氱煡妯″瀷<br>    浜旓細Overlapped I/O 瀹屾垚渚嬬▼妯″瀷<br>    鍏細IOCP妯″瀷</strong><br>浠庝竴鍒板叚瓚婃潵瓚婇珮綰э紝瓚婃潵瓚婇珮鏁堬紝瀹炵幇瓚婃潵瓚婂鏉傘?br><br><br>鏇懼湪緗戜笂鐪嬪埌涓浜涙瘮鍠葷敤鏉ュ緢濂界殑璇存槑榪欎簺妯″瀷錛屽湪榪欓噷寮曠敤涓涓嬨?br>鑰侀檲鏈変竴涓湪澶栧湴宸ヤ綔鐨勫コ鍎匡紝涓嶈兘緇忓父鍥炴潵錛岃侀檲鍜屽ス閫氳繃淇′歡鑱旂郴銆備粬浠殑淇′細琚偖閫掑憳鎶曢掑埌浠栦滑鐨勪俊綆遍噷銆?br><strong>涓錛歴elect妯″瀷</strong></p> <p>鑰侀檲闈炲父鎯崇湅鍒板コ鍎跨殑淇°備互鑷充簬浠栨瘡闅?0鍒嗛挓灝變笅妤兼鏌ヤ俊綆憋紝鐪嬫槸鍚︽湁濂沖効鐨勪俊~~~~~<br>鍦ㄨ繖縐嶆儏鍐典笅錛?#8220;涓嬫ゼ媯鏌ヤ俊綆?#8221;鐒跺悗鍥炲埌妤間笂鑰借浜嗚侀檲澶鐨勬椂闂達紝浠ヨ嚦浜庤侀檲鏃犳硶鍋氬叾浠栧伐浣溿?/p> <p><strong>浜岋細WSAAsyncSelect妯″瀷</strong></p> <p>鍚庢潵錛岃侀檲浣跨敤浜嗗井杞叕鍙哥殑鏂板紡淇$銆傝繖縐嶄俊綆遍潪甯稿厛榪涳紝涓鏃︿俊綆遍噷鏈夋柊鐨勪俊浠訛紝鐩栬尐灝變細緇欒侀檲鎵撶數璇濓細鍠傦紝澶х埛錛屼綘鏈夋柊鐨勪俊浠朵簡錛佷粠姝わ紝鑰侀檲鍐嶄篃涓嶅繀棰戠箒涓婁笅妤兼鏌ヤ俊綆變簡錛岀墮涔熶笉鐤間簡錛屼綘鐬呭噯浜嗭紝钃濆ぉ......涓嶆槸錛屽井杞瘇~~~~~~~</p> <p><strong>涓夛細WSAEventSelect妯″瀷</strong></p> <p>鍚庢潵錛屽井杞殑淇$闈炲父鐣呴攢錛岃喘涔板井杞俊綆辯殑浜轟互鐧句竾璁℃暟......浠ヨ嚦浜庣洊鑼ㄦ瘡澶?4灝忔椂緇欏鎴鋒墦鐢佃瘽錛岀瘡寰楄叞閰歌儗鐥涳紝鍠濊殎鍔涚閮戒笉濂戒嬌~~~~~~<br>寰蔣鏀硅繘浜嗕粬浠殑淇$錛氬湪瀹㈡埛鐨勫涓坊鍔犱竴涓檮鍔犺緗紝榪欎釜瑁呯疆浼氱洃瑙嗗鎴風殑淇$錛屾瘡褰撴柊鐨勪俊浠舵潵涓達紝姝よ緗細鍙戝嚭“鏂頒俊浠跺埌杈?#8221;澹幫紝鎻愰啋鑰侀檲鍘繪敹淇°傜洊鑼ㄧ粓浜庡彲浠ョ潯瑙変簡銆?/p> <p><strong>鍥涳細Overlapped I/O 浜嬩歡閫氱煡妯″瀷</strong></p> <p>鍚庢潵錛屽井杞氳繃璋冩煡鍙戠幇錛岃侀檲涓嶅枩嬈笂涓嬫ゼ鏀跺彂淇′歡錛屽洜涓轟笂涓嬫ゼ鍏跺疄寰堟氮璐規椂闂淬備簬鏄井杞啀嬈℃敼榪涗粬浠殑淇$銆傛柊寮忕殑淇$閲囩敤浜嗘洿涓哄厛榪涚殑鎶鏈紝鍙鐢ㄦ埛鍛婅瘔寰蔣鑷繁鐨勫鍦ㄥ嚑妤煎嚑鍙鳳紝鏂板紡淇$浼氭妸淇′歡鐩存帴浼犻佸埌鐢ㄦ埛鐨勫涓紝鐒跺悗鍛婅瘔鐢ㄦ埛錛屼綘鐨勪俊浠跺凡緇忔斁鍒頒綘鐨勫涓簡錛佽侀檲寰堥珮鍏達紝鍥犱負浠栦笉蹇呭啀浜茶嚜鏀跺彂淇′歡浜嗭紒</p> <p><strong>浜旓細Overlapped I/O 瀹屾垚渚嬬▼妯″瀷</strong></p> <p>鑰侀檲鎺ユ敹鍒版柊鐨勪俊浠跺悗錛屼竴鑸殑紼嬪簭鏄細鎵撳紑淇″皝----鎺忓嚭淇$焊----闃呰淇′歡----鍥炲淇′歡......涓轟簡榪涗竴姝ュ噺杞葷敤鎴瘋礋鎷咃紝寰蔣鍙堝紑鍙戜簡涓縐嶆柊鐨勬妧鏈細鐢ㄦ埛鍙鍛婅瘔寰蔣瀵逛俊浠剁殑鎿嶄綔姝ラ錛屽井杞俊綆卞皢鎸夌収榪欎簺姝ラ鍘誨鐞嗕俊浠訛紝涓嶅啀闇瑕佺敤鎴蜂翰鑷媶淇?闃呰/鍥炲浜嗭紒鑰侀檲緇堜簬榪囦笂浜嗗皬璧勭敓媧伙紒</p> <p><strong>鍏細IOCP妯″瀷</strong></p> <p>寰蔣淇$浼間箮寰堝畬緹庯紝鑰侀檲涔熷緢婊℃剰銆備絾鏄湪涓浜涘ぇ鍏徃鎯呭喌鍗村畬鍏ㄤ笉鍚岋紒榪欎簺澶у叕鍙告湁鏁頒互涓囪鐨勪俊綆憋紝姣忕閽熼兘鏈夋暟浠ョ櫨璁$殑淇′歡闇瑕佸鐞嗭紝浠ヨ嚦浜庡井杞俊綆辯粡甯稿洜瓚呰礋鑽瘋繍杞屽穿婧冿紒闇瑕侀噸鏂板惎鍔紒寰蔣涓嶅緱涓嶄嬌鍑烘潃鎵嬮攺......<br>寰蔣緇欐瘡涓ぇ鍏徃媧句簡涓鍚嶅悕鍙?#8220;Completion Port”鐨勮秴綰ф満鍣ㄤ漢錛岃榪欎釜鏈哄櫒浜哄幓澶勭悊閭d簺淇′歡錛?/p> <p><br>鍏跺疄錛屼笂闈㈡瘡縐嶆ā鍨嬮兘鏈変紭鐐癸紝瑕佹牴鎹▼搴忛渶姹傝岄傚綋閫夋嫨鍚堥傜殑妯″瀷錛屽墠闈笁縐嶆ā鍨嬫晥鐜囧凡緇忔瘮杈冮珮錛屽疄鐜拌搗鏉ラ毦閬撲笉澶э紝寰堝涓鑸殑緗戠粶紼嬪簭閮介噰鐢ㄥ墠涓夌妯″瀷錛屽彧鏈夊緗戠粶瑕佹眰鐗瑰埆楂樼殑涓浜涙湇鍔″櫒鎵嶄細鑰冭檻鐢ㄥ悗闈㈢殑閭d簺妯″瀷銆侻FC涓殑CAsyncSocket綾誨氨鏄敤鐨刉SAAsyncSelect妯″瀷錛岀數椹翠腑涔熸槸鐢ㄧ殑榪欑錛屼笉榪囧湪瀵繪壘瀵瑰簲socket鐨勬椂鍊欒繘琛屼簡浼樺寲錛屾煡鎵炬洿蹇紝鍦℅ridCast涓噰鐢ㄧ殑鏄疻SAEventSelect妯″瀷錛岀瓑寰呫?/p> <img src ="http://www.shnenglu.com/tx7do/aggbug/5954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tx7do/" target="_blank">鏉ㄧ布娉?/a> 2006-04-20 17:25 <a href="http://www.shnenglu.com/tx7do/articles/5954.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>濡備綍緙栧啓Linux涓嬬殑瀹㈡埛鏈?鏈嶅姟鍣ㄨ蔣浠?/title><link>http://www.shnenglu.com/tx7do/articles/5952.html</link><dc:creator>鏉ㄧ布娉?/dc:creator><author>鏉ㄧ布娉?/author><pubDate>Thu, 20 Apr 2006 09:19:00 GMT</pubDate><guid>http://www.shnenglu.com/tx7do/articles/5952.html</guid><wfw:comment>http://www.shnenglu.com/tx7do/comments/5952.html</wfw:comment><comments>http://www.shnenglu.com/tx7do/articles/5952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tx7do/comments/commentRss/5952.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tx7do/services/trackbacks/5952.html</trackback:ping><description><![CDATA[銆銆 Linux浠ュ叾婧愪唬鐮佸叕寮闂誨悕浜庝笘錛屽茍浠ュ叾紼沖畾鎬у拰鍙潬鎬ч泟闇告搷浣滅郴緇熼鍩燂紝鍦ㄧ綉緇滃簲鐢ㄦ妧鏈柟闈嬌鐢ㄥ緱鏇村姞騫挎硾銆傚緢涔呬互鏉ュ畠灝辨槸Windows鐨勯噸瑕佸鎵嬩箣涓銆傞殢鐫緗戠粶鏃朵唬鐨勬潵涓達紝Linux鐨勮繖縐嶄紭鍔垮凡鍙樺緱鏇村姞紿佸嚭銆傛湰鏂囧皢璁鴻堪濡備綍鍦↙inux鐜涓嬪埄鐢⊿ocket瀹炵幇瀹㈡埛鏈?鏈嶅姟鍣ㄩ氫俊銆?<br />闅忕潃緗戠粶鎶鏈殑鍙戝睍錛岀綉緇滅粨鏋勫凡浠庤繃鍘葷殑涓繪満/緇堢鍨嬨佸絳夊瀷鍙戝睍鍒扮幇鍦ㄥ箍涓轟嬌鐢ㄧ殑瀹㈡埛鏈?鏈嶅姟鍣ㄥ瀷銆傚鎴鋒満/鏈嶅姟鍣ㄦā鍨嬪簲鐢ㄥ崄鍒嗗箍娉涳紝鍦↖nternet涓奧WW錛孍-mail錛孎TP絳夐兘鏄熀浜庤繖縐嶆ā鍨嬬殑銆傚湪闈㈠悜榪炴帴鐨勯氫俊妯″紡涓嬶紝鏈嶅姟鍣ㄦ墦寮鐩戝惉绔彛錛岀洃鍚綉緇滀笂鍏跺畠瀹㈡埛鏈哄悜璇ユ湇鍔″櫒鍙戝嚭鐨勮繛鎺ヨ姹傦紝褰撴敹鍒頒竴涓姹備俊鍙鋒椂涓庤瀹㈡埛鏈哄緩绔嬩竴涓繛鎺ワ紝涔嬪悗涓よ呰繘琛屼氦浜掑紡鐨勯氫俊銆傚叿浣撴楠ゅ彲榪欐牱緇勭粐錛?<br /><br />鏈嶅姟鍣細 <br />1.鎵撳紑涓涓凡鐭ョ殑鐩戝惉绔彛錛屽smtp涓?5銆乸op3涓?10銆乫tp涓?1銆乼elnet涓?3絳夈?<br />2.鍦ㄧ洃鍚鍙d笂鐩戝惉瀹㈡埛鏈虹殑榪炴帴璇鋒眰錛屽鏋滄湁瀹㈡埛鏈鴻姹傝繛鎺ュ垯寤虹珛涓涓繛鎺ョ嚎璺?<br />3.鍦ㄨ繛鎺ョ嚎璺笂涓庡鎴鋒満閫氫俊銆?<br />4.閫氫俊瀹屾瘯鍚庡叧闂繛鎺ョ嚎璺茍緇х畫鐩戝惉瀹㈡埛鏈虹殑榪炴帴璇鋒眰銆?<br /><br />瀹㈡埛鏈猴細 <br />1.鍚戞寚瀹氱殑鏈嶅姟鍣ㄤ富鏈哄強绔彛鍙戝嚭榪炴帴璇鋒眰銆?<br />2.褰撴湇鍔″櫒寤虹珛榪炴帴綰胯礬鍚庝笌鏈嶅姟鍣ㄨ繘琛岄氫俊銆?<br />3.閫氫俊瀹屾瘯鍚庡叧闂繛鎺ョ嚎璺?<br /><br />Linux鐨勮澶氱壒鎬ч兘闈炲父鏈夊姪浜庣綉緇滅▼搴忚璁★細棣栧厛Linux鎷ユ湁POSIX.1鏍囧噯搴撳嚱鏁幫紝socket()銆乥ind()銆乴isten()榪欏嚑涓簱鍑芥暟鍙互闈炲父鏂逛究鍦板疄鐜版湇鍔″櫒/瀹㈡埛鏈烘ā鍨嬶紝鏈夊叧榪欏嚑涓簱鍑芥暟鐨勪嬌鐢ㄨ鏄庡皢鍦ㄥ悗杈逛粙緇嶃傚叾嬈inux鐨勮繘紼嬬鐞嗕篃闈炲父絎﹀悎鏈嶅姟鍣ㄧ殑宸ヤ綔鍘熺悊錛屾墍璋撹繘紼嬪氨鏄▼搴忓湪鍐呭瓨涓繍琛屾椂鐨勭姸鎬侊紝鍙互璇磋繘紼嬫槸鍔ㄦ佺殑紼嬪簭銆傚湪榪愯鐫Linux鎿嶄綔緋葷粺鐨勮綆楁満涓紝姣忎竴涓繘紼嬮兘鏈変竴涓垱寤哄畠鐨勭埗榪涚▼錛岃屼笖瀹冧篃鑳藉垱寤哄涓瓙榪涚▼銆傚湪鏈嶅姟鍣ㄧ鎴戜滑鍙互鐢ㄧ埗榪涚▼鍘葷洃鍚鎴鋒満鐨勮繛鎺ヨ姹傦紝褰撴湁瀹㈡埛鏈虹殑榪炴帴璇鋒眰鏃剁埗榪涚▼鍒涘緩涓涓瓙榪涚▼鍘誨緩绔嬭繛鎺ョ嚎璺茍涓庡鎴鋒満閫氫俊錛岃屽畠鏈韓鍙戶緇洃鍚叾瀹冨鎴鋒満鐨勮繛鎺ヨ姹傦紝榪欐牱灝卞彲閬垮厤褰撴湁涓涓鎴鋒満涓庢湇鍔″櫒寤虹珛榪炴帴鍚庢湇鍔″櫒灝變笉鑳藉啀涓庡叾瀹冨鎴鋒満閫氫俊鐨勯棶棰樸侺inux鐨勫彟涓涓壒鎬ф槸瀹冪鎵夸簡UNIX璁懼鏃犲叧鎬ц繖涓浼樼鐗瑰緛錛屽嵆瀹冮氳繃鏂囦歡鎻忚堪絎﹀疄鐜頒簡緇熶竴鐨勮澶囨帴鍙o紝紓佺洏銆佹樉紺虹粓绔侀煶棰戣澶囥佹墦鍗拌澶囩敋鑷崇綉緇滈氫俊閮戒嬌鐢ㄧ粺涓鐨処/O璋冪敤銆傝繖涓変釜鐗規у皢浣縇inux涓嬬殑緗戠粶紼嬪簭璁捐鍙樺緱鏄撳鍙嶆帉銆備笂榪頒笁涓壒鎬х殑緇煎悎鍒╃敤灝嗘槸榪欑瘒鏂囩珷鎵瑕佽榪扮殑鐪熻皼鎵鍦ㄣ備笅杈圭殑瀹㈡埛鏈?鏈嶅姟鍣ㄥ疄鐜拌繃紼嬪彲浠ヨ鏄庝竴浜岋紝娉ㄦ剰涓庝笂鏂囨墍榪版楠ょ殑涓嶅悓銆?<br /><br />鏈嶅姟鍣細 <br />1.鎵撳紑涓涓凡鐭ョ殑鐩戝惉绔彛銆?<br />2.鍦ㄧ洃鍚鍙d笂鐩戝惉瀹㈡埛鏈虹殑榪炴帴璇鋒眰錛屽綋鏈変竴瀹㈡埛鏈鴻姹傝繛鎺ユ椂寤虹珛榪炴帴綰胯礬騫惰繑鍥為氫俊鏂囦歡鎻忚堪絎︺?<br />4.鐖惰繘紼嬪垱寤轟竴瀛愯繘紼嬶紝鐖惰繘紼嬪叧闂氫俊鏂囦歡鎻忚堪絎﹀茍緇х畫鐩戝惉绔彛涓婄殑瀹㈡埛鏈鴻繛鎺ヨ姹傘?<br />3.瀛愯繘紼嬮氳繃閫氫俊鏂囦歡鎻忚堪絎︿笌瀹㈡埛鏈鴻繘琛岄氫俊錛岄氫俊緇撴潫鍚庣粓姝㈠瓙榪涚▼騫跺叧闂氫俊鏂囦歡鎻忚堪絎︺?<br /><br />瀹㈡埛鏈猴細 <br />1.鍚戞寚瀹氱殑鏈嶅姟鍣ㄤ富鏈哄強绔彛鍙戝嚭榪炴帴璇鋒眰錛岃姹傛垚鍔熷皢榪斿洖閫氫俊鏂囦歡鎻忚堪絎︺?<br />2.閫氳繃閫氫俊鏂囦歡鎻忚堪絎︿笌鏈嶅姟鍣ㄨ繘琛岄氫俊銆?<br />3.閫氫俊瀹屾瘯鍚庡叧闂氫俊鏂囦歡鎻忚堪絎︺?<br /><br /><br />Linux鐨勪互涓嬪嚑涓簱鍑芥暟鏄綉緇滅▼搴忚璁$殑鏍稿績閮ㄥ垎錛屽畠浠垎鍒槸錛?<br />(1)socket <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br /><br />int socket(int domain,int type,int protocol); <br /><br />綆瑕佽鏄庯細 <br />姝ゅ嚱鏁頒負閫氫俊鍒涘緩涓涓鍙o紝姝e父璋冪敤灝嗚繑鍥炰竴涓枃浠舵弿榪扮錛岄敊璇皟鐢ㄥ皢榪斿洖-1銆俤omain鍙傛暟鏈変袱縐嶉夋嫨錛欰F_UNIX涓嶢F_INET錛屽叾涓瑼F_INET涓篒nternet閫氫俊鍗忚銆倀ype鍙傛暟涔熸湁涓ょ閫夋嫨錛歋OCK_STREAM鐢ㄤ簬TCP錛孲OCK_DGRAM鐢ㄤ簬UDP銆俻rotocol鍙傛暟閫氬父涓?銆傚彲閫氳繃涓嬪垪浠g爜涓哄熀浜嶵CP鍗忚鐨処nternet閫氫俊寤虹珛濂楁帴鍙d紶杈撶鍙o細 <br /><br />#include <br />#include <br />#include <br />int sock; <br /><br />if((sock=socket(AF_INET,SOCK_STREAM,0))==-1) <br />perror("Could not create socket"); <br /><br />(2)bind <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br /><br />int bind(int s,const struct sockaddr *address,size_t address_len); <br /><br />綆瑕佽鏄庯細 <br />bind鑻辨枃鍚剰鏄叧鑱旓紝鎹嗙粦銆傚叾鐩殑灝辨槸鎶妔ocket榪斿洖鐨勫鎺ュ彛绔彛涓庣綉緇滀笂鐨勭墿鐞嗕綅緗浉鍏寵仈銆?<br />bind姝e父璋冪敤榪斿洖0錛屽嚭閿欒繑鍥?1銆傛鍑芥暟鏈変笁涓弬鏁幫細鍏朵腑s涓簊ocket璋冪敤榪斿洖鐨勬枃浠舵弿榪扮錛?address璁劇疆浜嗕笌緗戠粶涓婄殑鐗╃悊浣嶇疆鐩稿叧鐨勪俊鎭紝瀹冪殑綾誨瀷鏄痵truct sockaddr錛屼絾鍦↖nternet涓婂畠鏄痵truct sockaddr_in銆傚湪socket.h涓璼truct sockaddr_in瀹氫箟涓猴細 <br />struct sockaddr_in{ <br />short sin_family; <br />u_short sin_port; <br />struct in_addr sin_addr; <br />char sin_zero[8]; <br />}; <br />sin_family涓鑸負AF_INET錛宻in_port涓虹鍙e彿錛岀敱浜庝嬌鐢ㄤ笉鍚屽瓧鑺傞『搴忕殑鏈哄櫒蹇呴』浣滆漿鎹紝鏁呭簲浣跨敤瀹忓懡浠tons(host to network short)鏉ヨ漿鎹㈢鍙e彿錛宻in_addr灝嗙疆涓篒NADDR_ANY銆傝繖涓変釜鍊艱緗畬鎴愬悗*address鍙傛暟鎵嶆湁鎰忎箟銆傚湪緙栧啓浠g爜鏃訛紝搴斿厛璁劇疆*address鍙傛暟鍐呴儴鍚勬垚鍛樺彉閲忕殑鍊鹼紝鍐嶈皟鐢╞ind銆?<br /><br />(3)listen <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br /><br />int listen(int s,int backlog); <br /><br />綆瑕佽鏄庯細 <br />鏈嚱鏁頒嬌socket绔彛鑳藉鎺ュ彈浠庡鎴鋒満鏉ョ殑榪炴帴璇鋒眰錛屾甯歌皟鐢ㄨ繑鍥?錛屽嚭閿欒繑鍥?1銆?<br />s鍙傛暟涓簊ocket浜х敓鐨勬枃浠舵弿榪扮錛宐acklog涓烘墍鑳芥帴鍙楀鎴鋒満鐨勬渶澶ф暟鐩?<br />socket錛宐ind錛宭isten 涓変釜鍑芥暟鐨勭患鍚堣皟鐢ㄦ渶緇堝湪鏈嶅姟鍣ㄤ笂浜х敓涓涓兘鎺ュ彈瀹㈡埛鏈鴻姹傜殑鐩戝惉鏂囦歡鎻忚堪絎銆?<br /><br />(4)accept <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br /><br />int accept(int s,struct sockaddr *address,int *address_len); <br /><br />綆瑕佽鏄庯細 <br />褰撴湁瀹㈡埛鏈哄彂鍑鴻繛鎺ヨ姹傛椂錛屾鍑芥暟鍒濆鍖栬繖涓繛鎺ャ傛甯歌皟鐢ㄨ繑鍥炰笌瀹㈡埛鏈洪氫俊鐨勯氫俊鏂囦歡鎻忚堪絎︼紝鍑洪敊榪斿洖-1銆傚弬鏁皊涓簊ocket璋冪敤榪斿洖鐨勬枃浠舵弿榪扮錛宎ddress灝嗙敤鏉ュ瓨鍌ㄥ鎴鋒満鐨勪俊鎭紝姝や俊鎭敱accept濉叆錛屽綋涓庡鎴鋒満榪炴帴鏃訛紝瀹㈡埛鏈虹殑鍦板潃涓庣鍙e皢濉埌姝ゅ銆俛ddress_len鏄鎴鋒満鍦板潃闀垮害鐨勫瓧鑺傛暟錛屼篃鐢盿ccept濉叆銆?<br /><br />(5)connect <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br /><br />int connect(int s,struct sockaddr *address,size_t address_len); <br /><br />綆瑕佽鏄庯細 <br />瀹㈡埛鏈鴻皟鐢╯ocket寤虹珛浼犺緭绔彛鍚庯紝璋冪敤connect鏉ュ緩绔嬩笌榪滅▼鏈嶅姟鍣ㄧ浉榪炵殑榪炴帴綰胯礬銆?<br />姝ゅ嚱鏁扮殑鍙傛暟璋冪敤鍚宐ind銆?<br /><br />(6)inet_addr <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br />#include <br /><br />in_addr_t inet_addr(const char *addstring); <br /><br />綆瑕佽鏄庯細 <br />姝ゅ嚱鏁板皢瀛楃涓瞐ddstring琛ㄧず鐨勭綉緇滃湴鍧錛堝192.168.0.1錛夎漿鎹㈡垚32浣嶇殑緗戠粶瀛楄妭搴忎簩榪涘埗鍊鹼紝鑻ユ垚鍔熻繑鍥?2浣嶄簩榪涘埗鐨勭綉緇滃瓧鑺傚簭鍦板潃錛岃嫢鍑洪敊榪斿洖 INADDR_NONE銆侷NADDR_NONE鏄?2浣嶅潎涓?鐨勫鹼紙鍗?55.255.255.255錛屽畠鏄疘nternet鐨勬湁闄愬箍鎾湴鍧錛夛紝鏁呭鏋滆杞崲鐨刟ddstring鏄?55.255.255.255錛屽嚱鏁拌皟鐢ㄥ皢澶辮觸銆?<br /><br />(7)fork <br />璋冪敤鏂瑰紡錛?<br />#include <br />#include <br /><br /><br />pid_t fork(void); <br /><br />綆瑕佽鏄庯細 <br />fork鐨勪綔鐢ㄦ槸鎷瘋礉鐖惰繘紼嬬殑鍐呭瓨鏄犺薄鏉ュ垱寤哄瓙榪涚▼錛屼袱涓繘紼嬪皢鎺ョ潃fork鍚庣殑鎸囦護緇х畫鎵ц銆?浜嬪疄涓婂畠榪斿洖涓や釜榪涚▼鎺у埗鍙鳳紝瀵逛簬鐖惰繘紼嬪畠榪斿洖瀛愯繘紼嬬殑榪涚▼ID錛屽浜庡瓙榪涚▼瀹冭繑鍥?銆?<br /><br />鍙敤涓嬭竟鐨勪唬鐮佽皟鐢╢ork錛?<br /><br />pid_t childpid; <br />if((childpid=fork())=-1){ <br />perror("The fork failed"); <br />exit(1); <br />} <br />else if(child==0){ <br />璋冪敤瀛愯繘紼? <br />} <br />else if(child>0){ <br />璋冪敤鐖惰繘紼? <br />} <br /><br /><br />浠ヤ笂浠嬬粛浜嗙綉緇滅紪紼嬬殑鏈夊叧搴撳嚱鏁扮殑璋冪敤鏂規硶錛屼笅闈婦涓涓鎴鋒満/鏈嶅姟鍣ㄧ▼搴忕殑灝忎緥瀛愬叿浣撹鏄庡浣曡璁$綉緇滅▼搴忋傛湰渚嬩粙緇嶅浣曟煡鐪嬫湇鍔″櫒涓婄殑鏃墮棿鍜屾棩鏈燂紝鐢變簬daytime鏈嶅姟鍣ㄧ殑閫氱敤绔彛涓?3錛屽鎴鋒満紼嬪簭灝嗛氳繃璋冪敤13鍙風鍙e鏈嶅姟鍣ㄤ笂鐨勬椂闂村拰鏃ユ湡榪涜鎿嶄綔銆?<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_0_14_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_14_Open_Text.style.display='none'; Codehighlighter1_0_14_Closed_Image.style.display='inline'; Codehighlighter1_0_14_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_14_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_14_Closed_Text.style.display='none'; Codehighlighter1_0_14_Open_Image.style.display='inline'; Codehighlighter1_0_14_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_14_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_0_14_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">timeserve.c</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">聽<br /><img id="Codehighlighter1_17_165_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_165_Open_Text.style.display='none'; Codehighlighter1_17_165_Closed_Image.style.display='inline'; Codehighlighter1_17_165_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_17_165_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_17_165_Closed_Text.style.display='none'; Codehighlighter1_17_165_Open_Image.style.display='inline'; Codehighlighter1_17_165_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_17_165_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_17_165_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">鏈嶅姟鍣ㄧ▼搴忎吉浠g爜濡備笅錛毬?br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />鎵撳紑daytime鐩戝惉绔彛錛浡?br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />while(瀹㈡埛鏈轟笌鏈嶅姟鍣ㄦ垚鍔熻繛鎺モ斺旀垚鍔熻繑鍥為氫俊鏂囦歡鎻忚堪絎?聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />fork()聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />瀛愯繘紼嬶細聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />璇誨嚭褰撳墠鏃墮棿錛浡?br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />灝嗗綋鍓嶆椂闂村啓鍏ラ氫俊鏂囦歡鎻忚堪絎︼紱聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />鍏抽棴閫氫俊鏂囦歡鎻忚堪絎︼紱聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />}聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />鐖惰繘紼嬶細聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />鍏抽棴閫氫俊鏂囦歡鎻忚堪絎︼紱聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />}聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽argc,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])聽<br /><img id="Codehighlighter1_343_1167_Open_Image" onclick="this.style.display='none'; Codehighlighter1_343_1167_Open_Text.style.display='none'; Codehighlighter1_343_1167_Closed_Image.style.display='inline'; Codehighlighter1_343_1167_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_343_1167_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_343_1167_Closed_Text.style.display='none'; Codehighlighter1_343_1167_Open_Image.style.display='inline'; Codehighlighter1_343_1167_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_343_1167_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_343_1167_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽listenfd,communfd;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr_in聽servaddr;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />pid_t聽childpid;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />time_t聽tick;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">聽buf[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">];聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((listenfd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">socket(AF_INET,SOCK_STREAM,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_499_548_Open_Image" onclick="this.style.display='none'; Codehighlighter1_499_548_Open_Text.style.display='none'; Codehighlighter1_499_548_Closed_Image.style.display='inline'; Codehighlighter1_499_548_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_499_548_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_499_548_Closed_Text.style.display='none'; Codehighlighter1_499_548_Open_Image.style.display='inline'; Codehighlighter1_499_548_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_499_548_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_499_548_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Could聽not聽create聽socket</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />servaddr.sin_family</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">AF_INET;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />servaddr.sin_addr.s_addr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">INADDR_ANY;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />servaddr.sin_port</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">htons(</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bind(listenfd,(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr聽</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">servaddr,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(servaddr))</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_720_756_Open_Image" onclick="this.style.display='none'; Codehighlighter1_720_756_Open_Text.style.display='none'; Codehighlighter1_720_756_Closed_Image.style.display='inline'; Codehighlighter1_720_756_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_720_756_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_720_756_Closed_Text.style.display='none'; Codehighlighter1_720_756_Open_Image.style.display='inline'; Codehighlighter1_720_756_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_720_756_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_720_756_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bind聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(listen(listenfd,</span><span style="COLOR: #000000">254</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_789_827_Open_Image" onclick="this.style.display='none'; Codehighlighter1_789_827_Open_Text.style.display='none'; Codehighlighter1_789_827_Closed_Image.style.display='inline'; Codehighlighter1_789_827_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_789_827_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_789_827_Closed_Text.style.display='none'; Codehighlighter1_789_827_Open_Image.style.display='inline'; Codehighlighter1_789_827_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_789_827_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_789_827_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">listen聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(communfd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">accept(listenfd,(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)NULL,NULL))聽<br /><img id="Codehighlighter1_892_1154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_892_1154_Open_Text.style.display='none'; Codehighlighter1_892_1154_Closed_Image.style.display='inline'; Codehighlighter1_892_1154_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_892_1154_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_892_1154_Closed_Text.style.display='none'; Codehighlighter1_892_1154_Open_Image.style.display='inline'; Codehighlighter1_892_1154_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_892_1154_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_892_1154_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((childpid</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fork())</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_922_958_Open_Image" onclick="this.style.display='none'; Codehighlighter1_922_958_Open_Text.style.display='none'; Codehighlighter1_922_958_Closed_Image.style.display='inline'; Codehighlighter1_922_958_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_922_958_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_922_958_Closed_Text.style.display='none'; Codehighlighter1_922_958_Open_Image.style.display='inline'; Codehighlighter1_922_958_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_922_958_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_922_958_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fork聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">聽</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(childpid</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_983_1111_Open_Image" onclick="this.style.display='none'; Codehighlighter1_983_1111_Open_Text.style.display='none'; Codehighlighter1_983_1111_Closed_Image.style.display='inline'; Codehighlighter1_983_1111_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_983_1111_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_983_1111_Closed_Text.style.display='none'; Codehighlighter1_983_1111_Open_Image.style.display='inline'; Codehighlighter1_983_1111_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_983_1111_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_983_1111_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />tick</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">time(NULL);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />snprintf(buf,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(buf),</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.24s\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ctime(</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">tick));聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />write(communfd,buf,strlen(buf));聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />close(communfd);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">聽</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(childpid</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />close(communfd);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_1172_1187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1172_1187_Open_Text.style.display='none'; Codehighlighter1_1172_1187_Closed_Image.style.display='inline'; Codehighlighter1_1172_1187_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1172_1187_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1172_1187_Closed_Text.style.display='none'; Codehighlighter1_1172_1187_Open_Image.style.display='inline'; Codehighlighter1_1172_1187_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1172_1187_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_1172_1187_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">timeclient.h</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽argc,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])聽<br /><img id="Codehighlighter1_1314_1972_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1314_1972_Open_Text.style.display='none'; Codehighlighter1_1314_1972_Closed_Image.style.display='inline'; Codehighlighter1_1314_1972_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1314_1972_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1314_1972_Closed_Text.style.display='none'; Codehighlighter1_1314_1972_Open_Image.style.display='inline'; Codehighlighter1_1314_1972_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1314_1972_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_1314_1972_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽communfd,n;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr_in聽servaddr;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">聽recieve[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">],buf[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">];聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(argc</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_1409_1449_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1409_1449_Open_Text.style.display='none'; Codehighlighter1_1409_1449_Closed_Image.style.display='inline'; Codehighlighter1_1409_1449_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1409_1449_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1409_1449_Closed_Text.style.display='none'; Codehighlighter1_1409_1449_Open_Image.style.display='inline'; Codehighlighter1_1409_1449_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_1409_1449_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_1409_1449_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Usage:聽client聽</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((communfd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">socket(AF_INET,SOCK_STREAM,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_1502_1540_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1502_1540_Open_Text.style.display='none'; Codehighlighter1_1502_1540_Closed_Image.style.display='inline'; Codehighlighter1_1502_1540_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1502_1540_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1502_1540_Closed_Text.style.display='none'; Codehighlighter1_1502_1540_Open_Image.style.display='inline'; Codehighlighter1_1502_1540_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_1502_1540_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_1502_1540_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">socket聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />servaddr.sin_family</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">AF_INET;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />servaddr.sin_port</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">htons(</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((servaddr.sin_addr.s_addr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">inet_addr(argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]))</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">INADDR_NONE)聽<br /><img id="Codehighlighter1_1667_1708_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1667_1708_Open_Text.style.display='none'; Codehighlighter1_1667_1708_Closed_Image.style.display='inline'; Codehighlighter1_1667_1708_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1667_1708_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1667_1708_Closed_Text.style.display='none'; Codehighlighter1_1667_1708_Open_Image.style.display='inline'; Codehighlighter1_1667_1708_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_1667_1708_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_1667_1708_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">inet_addr聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(connect(communfd,(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">servaddr,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(servaddr))</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_1783_1822_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1783_1822_Open_Text.style.display='none'; Codehighlighter1_1783_1822_Closed_Image.style.display='inline'; Codehighlighter1_1783_1822_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1783_1822_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1783_1822_Closed_Text.style.display='none'; Codehighlighter1_1783_1822_Open_Image.style.display='inline'; Codehighlighter1_1783_1822_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_1783_1822_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_1783_1822_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">connect聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">read(communfd,recieve,</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)聽<br /><img id="Codehighlighter1_1867_1941_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1867_1941_Open_Text.style.display='none'; Codehighlighter1_1867_1941_Closed_Image.style.display='inline'; Codehighlighter1_1867_1941_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1867_1941_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1867_1941_Closed_Text.style.display='none'; Codehighlighter1_1867_1941_Open_Image.style.display='inline'; Codehighlighter1_1867_1941_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_1867_1941_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_1867_1941_Open_Text"><span style="COLOR: #000000">{聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />recieve[n]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(fputs(recieve,stdout)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">EOF)聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fputs聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />close(communfd);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />exit(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span></div>鐢╣cc緙栬瘧涓や釜婧愮▼搴忓垎鍒彇鍚嶄負server鍜宑lient錛屼互鏍圭敤鎴瘋韓浠借繍琛屾湇鍔″櫒紼嬪簭錛堣鏈嶅姟鍣ㄧ綉緇滃湴鍧涓?92.168.0.1錛夛細 <br />server & <br />鐒跺悗榪愯瀹㈡埛鏈虹▼搴忥紙璁炬湇鍔″櫒緗戠粶鍦板潃涓?92.168.0.1錛夛細 <br />client 192.168.0.1 <br />鍦ㄥ鎴鋒満涓婂氨浼氬弽鏄犲嚭鏈嶅姟鍣ㄤ笂褰撳墠鐨勬椂闂村錛圱ue Feb 29 21:46:19 2000錛夈?<br /><br />浠ヤ笂紼嬪簭浠g爜鍦╮edhat 6.0涓婅瘯楠岄氳繃銆傚湪紼嬪簭浠g爜涓湁鍏沖簱鍑芥暟snprintf銆乫puts銆乺ead銆亀rite銆乧lose鐨勭敤娉曞氨涓嶅湪榪欓噷璇存槑浜嗭紝濡傛兂浜嗚В榪欎簺搴撳嚱鏁扮殑璋冪敤鏂規硶鍙埌鎴戠殑緗戦〉http://lzdx.yeah. net/pro_unix.html鍘繪煡鎵俱傚湪鎴戠殑緗戦〉http://lzdx.yeah.net/pro_uici.html涓湁鍏充簬閫氱敤Internet鎺ュ彛錛圲ICI錛変笓鐢ㄥ簱鐨勪粙緇嶏紝閫氱敤Internet鎺ュ彛錛圲ICI錛夊埄鐢⊿ocket搴撳嚱鏁版彁渚涗簡涓涓畝鍖栫殑鐙珛浜庝紶杈撶殑鎺ュ彛錛屽畠浠庢暣浣撲笂綆鍖栦簡緗戠粶紼嬪簭璁捐榪囩▼銆傛湁鍏磋叮鐨勪漢鍙埌閭i噷鍘葷湅鐪嬨傛渶鍚庣鎰挎垜浠瘡涓漢閮借兘緙栧啓鍑鴻嚜宸辯殑緗戠粶紼嬪簭銆?img src ="http://www.shnenglu.com/tx7do/aggbug/5952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tx7do/" target="_blank">鏉ㄧ布娉?/a> 2006-04-20 17:19 <a href="http://www.shnenglu.com/tx7do/articles/5952.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>unix涓嬬紪鍐檚ocket紼嬪簭鐨勪竴鑸楠?/title><link>http://www.shnenglu.com/tx7do/articles/5951.html</link><dc:creator>鏉ㄧ布娉?/dc:creator><author>鏉ㄧ布娉?/author><pubDate>Thu, 20 Apr 2006 09:17:00 GMT</pubDate><guid>http://www.shnenglu.com/tx7do/articles/5951.html</guid><wfw:comment>http://www.shnenglu.com/tx7do/comments/5951.html</wfw:comment><comments>http://www.shnenglu.com/tx7do/articles/5951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tx7do/comments/commentRss/5951.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tx7do/services/trackbacks/5951.html</trackback:ping><description><![CDATA[鍦╱nix涓嬪啓socket紼嬪簭鍙兘鏄渶鏂逛究錛屼綘鍙鎺屾彙鍏朵竴鑸楠わ紝灝卞彲浠ユ澗鐨勫啓鍑洪潰鍚戜紶杈撳眰鐨勫簲鐢ㄣ?<br /><br />銆銆1銆?b>鐞嗚В鍑犱釜甯哥敤鐨剆ocket鍑芥暟</b><br /><br />銆銆#include <sys types.h=""><br /><br />銆銆#include <sys socket.h=""><br /><br />銆銆int socket(int domain,int type,int portocol);<br /><br />銆銆domain鎸囨墍浣跨敤鐨勫崗璁棌(family)鍙互涓篈F_UNIX鍜孉F_INET,涓鑸彧鐢ˋF_INET(鎸嘔nternet)type鎸囨墍鐢ㄧ殑浼犺緭綾誨瀷錛屽彲浠ヤ負SOCK_STERAM(闈㈠悜榪炴帴鐨凾CP),鍜孲OCK_DGRAM(闈㈠悜鏃犺繛鎺ョ殑udp)<br /><br />銆銆int bind(int s,const struct sockaddr *address,size_t address_len);<br /><br />銆銆s涓簊ocket榪斿洖鐨勬枃浠舵弿榪扮<br /><br />銆銆address涓哄崗璁棌鍚嶇О鍜屽叾浠栦俊鎭?br /><br />銆銆鍏蜂綋緇撴瀯涓簊truct sockaddr_in{<br /><br />銆銆銆short sin_family;/*鍗忚鏃?br /><br />銆銆銆u_short sin_port;/*绔彛*/<br /><br />銆銆銆struct in_addr sin_addr;/*鍦板潃*/<br /><br />銆銆銆char sin_zero[8];<br /><br />銆銆};<br /><br />銆銆int listen(int s,int backlog);<br /><br />銆銆<font color="#008000">backlog涓哄璁哥殑璇鋒眰鏁扮洰</font><br /><br />銆銆int accept(int s,struct sockaddr *address,int *address_len);<br /><br />銆銆<font color="#008000">榪欓噷鐨勫墠涓や釜鍙傛暟鍚屼笂</font><br /><br />銆銆<font color="#008000">addres_len鏄浼犻掍竴涓鏈夌粨鏋勫ぇ灝忕殑鍦板潃</font><br /><br />銆銆int connect(int s,struct sockaddr *address,size_t address_len);<br /><br />銆銆<font color="#004000">榪欓噷鐨勫弬鏁版剰涔夊悓bind</font><br /><br />銆銆2.<b>鐞嗚В寤虹珛紼嬪簭鐨勪竴鑸皟鐢ㄨ繃紼?/b><br /><br />銆銆瑕佸緩绔嬩竴涓鐞嗚繛鎺ョ殑鏈嶅姟鍣ㄧ紼嬪簭錛岄鍏堣璋冪敤socket鍑芥暟鍒涘緩涓涓猻ocket,榪斿洖涓涓枃浠跺彞鏌刦d錛屼嬌浠ュ悗瀵瑰畠鐨勬搷浣滃氨璞″鏅氭枃浠惰澶囦竴鏍瘋鍐欍?br /><br />銆銆鐢變簬鏄湇鍔″櫒绔繀欏誨涓涓柇鍙h繘琛岀洃鍚叾浠栨満鍣ㄧ殑璇鋒眰,鎵浠ユ帴涓嬪幓璋冪敤bind鍑芥暟錛屼紶鍏ュ垰鎵嶇殑fd,瀹氫箟濂藉湴鍧鍜岀鍙o紝鐢變簬鏄鎺ュ彈鏉ヨ嚜浠諱綍host鐨勮繛鎺ユ墍浠ュ簲璁瞫in_addr璧嬩負INADDR_ANY,port涓轟綘鎵璁懼畾鐨勭鍙c?br /><br />銆銆<b>娉ㄦ剰</b>錛氳繖閲岀殑鍦板潃鍜岀鍙f槸緗戠粶瀛楄妭欏哄簭錛屾墍浠ヨ璋冪敤htonl,htons瀹屾垚涓繪満瀛楄妭欏哄簭<br />鍒扮綉緇滃瓧鑺傜殑杞彉<br /><br />銆銆鎺ヤ笅鏉ュ氨鏄洃鍚琹isten,璋冪敤accept鎺ュ彈鏉ヨ嚜瀹㈡埛绔殑璇鋒眰錛宎ccpet榪斿洖榪炴帴鍚庣殑鏂囦歡鎻忚堪絎︼紝浣犲氨鍙互鐢ㄥ畠榪涜鏀跺彂淇℃伅錛堝搴斾簬read,write)榪欐牱鐨勪竴涓繃紼嬪氨鏄痵ocket->bind->listen->accpet->Read,write<br />鑰屽浜庡鎴風鍒欐槸socket->connect->read,write <p><span id="hvzpftn" class="txt">3.<b>涓涓畬鏁寸殑紼嬪簭</b><br /></span></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">銆銆#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />銆銆#include聽<br /><img id="Codehighlighter1_35_53_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_53_Open_Text.style.display='none'; Codehighlighter1_35_53_Closed_Image.style.display='inline'; Codehighlighter1_35_53_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_35_53_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_53_Closed_Text.style.display='none'; Codehighlighter1_35_53_Open_Image.style.display='inline'; Codehighlighter1_35_53_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />銆銆#include聽</span><span id="Codehighlighter1_35_53_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_35_53_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">鍖呭惈鏈塰tons絳夊嚱鏁扮殑澶存枃浠?/span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />銆銆#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />銆銆#include聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />銆銆</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">聽main()<br /><img id="Codehighlighter1_98_1277_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_1277_Open_Text.style.display='none'; Codehighlighter1_98_1277_Closed_Image.style.display='inline'; Codehighlighter1_98_1277_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_98_1277_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_98_1277_Closed_Text.style.display='none'; Codehighlighter1_98_1277_Open_Image.style.display='inline'; Codehighlighter1_98_1277_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />銆銆銆</span><span id="Codehighlighter1_98_1277_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_98_1277_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽listenfd,clifd;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">聽pid;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr_in聽myaddr,cliaddr;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽ret;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽len;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆listenfd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">socket(AF_INET,SOCK_STREAM,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">聽(listenfd</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_274_327_Open_Image" onclick="this.style.display='none'; Codehighlighter1_274_327_Open_Text.style.display='none'; Codehighlighter1_274_327_Closed_Image.style.display='inline'; Codehighlighter1_274_327_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_274_327_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_274_327_Closed_Text.style.display='none'; Codehighlighter1_274_327_Open_Image.style.display='inline'; Codehighlighter1_274_327_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆</span><span id="Codehighlighter1_274_327_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_274_327_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">socket聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆exit(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />銆銆銆銆銆}</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆myaddr.sin_family</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">AF_INET;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆myaddr.sin_addr.s_addr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">htonl(INADDR_ANY);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆myaddr.sin_port</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">htons(</span><span style="COLOR: #000000">8888</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆ret</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">bind(listenfd,(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr聽</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">myaddr,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(myaddr));<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">聽(ret</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_527_578_Open_Image" onclick="this.style.display='none'; Codehighlighter1_527_578_Open_Text.style.display='none'; Codehighlighter1_527_578_Closed_Image.style.display='inline'; Codehighlighter1_527_578_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_527_578_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_527_578_Closed_Text.style.display='none'; Codehighlighter1_527_578_Open_Image.style.display='inline'; Codehighlighter1_527_578_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆</span><span id="Codehighlighter1_527_578_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_527_578_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bind聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆exit(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />銆銆銆銆銆}</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆listen(listenfd,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆len</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_656_1268_Open_Image" onclick="this.style.display='none'; Codehighlighter1_656_1268_Open_Text.style.display='none'; Codehighlighter1_656_1268_Closed_Image.style.display='inline'; Codehighlighter1_656_1268_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_656_1268_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_656_1268_Closed_Text.style.display='none'; Codehighlighter1_656_1268_Open_Image.style.display='inline'; Codehighlighter1_656_1268_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆</span><span id="Codehighlighter1_656_1268_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_656_1268_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆clifd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">accept(listenfd,(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">聽sockaddr</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">cliaddr,</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">len);<br /><img id="Codehighlighter1_727_748_Open_Image" onclick="this.style.display='none'; Codehighlighter1_727_748_Open_Text.style.display='none'; Codehighlighter1_727_748_Closed_Image.style.display='inline'; Codehighlighter1_727_748_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_727_748_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_727_748_Closed_Text.style.display='none'; Codehighlighter1_727_748_Open_Image.style.display='inline'; Codehighlighter1_727_748_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆銆聽</span><span id="Codehighlighter1_727_748_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_727_748_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">娉ㄦ剰accept鐨勭涓変釜鍙傛暟涔熸槸鍦板潃</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(clifd</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_777_837_Open_Image" onclick="this.style.display='none'; Codehighlighter1_777_837_Open_Text.style.display='none'; Codehighlighter1_777_837_Closed_Image.style.display='inline'; Codehighlighter1_777_837_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_777_837_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_777_837_Closed_Text.style.display='none'; Codehighlighter1_777_837_Open_Image.style.display='inline'; Codehighlighter1_777_837_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆銆銆</span><span id="Codehighlighter1_777_837_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_777_837_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">accept聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />銆銆銆銆銆銆銆銆}</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">connect聽from聽%s聽%d聽</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,inet_ntoa(cliaddr.sin_addr.s_addr),ntohs(cliaddr.sin_port));<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(pid</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fork())<br /><img id="Codehighlighter1_968_1259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_968_1259_Open_Text.style.display='none'; Codehighlighter1_968_1259_Closed_Image.style.display='inline'; Codehighlighter1_968_1259_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_968_1259_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_968_1259_Closed_Text.style.display='none'; Codehighlighter1_968_1259_Open_Image.style.display='inline'; Codehighlighter1_968_1259_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆銆銆</span><span id="Codehighlighter1_968_1259_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_968_1259_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_986_992_Open_Image" onclick="this.style.display='none'; Codehighlighter1_986_992_Open_Text.style.display='none'; Codehighlighter1_986_992_Closed_Image.style.display='inline'; Codehighlighter1_986_992_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_986_992_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_986_992_Closed_Text.style.display='none'; Codehighlighter1_986_992_Open_Image.style.display='inline'; Codehighlighter1_986_992_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:聽</span><span id="Codehighlighter1_986_992_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_986_992_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">瀛愯繘紼?/span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆close(listenfd);<br /><img id="Codehighlighter1_1034_1047_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1034_1047_Open_Text.style.display='none'; Codehighlighter1_1034_1047_Closed_Image.style.display='inline'; Codehighlighter1_1034_1047_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1034_1047_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1034_1047_Closed_Text.style.display='none'; Codehighlighter1_1034_1047_Open_Image.style.display='inline'; Codehighlighter1_1034_1047_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆;</span><span id="Codehighlighter1_1034_1047_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_1034_1047_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">瀛愯繘紼嬭繘琛屽叾浠栫殑鎿嶄綔</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆close(clifd);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆exit(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">:<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆perror(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fork聽error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_1199_1205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1199_1205_Open_Text.style.display='none'; Codehighlighter1_1199_1205_Closed_Image.style.display='inline'; Codehighlighter1_1199_1205_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1199_1205_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1199_1205_Closed_Text.style.display='none'; Codehighlighter1_1199_1205_Open_Image.style.display='inline'; Codehighlighter1_1199_1205_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:</span><span id="Codehighlighter1_1199_1205_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_1199_1205_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">鐖惰繘紼?/span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆close(clifd);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />銆銆銆銆銆銆銆銆銆銆銆</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />銆銆銆銆銆銆銆銆}</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />銆銆銆銆銆銆銆}</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />銆銆銆銆銆銆}</span></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span></div>銆銆4.<b>紼嬪簭璇存槑</b><br /><br />銆銆璇ョ▼搴忕殑鍔熻兘鏄洃鍚?888绔彛鐨勮繛鎺?瀵規墍鏈夌殑瀵?888绔彛鐨勮繛鎺ユ樉紺哄嚭鍦板潃鍜屽鏂圭殑绔彛鍙瘋紼嬪簭鍦╯co unix涓嬭皟璇曢氳繃錛屽湪鍏朵粬unix鍜宭inux騫沖彴璇鋒敞鎰廼net_ntoa,htons鍑芥暟鎵搴斿湪鐨勫ご鏂囦歡鐨勫悕縐?br /><br />銆銆鍚屾椂璇ョ▼搴忕敤鍒頒簡騫跺彂鐨勮鐐癸紝鍥犱負accept,read,write鍧囦負闃誨(block)鐨勫嚱鏁幫紝涓鏃﹁繘紼媌lock灝嗕笉鑳藉鐞嗗叾浠栬姹傦紝鎵浠ョ敤涓昏繘紼嬭繘琛宭isten,鐢卞瓙榪涚▼榪涜璐熻矗瀵瑰鎴風浼犺緭鏁版嵁. <br /><br />銆銆浣犲彲浠ュ湪鍚屼竴鍙皍nix鏈哄櫒鐢╰elnet localhost 8888榪涜瑙傚療紼嬪簭浼氳緭鍑篶onnect from 127.0.0.1 xxxx<br /></sys></sys><img src ="http://www.shnenglu.com/tx7do/aggbug/5951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tx7do/" target="_blank">鏉ㄧ布娉?/a> 2006-04-20 17:17 <a href="http://www.shnenglu.com/tx7do/articles/5951.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>TCP/IP緙栫▼瀹炵幇榪滅▼鏂囦歡浼犺緭http://www.shnenglu.com/tx7do/articles/5950.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:16:00 GMThttp://www.shnenglu.com/tx7do/articles/5950.htmlhttp://www.shnenglu.com/tx7do/comments/5950.htmlhttp://www.shnenglu.com/tx7do/articles/5950.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5950.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5950.html
TCP/IP緙栫▼瀹炵幇榪滅▼鏂囦歡浼犺緭
聽聽
聽聽聽聽鍦═CP/IP緗戠粶緇撴瀯涓紝涓轟簡淇濊瘉緗戠粶瀹夊叏錛岀綉緇滀漢鍛樺線寰闇瑕佸湪璺敱鍣ㄤ笂娣誨姞闃茬伀澧欙紝紱佹闈炴硶鐢ㄦ埛鐢╢tp絳夊畨鍏ㄥ嵄瀹寵緝澶х殑TCP/IP鍗忚璁塊棶涓繪満銆傝屾湁鏃剁郴緇熺淮鎶や漢鍛橀渶瑕佺敤ftp灝嗕竴浜涙枃浠朵粠涓績鏈烘埧涓繪満浼犲埌鍓嶇緗戠偣涓繪満涓婏紝姣斿搴旂敤紼嬪簭鐨勬浛鎹㈠崌綰с傚鏋滄瘡嬈′紶杈撴枃浠舵椂閮借鎵撳紑闃茬伀澧欙紝鏈厤鏄懼緱鏈変簺綣佺悙錛岃鏄湪鑷繁鐨勫簲鐢ㄧ▼搴忎腑澧炲姞涓涓笓闂ㄧ殑鏂囦歡浼犺緭妯″潡錛岄偅灝嗘槸鍗佸垎鎰夊揩鐨勪簨鎯呫?

銆銆UNIX緗戠粶紼嬪簭璁捐涓鑸兘閲囩敤濂楁帴瀛?socket)緋葷粺璋冪敤銆傞拡瀵圭洰鍓嶅崄鍒嗘祦琛岀殑瀹㈡埛/鏈嶅姟鍣ㄦā寮忥紝鍏剁▼搴忕紪鍐欐楠ゅ涓嬶細
銆銆1.Socket緋葷粺璋冪敤
銆銆涓轟簡榪涜緗戠粶I/O錛屾湇鍔″櫒鍜屽鎴鋒満涓ょ鐨刄NIX榪涚▼瑕佸仛鐨勭涓浠朵簨鏄皟鐢╯ocket()緋葷粺璋冪敤錛屽緩绔嬭蔣鎻掑駭錛屾寚鏄庡悎閫傜殑閫氳鍗忚銆傛牸寮忎負錛?
銆銆錛僫nclude<sys/types.h>
銆銆錛僫nclude<sys/socket.h>
銆銆int聽socket(int聽family,int聽type,int聽protocol)
銆銆鍏朵腑錛?1)family鎸囨槑濂楄妭瀛楁棌錛屽叾鍊煎寘鎷細
銆銆AF_UNIX銆銆聽(UNIX鍐呴儴鍗忚鏃?
銆銆AF_INET銆銆聽(Iternet鍗忚)
銆銆AF_NS聽(XeroxNs鍗忚錛孴CP/IP緙栫▼鍙栬鍊?
銆銆AF_IMPLINK銆聽(IMP閾炬帴灞?
銆銆(2)type聽鎸囨槑濂楁帴瀛楃被鍨嬶紝鍙栧兼湁錛?
銆銆SOCK_STREAM聽銆銆銆銆(嫻佸鎺ュ瓧)
銆銆SOCK_DGRAM聽銆銆銆銆(鏁版嵁鎶ュ鎺ュ瓧)
銆銆SOCK_RAW銆聽銆銆銆銆(鍘熷濂楁帴瀛?
銆銆SOCK_SEQPACKET銆銆聽(瀹氬簭鍒嗙粍濂楁帴瀛?
銆銆涓鑸儏鍐典笅錛屽墠涓や釜鍙傛暟鐨勭粍鍚堝氨鍙互鍐沖畾鎵浣跨敤鐨勫崗璁紝榪欐椂絎笁涓弬鏁拌緗負0錛屽鏋滅涓涓弬鏁頒負AF_INET錛岀浜屼釜鍙傛暟閫塖OCK_STREAM錛屽垯浣跨敤鐨勫崗璁負TCP錛涚浜屼釜鍙傛暟閫塖OCK_DGRAM錛屽垯浣跨敤鐨勫崗璁負UDP錛涘綋絎簩涓弬鏁伴塖OCK_RAW鏃訛紝浣跨敤鐨勫崗璁負IP銆傚煎緱鎸囧嚭鐨勬槸騫朵笉鏄墍鏈夌殑鏃忓拰綾誨瀷鐨勭粍鍚堥兘鏄悎娉曠殑錛屽叿浣撹鏌ラ槄鐩稿叧璧勬枡銆傝緋葷粺璋冪敤鑻ユ垚鍔熷垯榪斿洖涓涓被浼兼枃浠舵弿榪扮錛屾垚涓哄鑺傚瓧鎻忚堪瀛楋紝鍙互鍍忔枃浠舵弿榪扮閭f牱鐢╮ead鍜寃rite瀵瑰叾榪涜I/O鎿嶄綔銆傚綋涓涓繘紼嬩嬌鐢ㄥ畬璇ヨ蔣鎻掑駭鏃訛紝闇鐢╟lose(<鎻忚堪絎?gt;鍏抽棴(鍏蜂綋瑙佸悗闈㈠唴瀹?銆?
銆銆2.鏈嶅姟鍣ㄧBind緋葷粺璋冪敤
銆銆杞彃搴у垱寤烘椂騫舵病鏈変笌浠諱綍鍦板潃鐩稿叧鑱旓紝蹇呴』鐢╞ind()緋葷粺璋冪敤涓哄叾寤虹珛鍦板潃鑱旂郴銆傚叾鏍煎紡涓猴細
銆銆錛僫nclude<sys/types.h>
銆銆錛僫nclude<sys/socket.h>
銆銆int聽bind(int聽socketfd,struct聽sockaddr_in聽錛妉ocaladdr,sizeof(localaddr));
銆銆鍏朵腑錛?1)絎竴涓弬鏁皊ocketfd鏄墠姝ocket()緋葷粺璋冪敤榪斿洖鐨勫鑺傚瓧鎻忚堪絎︺?
銆銆(2)絎簩涓弬鏁拌鎹嗗悜鏈湴鍦板潃鐨勪竴縐嶇粨鏋勶紝璇ョ粨鏋勫湪sys/netinet/in.h涓畾涔夛細
銆銆struct聽sockaddr_in{
銆銆銆short聽sin_family;/錛妔ocket()緋葷粺璋冪敤鐨勫崗璁棌濡侫F_INET錛?
銆銆銆u_short聽sin_port;/錛婄綉緇滃瓧鑺傛搴忓艦寮忕殑绔彛鍙風爜錛?
銆銆銆struct聽in_addr聽sin_addr;/錛婄綉緇滃瓧鑺傛搴忓艦寮忕殑緗戠粶鍦板潃錛?
銆銆銆char聽sin_zero[8];
銆銆}
銆銆涓鍙版満鍣ㄤ笂鐨勬瘡涓綉緇滅▼搴忎嬌鐢ㄤ竴涓悇鑷嫭绔嬬殑绔彛鍙風爜錛屼緥濡傦細telnet紼嬪簭浣跨敤绔彛鍙?3錛岃宖tp鏂囦歡浼犺緭紼嬪簭浣跨敤绔彛鍙?1銆傛垜浠湪璁捐搴旂敤紼嬪簭鏃訛紝绔彛鍙風爜鍙互鐢眊etservbyname()鍑芥暟浠?etc/services搴撴枃浠朵腑鑾峰彇錛屼篃鍙互鐢県tons聽(int聽portnum)鍑芥暟灝嗕換鎰忔鏁存暟杞崲涓虹綉緇滃瓧鑺傛搴忓艦寮忔潵寰楀埌錛屾湁浜涚増鏈殑UNIX鎿嶄綔緋葷粺鍒欒瀹?024浠ヤ笅鐨勭鍙e彿鐮佸彧鍙瓚呯駭鐢ㄦ埛浣跨敤錛屾櫘閫氱敤鎴風▼搴忎嬌鐢ㄧ殑绔彛鍙風爜鍙檺浜?025鍒?2767涔嬮棿銆傜綉緇滃湴鍧鍙互鐢眊ethostbyname(char錛奾ostname)鍑芥暟寰楀埌(璇ュ嚱鏁板拰getservbyname()涓鏍烽兘浠ョ綉緇滃瓧鑺傛搴忓艦寮忚繑鍥炴墍鏈夊湪浠栦滑緇撴瀯涓殑鏁版嵁)錛屽弬鏁癶ostname涓?etc/hosts鏂囦歡涓煇涓緗戠粶鍦板潃鎵瀵瑰簲鐨勬満鍣ㄥ悕銆傝鍑芥暟榪斿洖涓涓被鍨嬩負hostent鐨勭粨鏋勬寚閽堬紝hostent緇撴瀯鍦╪etdb.h涓畾涔夛細
銆銆struct聽hostent{
銆銆聽char聽錛奾_name;
銆銆聽char聽錛婏紛h_aliases;
銆銆聽int聽h_addrtype;
銆銆聽int聽h_length;銆銆/錛婂湴鍧闀垮害錛?
銆銆聽char聽錛婏紛h_addr_list;
銆銆聽錛僤efine聽h_addr聽h_addr_list[0];/錛婂湴鍧錛?
銆銆}
銆銆(3)絎笁涓弬鏁頒負絎簩涓粨鏋勫弬鏁扮殑闀垮害錛屽鏋滆皟鐢ㄦ垚鍔燂紝bind榪斿洖0錛屽惁鍒欏皢榪斿洖錛?騫惰緗甧rrno銆?
銆銆3.鏈嶅姟鍣ㄧ緋葷粺璋冪敤listen錛屼嬌鏈嶅姟鍣ㄦ効鎰忔帴鍙楄繛鎺?
銆銆鏍煎紡錛歩nt聽listen(int聽socketfd,int聽backlong)
銆銆瀹冮氬父鍦╯ocket鍜宐ind璋冪敤鍚庡湪accept璋冪敤鍓嶆墽琛屻傜浜屼釜鍙傛暟鎸囨槑鍦ㄧ瓑寰呮湇鍔″櫒鎵цaccept璋冪敤鏃剁郴緇熷彲浠ユ帓闃熷灝戜釜榪炴帴瑕佹眰銆傛鍙傛暟甯告寚瀹氫負5錛屼篃鏄洰鍓嶅厑璁哥殑鏈澶у箋?
銆銆4.鏈嶅姟鍣ㄨ皟鐢╝ccept,浠ョ瓑寰呭鎴鋒満璋冪敤connect榪涜榪炴帴銆傛牸寮忓涓嬶細
銆銆int聽newsocket=(int聽socketfd,struct聽sockaddr_in聽錛妏eer,int錛奱ddrlen);
銆銆璇ヨ皟鐢ㄥ彇寰楅槦鍒椾笂鐨勭涓涓繛鎺ヨ姹傚茍寤虹珛涓涓叿鏈変笌sockfd鐩稿悓鐗規х殑濂楄妭瀛椼傚鏋滄病鏈夌瓑寰呯殑榪炴帴璇鋒眰錛屾璋冪敤闃誨璋冪敤鑰呯洿鍒頒竴榪炴帴璇鋒眰鍒拌揪銆傝繛鎺ユ垚鍔熷悗錛岃璋冪敤灝嗙敤瀵圭鐨勫湴鍧緇撴瀯鍜屽湴鍧闀垮害濉厖鍙傛暟peer鍜宎ddlen錛屽鏋滃瀹㈡埛绔殑鍦板潃淇℃伅涓嶆劅鍏磋叮錛岃繖涓や釜鍙傛暟鐢?浠f浛銆?
銆銆5.瀹㈡埛绔皟鐢╟onnect()涓庢湇鍔″櫒寤虹珛榪炴帴銆傛牸寮忎負錛?
銆銆connect(int聽socketfd,struct聽sockaddr_in聽錛妔ervsddr,int聽addrlen)
銆銆瀹㈡埛绔彇寰楀鎺ュ瓧鎻忚堪絎﹀悗錛岀敤璇ヨ皟鐢ㄥ緩绔嬩笌鏈嶅姟鍣ㄧ殑榪炴帴錛屽弬鏁皊ocketfd涓簊ocket()緋葷粺璋冪敤榪斿洖鐨勫鑺傚瓧鎻忚堪絎︼紝絎簩鍜岀涓変釜鍙傛暟鏄寚鍚戠洰鐨勫湴鍧鐨勭粨鏋勫強浠ュ瓧鑺傝閲忕殑鐩殑鍦板潃鐨勯暱搴?榪欓噷鐩殑鍦板潃搴斾負鏈嶅姟鍣ㄥ湴鍧)銆傝皟鐢ㄦ垚鍔熻繑鍥?錛屽惁鍒欏皢榪斿洖錛?騫惰緗甧rrno銆?
銆銆6.閫氳繃杞彃搴у彂閫佹暟鎹?
銆銆涓鏃﹀緩绔嬭繛鎺ワ紝灝卞彲浠ョ敤緋葷粺璋冪敤read鍜寃rite鍍忔櫘閫氭枃浠墮偅鏍峰悜緗戠粶涓婂彂閫佸拰鎺ュ彈鏁版嵁銆俁ead鎺ュ彈涓変釜鍙傛暟錛氫竴涓槸濂楄妭瀛楁弿榪扮錛涗竴涓負鏁版嵁灝嗚濉叆鐨勭紦鍐插尯錛岃繕鏈変竴涓暣鏁版寚鏄庤璇葷殑瀛楄妭鏁幫紝瀹冭繑鍥炲疄闄呰鍏ョ殑瀛楄妭鏁幫紝鍑洪敊鏃惰繑鍥烇紞1錛岄亣鍒版枃浠跺熬鍒欒繑鍥?銆俉rite涔熸帴鍙椾笁涓弬鏁幫細涓涓槸濂楄妭瀛楁弿榪扮錛涗竴涓負鎸囧悜闇瑕佸彂閫佹暟鎹殑緙撳啿鍖猴紝榪樻湁涓涓暣鏁版寚鏄庤鍐欏叆鏂囦歡鐨勫瓧鑺備釜鏁幫紝瀹冭繑鍥炲疄闄呭啓鍏ョ殑瀛楄妭鏁幫紝鍑洪敊鏃惰繑鍥烇紞1銆傚綋鐒訛紝涔熷彲浠ヨ皟鐢╯end鍜宺ecv鏉ュ濂楄妭瀛楄繘琛岃鍐欙紝鍏惰皟鐢ㄤ笌鍩烘湰鐨剅ead鍜寃rite緋葷粺璋冪敤鐩鎬技錛屽彧鏄浜嗕竴涓彂閫佹柟寮忓弬鏁般?
銆銆7.閫鍑虹▼搴忔椂錛屽簲鎸夋甯告柟寮忓叧闂鑺傚瓧銆傛牸寮忓涓嬶細
銆銆int聽close(socketfd)
銆銆鍓嶉潰浠嬬粛浜哢NIX瀹㈡埛/鏈嶅姟鍣ㄦā寮忕綉緇滅紪紼嬬殑鍩烘湰鎬濊礬鍜屾楠ゃ傚煎緱鎸囧嚭鐨勬槸socket緙栫▼鎵娑夊強鐨勭郴緇熻皟鐢ㄤ笉灞炰簬鍩烘湰緋葷粺璋冪敤鑼冨洿錛屽叾鍑芥暟鍘熷艦鍦╨ibsocket.a鏂囦歡涓紝鍥犳錛屽湪鐢╟c鍛戒護瀵瑰師紼嬪簭榪涜緙栬瘧鏃墮渶瑕佸甫錛峫socket閫夐」銆?
銆銆鐜板湪錛屾垜浠彲浠ラ拡瀵規枃绔犲紑澶存彁鍑虹殑闂鐫鎵嬭繘琛岀紪紼嬩簡銆傚湪鍥劇ず鐨勭綉緇滅粨鏋勪腑錛屼負浣夸腑蹇冩満鎴跨殑鏈嶅姟鍣ㄨ兘鍜岀綉鐐逛笂鐨勫鎴鋒満榪涜閫氫俊錛岄渶鍦ㄦ湇鍔″櫒绔坊鍔犻氳繃璺敱鍣?顎?顎?顎?鍒板鎴鋒満鐨勮礬鐢憋紝涓ゅ彴瀹㈡埛鏈轟篃蹇呴』娣誨姞閫氳繃璺敱鍣?顎?顎?顎?鍒版湇鍔″櫒鐨勮礬鐢便傚湪鏈嶅姟鍣ㄧ殑/etc/hosts鏂囦歡涓簲璇ュ寘鍚笅闈㈠唴瀹癸細
銆銆1.1.1.1銆銆server
銆銆2.2.2.2銆銆cli1
銆銆2.2.2.3銆銆cli2
銆銆瀹㈡埛鏈虹殑/etc/hosts鏂囦歡涓簲璇ユ湁鏈満鍦板潃淇℃伅鍜屾湇鍔″櫒鐨勫湴鍧淇℃伅錛屽cli1瀹㈡埛鏈虹殑/etc/hosts鏂囦歡錛?
銆銆2.2.2.2銆銆cli1
銆銆1.1.1.1銆銆server
銆銆緗戠粶鐜鎼緩濂藉悗錛屾垜浠彲浠ュ湪鏈嶅姟鍣ㄧ緙栧啓fwq.c紼嬪簭錛岃礋璐f帴鍙楀鎴鋒満鐨勮繛鎺ヨ姹傦紝騫跺皢浠庢簮鏂囦歡涓鍙栫殑鏁版嵁鍙戦佸埌瀹㈡埛鏈恒傚鎴鋒満紼嬪簭khj.c鍚戞湇鍔″櫒鍙戦佽繛鎺ヨ姹傦紝鎺ユ敹浠庢湇鍔″櫒绔彂鏉ョ殑鏁版嵁錛屽茍灝嗘帴鏀跺埌鐨勬暟鎹啓鍏ョ洰鏍囨枃浠躲傛簮紼嬪簭濡備笅錛?
/錛婃湇鍔″櫒婧愮▼搴廸wq.c錛?/span>/
錛僫nclude
<stdio.h>
錛僫nclude
<sys/types.h>
錛僫nclude
<sys/fcntl.h>
錛僫nclude
<sys/socket.h>
錛僫nclude
<sys/netinet/in.h>
錛僫nclude
<netdb.h>
錛僫nclude
<errno.h>
main()聽
{聽
銆銆
char聽c,buf[1024],file[30];聽
銆銆
int聽fromlen,source;聽
銆銆register聽
int聽k,s,ns;聽
銆銆
struct聽sockaddr_in聽sin;聽
銆銆
struct聽hostent聽錛奾p;聽
銆銆system(鈥砪lear鈥?;聽
銆銆printf(鈥砛n鈥?;聽
銆銆聽聽
銆銆printf(鈥砛n\n\t\t杈撳叆瑕佷紶杈撶殑鏂囦歡鍚嶏細鈥?錛浡?br />銆銆scanf(鈥籌紖s鈥?file);聽
銆銆
if聽((source=open(file,O_RDONLY))<0){聽
銆銆銆perror(鈥蟲簮鏂囦歡鎵撳紑鍑洪敊鈥?錛浡?br />銆銆銆exit(
1);聽
銆銆}

銆銆printf(鈥砛n\t\t鍦ㄤ紶閫佹枃浠訛紝紼嶅欌︹?錛浡?br />銆銆hp
=gethostbyname(鈥硈erver鈥?;聽
銆銆
if聽(hp==NULL){聽
銆銆聽perror(鈥寵繑鍥炰富鏈哄湴鍧淇℃伅閿?/span>!!!鈥?錛浡?br />銆銆聽exit(2);聽
銆銆}

銆銆s
=socket(AF_INET,SOCK_STREAM,0);聽
銆銆
if(s<0){聽
銆銆聽perror(鈥寵幏鍙朣OCKET鍙峰け璐?/span>!!!鈥?錛浡?br />銆銆聽exit(3);聽
銆銆}

銆銆sin.sin_family
=AF_INET;聽
銆銆sin.sin_port
=htons(1500);/錛婁嬌鐢ㄧ鍙?500錛?/span>/
銆銆bcopy(hp錛?/span>>h_addr,錛唖in.sin_addr,hp錛?/span>>h_length);聽
銆銆
if(bind(s,錛唖in,sizeof(sin))<0){聽
銆銆銆perror(鈥充笉鑳藉皢鏈嶅姟鍣ㄥ湴鍧鎹嗙粦鍒癝OCKET鍙蜂笂
!!!鈥?錛浡?br />銆銆銆colse(s);聽
銆銆銆exit(
4);聽
銆銆}

銆銆
if(listen(s錛?/span>5)<0{聽
銆銆銆perror(鈥硈ever:listen鈥?;聽
銆銆銆exit(
5);聽
銆銆}

while(1){聽
銆銆
if((ns=accept(s,錛唖in,錛唂romlen))<0){聽
銆銆銆perror(鈥硈ever:accept鈥?錛浡?br />銆銆銆exit(
6);聽
銆銆}

銆銆lseek(source,OL,
0);/錛婃瘡嬈℃帴鍙楀鎴鋒満榪炴帴錛屽簲灝嗙敤浜庤鐨勬簮鏂囦歡鎸囬拡縐誨埌鏂囦歡澶達紛/
銆銆write(ns,file,
sizeof(file))錛浡?/span>/錛婂彂閫佹枃浠跺悕錛?/span>/
銆銆
while((k=read(source,buf,sizeof(buf)))>0)聽
銆銆聽write(ns,buf,k);聽
銆銆printf(鈥砛n\n\t\t浼犺緭瀹屾瘯
!!!\n鈥?;聽
銆銆close(ns);聽
}

銆銆close(source);聽
銆銆exit(
0);聽
銆銆
/錛婂鎴鋒満婧愮▼搴弅hj.c錛?/span>/
銆銆錛僫nclude
<stdio.h>
銆銆錛僫nclude
<sys/types.h>
銆銆錛僫nclude
<sys/fcntl.h>
銆銆錛僫nclude
<sys/socket.h>
銆銆錛僫nclude
<sys/netinet/in.h>
銆銆錛僫nclude
<netdb.h>
銆銆錛僫nclude
<errno.h>
銆銆錛僫nclude聽
<string.h>
銆銆main()聽
銆銆
{聽
銆銆銆
char聽buf[1024],file[30];聽
銆銆銆
char聽錛妔trs=鈥砛n\n\t\t姝e湪鎺ユ敹鏂囦歡鈥籌紱聽
銆銆銆
int聽target;聽
銆銆銆register聽
int聽k,s;聽
銆銆銆
struct聽sockaddr_in聽sin;聽
銆銆銆
struct聽hostent聽錛奾p;聽
銆銆銆system(鈥砪lear鈥?;聽
銆銆銆printf(鈥砛n鈥?;聽
銆銆銆聽聽
銆銆銆hp
=gethostbyname(鈥硈erver鈥?;聽
銆銆銆
if(hp==NULL){聽
銆銆銆銆銆銆銆銆銆銆perror(鈥寵繑鍥炴湇鍔″櫒鍦板潃淇℃伅閿?/span>!!!鈥?錛浡?br />銆銆聽銆exit(1);聽
銆銆銆}

銆銆銆s
=socket(AF_INET錛孲OCK_STREAM,0);聽
銆銆銆
if(s<0){聽
銆銆銆銆perror(鈥寵幏鍙朣OCKET鍙峰け璐?/span>!!!鈥?錛浡?br />銆銆銆銆exit(2);聽
銆銆銆}

銆銆銆sin.sin_family
=AF_INET;聽
銆銆銆sin.sin_port
=htons(1500);/錛婄鍙e彿闇涓庢湇鍔″櫒紼嬪簭浣跨敤鐨勪竴鑷達紛/
銆銆銆bcopy(hp錛?/span>>h_addr,錛唖in.sin_addr,hp錛?/span>>h_length);聽
銆銆銆printf(鈥砛n\n\t\t姝e湪涓庢湇鍔″櫒榪炴帴鈥︹?錛浡?br />銆銆銆
if(connect(s,錛唖in,sizeof(sin),0)<0){聽
銆銆銆銆perror(鈥充笉鑳戒笌鏈嶅姟鍣ㄨ繛鎺?/span>!!!鈥?錛浡?br />銆銆銆銆exit(3);聽
銆銆銆}

銆銆銆
while((k=read(s,file,sizeof(file)))<=0/錛婃帴鏀舵枃浠跺悕錛?/span>/
銆銆聽
if((target=open(file,o_WRONLY|O_CREAT|O_TRUNC,0644))<0){聽
銆銆銆銆perror(鈥充笉鑳芥墦寮鐩爣鏂囦歡
!!鈥?錛浡?br />銆銆銆銆exit(4);聽
銆銆}

銆銆strcat(strs,file);聽
銆銆strcat(strs,鈥籌紝紼嶅欌︹?錛浡?br />銆銆write(
1,strs,strlen(strs));聽
銆銆
while((k=read(s,buf,sizeof(buf)))>0)聽
銆銆銆write(tatget,buf,k);聽
銆銆printf(鈥砛n\n\t\t鎺ユ敹鏂囦歡鎴愬姛
!!!\n鈥?;聽
銆銆close(s);聽
銆銆close(target);聽
銆銆}

銆銆涓婅堪紼嬪簭鍦⊿co聽Unix聽System聽v3.2鍙奡co聽TCP/IP聽Rumtime鐜涓嬭皟璇曢氳繃銆?br />

]]>
AF_UNIX 鍦板潃緋誨垪http://www.shnenglu.com/tx7do/articles/5949.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:15:00 GMThttp://www.shnenglu.com/tx7do/articles/5949.htmlhttp://www.shnenglu.com/tx7do/comments/5949.htmlhttp://www.shnenglu.com/tx7do/articles/5949.html#Feedback0http://www.shnenglu.com/tx7do/comments/commentRss/5949.htmlhttp://www.shnenglu.com/tx7do/services/trackbacks/5949.htmlAF_UNIX 鍦板潃緋誨垪錛堜嬌鐢?AF_UNIX 鎴?AF_UNIX_CCSID 鍦板潃緋誨垪鐨勫鎺ュ瓧錛夊彲浠ユ槸闈㈠悜榪炴帴鐨勶紙綾誨瀷 SOCK_STREAM錛夛紝涔熷彲浠ユ槸鏃犺繛鎺ョ殑錛堢被鍨?SOCK_DGRAM錛夈備袱縐嶇被鍨嬮兘寰堝彲闈狅紝鍘熷洜鏄病鏈夎繛鎺ヤ袱涓繘紼嬬殑澶栭儴閫氫俊鍑芥暟銆?

UNIX 鍩熸暟鎹姤濂楁帴瀛楃殑榪愯鏂瑰紡涓?UDP 鏁版嵁鎶ュ鎺ュ瓧鏈夋墍涓嶅悓銆傚熷姪 UDP 鏁版嵁鎶ュ鎺ュ瓧錛屽鎴鋒満紼嬪簭灝變笉蹇呰皟鐢?bind() 鍑芥暟錛屽師鍥犳槸緋葷粺浼氳嚜鍔ㄦ寚瀹氭湭浣跨敤鐨勭鍙e彿銆備簬鏄湇鍔″櫒鍙皢鏁版嵁鎶ュ彂閫佸洖璇ョ鍙e彿銆備絾鏄紝浣跨敤 UNIX 鍩熸暟鎹姤濂楁帴瀛楋紝緋葷粺涓嶄細鑷姩鎸囧畾瀹㈡埛鏈虹殑璺緞鍚嶃傚洜姝わ紝浣跨敤 UNIX 鍩熸暟鎹姤鐨勬墍鏈夊鎴鋒満紼嬪簭蹇呴』璋冪敤 bind() 鍑芥暟銆傚湪瀹㈡埛鏈虹殑 bind() 涓婃寚瀹氱殑綺劇‘璺緞鍚嶅氨鏄紶閫掕嚦鏈嶅姟鍣ㄧ殑璺緞鍚嶃傚洜姝わ紝濡傛灉瀹㈡埛鏈烘寚瀹氱浉瀵硅礬寰勫悕錛堝嵆錛屽茍闈炰互 / 寮澶寸殑鍏ㄩ檺瀹氳礬寰勫悕錛夛紝闄ら潪鏈嶅姟鍣ㄤ互鍚屼竴褰撳墠鐩綍榪愯錛屽惁鍒欏畠涓嶈兘鍚戝鎴鋒満鍙戦佹暟鎹姤銆?

搴旂敤紼嬪簭鍙兘瀵規鍦板潃緋誨垪浣跨敤鐨勭ず渚嬭礬寰勫悕灝辨槸 /tmp/myserver 鎴?servers/thatserver銆傚熷姪 servers/thatserver錛屽彲浣跨敤騫墮潪鍏ㄩ檺瀹氾紙鏈寚瀹?/錛夌殑璺緞鍚嶃傝繖琛ㄧず璇ラ」鍦ㄦ枃浠剁郴緇熷眰嬈$粨鏋勪腑鐨勪綅緗簲鏍規嵁褰撳墠宸ヤ綔鐩綍紜畾銆?

娉ㄦ剰:
鏂囦歡緋葷粺涓殑璺緞鍚嶆槸鍚敤浜?NLS 鐨勩?

涓嬪浘涓句緥璇存槑浜?AF_UNIX 鍦板潃緋誨垪鐨勫鎴鋒満錛忔湇鍔″櫒鍏崇郴銆傛湁鍏沖皢鐜璁劇疆涓轟嬌鐢?AF_UNIX 鍦板潃緋誨垪鐨勮緇嗕俊鎭紝鍙傝濂楁帴瀛楃紪紼嬬殑鍏堝喅鏉′歡銆?


鍦ㄦ湇鍔″櫒鍜屽鎴鋒満 AF_UNIX 鍦板潃緋誨垪紺轟緥紼嬪簭涓嬌鐢ㄧ殑濂楁帴瀛椾簨浠舵祦銆? src=

濂楁帴瀛椾簨浠舵祦錛氫嬌鐢?AF_UNIX 鍦板潃緋誨垪鐨勬湇鍔″櫒搴旂敤紼嬪簭
紺轟緥錛氫嬌鐢?AF_UNIX 鍦板潃緋誨垪鐨勬湇鍔″櫒搴旂敤紼嬪簭浣跨敤浠ヤ笅鍑芥暟璋冪敤搴忓垪錛?

  1. socket() 鍑芥暟榪斿洖琛ㄧず绔偣鐨勫鎺ュ瓧鎻忚堪絎︺傝璇彞榪樻爣璇嗗皢瀵規濂楁帴瀛椾嬌鐢ㄥ甫鏈夋祦浼犺緭錛圫OCK_STREAM錛夌殑 UNIX 鍦板潃緋誨垪銆傝鍑芥暟榪斿洖琛ㄧず绔偣鐨勫鎺ュ瓧鎻忚堪絎︺傝繕鍙嬌鐢?socketpair() 鍑芥暟鍒濆鍖?UNIX 濂楁帴瀛椼?

    AF_UNIX 鎴?AF_UNIX_CCSID 鏄敮鎸?socketpair() 鍑芥暟鐨勫敮涓鍦板潃緋誨垪銆?b>socketpair() 鍑芥暟榪斿洖鏈懡鍚嶇殑鍜屽凡榪炴帴鐨勫鎺ュ瓧鎻忚堪絎︺?

  2. 鍦ㄥ垱寤哄鎺ュ瓧鎻忚堪絎︿箣鍚庯紝bind() 鍑芥暟鑾峰彇濂楁帴瀛楃殑鍞竴鍚嶇О銆?

    UNIX 鍩熷鎺ュ瓧鐨勫悕縐扮┖闂寸敱璺緞鍚嶇粍鎴愩傚綋濂楁帴瀛楃▼搴忚皟鐢?bind() 鍑芥暟鏃訛紝浼氬湪鏂囦歡緋葷粺鐩綍涓垱寤轟竴欏廣傚鏋滆礬寰勫悕宸插瓨鍦紝鍒?bind() 澶辮觸銆傚洜姝わ紝UNIX 鍩熷鎺ュ瓧紼嬪簭搴旀繪槸璋冪敤 unlink() 鍑芥暟浠ュ湪緇撴潫鏃墮櫎鍘昏鐩綍欏廣?

  3. listen() 鍏佽鏈嶅姟鍣ㄦ帴鍙楀叆灞瀹㈡埛鏈鴻繛鎺ャ傚湪姝ょず渚嬩腑錛屽偍澶囪緗負 10銆傝繖琛ㄧず緋葷粺灝嗗 10 涓叆灞榪炴帴璇鋒眰鎺掗槦錛岀劧鍚庢墠寮濮嬫嫆緇濆叆灞璇鋒眰銆?
  4. recv() 鍑芥暟浠庡鎴鋒満搴旂敤紼嬪簭鎺ユ敹鏁版嵁銆傚湪姝ょず渚嬩腑錛屾垜浠煡閬撳鎴鋒満灝嗗彂閫佽秴榪?250 瀛楄妭鐨勬暟鎹傛棦鐒跺姝わ紝灝卞彲浠ヤ嬌鐢?SO_RCVLOWAT 濂楁帴瀛楅夐」鎸囧畾鍦ㄦ墍鏈?250 瀛楄妭鏁版嵁閮藉埌杈句箣鍓嶄笉瑕佸敜閱?recv()銆?
  5. send() 鍑芥暟灝嗘暟鎹洖浼犺嚦瀹㈡埛鏈恒?
  6. close() 鍑芥暟鍏抽棴鎵鏈夋墦寮鐨勫鎺ュ瓧鎻忚堪絎︺?
  7. unlink() 鍑芥暟浠庢枃浠剁郴緇熼櫎鍘?UNIX 璺緞鍚嶃?

濂楁帴瀛椾簨浠舵祦錛氫嬌鐢?AF_UNIX 鍦板潃緋誨垪鐨勫鎴鋒満搴旂敤紼嬪簭
紺轟緥錛氫嬌鐢?AF_UNIX 鍦板潃緋誨垪鐨勫鎴鋒満搴旂敤紼嬪簭浣跨敤浠ヤ笅鍑芥暟璋冪敤搴忓垪錛?

  1. socket() 鍑芥暟榪斿洖琛ㄧず绔偣鐨勫鎺ュ瓧鎻忚堪絎︺傝璇彞榪樻爣璇嗗皢瀵規濂楁帴瀛椾嬌鐢ㄥ甫鏈夋祦浼犺緭錛圫OCK_STREAM錛夌殑 UNIX 鍦板潃緋誨垪銆傝鍑芥暟榪斿洖琛ㄧず绔偣鐨勫鎺ュ瓧鎻忚堪絎︺傝繕鍙嬌鐢?socketpair() 鍑芥暟鍒濆鍖?UNIX 濂楁帴瀛椼?

    AF_UNIX 鎴?AF_UNIX_CCSID 鏄敮鎸?socketpair() 鍑芥暟鐨勫敮涓鍦板潃緋誨垪銆?b>socketpair() 鍑芥暟榪斿洖鏈懡鍚嶇殑鍜屽凡榪炴帴鐨勫鎺ュ瓧鎻忚堪絎︺?

  2. 鎺ユ敹鍒板鎺ュ瓧鎻忚堪絎﹀悗錛屼嬌鐢?connect() 鍑芥暟鏉ュ緩绔嬩笌鏈嶅姟鍣ㄧ殑榪炴帴銆?
  3. send() 鍑芥暟鍙戦佹寚瀹氱殑 250 瀛楄妭鏁版嵁錛岃鏁版嵁鏄湪鏈嶅姟鍣ㄥ簲鐢ㄧ▼搴忎腑浣跨敤 SO_RCVLOWAT 濂楁帴瀛楅夐」鎸囧畾鐨勩?
  4. recv() 鍑芥暟涓鐩村驚鐜紝鐩村埌鎵鏈?250 瀛楄妭鏁版嵁閮藉埌杈句負姝€?
  5. close() 鍑芥暟鍏抽棴鎵鏈夋墦寮鐨勫鎺ュ瓧鎻忚堪絎︺?


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线视频观看免费网站| 欧美日韩视频第一区| 亚洲精品在线视频观看| 亚洲视频免费| 亚洲精品视频一区二区三区| 欧美精品久久99| 在线精品视频免费观看| 今天的高清视频免费播放成人| 中文欧美字幕免费| 母乳一区在线观看| 欧美**字幕| 午夜激情综合网| 国产精品一卡二卡| 午夜精品久久久久久久99水蜜桃| 亚洲欧美在线aaa| 老巨人导航500精品| 新狼窝色av性久久久久久| 国产精品二区在线| 亚洲一区久久| 亚洲乱码国产乱码精品精| 欧美激情视频在线播放| 最新国产の精品合集bt伙计| 久久在线观看视频| 久久激情五月婷婷| 亚洲成人在线| 欧美成人精品不卡视频在线观看| 久久中文精品| 欧美日韩免费| 亚洲伊人久久综合| 免费不卡中文字幕视频| 性8sex亚洲区入口| 欧美在线视频免费| 亚洲高清网站| 亚洲资源在线观看| 亚洲欧美国产日韩天堂区| 国际精品欧美精品| 一区二区三区精品在线| 99国产精品一区| 国产女人精品视频| 老牛国产精品一区的观看方式| 鲁大师影院一区二区三区| 亚洲激情午夜| 亚洲作爱视频| 国内精品久久久久久久影视蜜臀| 欧美成人午夜剧场免费观看| 久久精品在线| 久久国产精品第一页| 亚洲国产精品成人一区二区| 亚洲国产婷婷| 国产精品视频第一区| 亚洲第一福利社区| 国产精品亚洲成人| 久久久国产精品一区二区中文| 久久精品72免费观看| 一区二区三区|亚洲午夜| 亚洲影院高清在线| 亚洲精品国产系列| 亚洲女人av| 一区二区三区在线免费视频| 亚洲欧美制服另类日韩| 久久中文字幕一区| 亚洲先锋成人| 亚洲免费观看高清在线观看| 国产欧美日韩亚洲| 最新日韩av| 一区二区在线观看av| 亚洲免费观看在线视频| 国产综合第一页| 久久久精品日韩欧美| 国产精品资源| 久久精品国产96久久久香蕉| 久久女同精品一区二区| 欧美三级日本三级少妇99| 久久久久久久久久久成人| 欧美人成免费网站| 美国十次成人| 亚洲美女av黄| 亚洲免费影视第一页| 亚洲一区二区免费视频| 亚洲人成在线播放网站岛国| 久久综合色综合88| 欧美激情1区2区3区| 亚洲精品日韩综合观看成人91| 理论片一区二区在线| 91久久精品网| 亚洲一区二区欧美日韩| 国产精品自拍三区| 久久精品女人的天堂av| 欧美成人小视频| 亚洲图片激情小说| 国产日韩一区二区三区在线| 久久亚洲私人国产精品va| 亚洲人成毛片在线播放女女| 午夜欧美电影在线观看| 在线免费观看欧美| 欧美日韩在线精品一区二区三区| 亚洲一区免费视频| 美女主播精品视频一二三四| 亚洲激情国产精品| 国产精品毛片大码女人| 久久久国产精品一区二区三区| 最新中文字幕一区二区三区| 新67194成人永久网站| 亚洲国内在线| 国产日韩精品一区观看| 欧美伦理91| 久久激情久久| 久久综合色播五月| 欧美激情va永久在线播放| 亚洲国产精品热久久| 欧美手机在线| 欧美成年视频| 久久精品成人一区二区三区蜜臀| 99国产精品久久久久久久成人热| 久久全球大尺度高清视频| 亚洲一区激情| 亚洲另类在线一区| 精品99视频| 国产三级精品在线不卡| 欧美系列亚洲系列| 欧美精品系列| 久久一区二区三区av| 午夜宅男欧美| 99精品国产在热久久| 亚洲高清自拍| 欧美va天堂| 女主播福利一区| 久久久欧美一区二区| 午夜精品www| 亚洲欧美成人在线| 亚洲欧美日韩第一区| 在线综合亚洲欧美在线视频| 亚洲日本中文| 亚洲精品乱码久久久久久蜜桃91| 一区二区在线观看av| 黄色成人精品网站| 国内激情久久| 黄页网站一区| 在线日韩一区二区| 亚洲国产小视频在线观看| 亚洲黄色三级| 一片黄亚洲嫩模| 中文精品在线| 亚洲欧美第一页| 欧美一区免费视频| 久久久www成人免费无遮挡大片 | 亚洲欧美日韩另类精品一区二区三区 | 亚洲乱码国产乱码精品精| 亚洲高清三级视频| 亚洲国产一区二区三区青草影视| 欧美激情第三页| 亚洲人成网站色ww在线| 99精品久久久| 亚洲欧美日韩精品| 久久精品国产欧美亚洲人人爽| 久久精品亚洲国产奇米99| 每日更新成人在线视频| 欧美激情性爽国产精品17p| 欧美日韩在线免费视频| 国产精品美女久久| 精品999网站| 99在线热播精品免费| 欧美一区二区成人| 欧美va日韩va| 亚洲少妇一区| 久久精品中文字幕免费mv| 美女国内精品自产拍在线播放| 欧美精品福利视频| 国产精品自在线| 亚洲高清久久| 亚洲欧美高清| 欧美成人国产va精品日本一级| 亚洲国产国产亚洲一二三| 亚洲性视频h| 裸体女人亚洲精品一区| 欧美日韩在线一区二区| 国产无遮挡一区二区三区毛片日本| 今天的高清视频免费播放成人| 亚洲精品美女在线| 久久av红桃一区二区小说| 欧美寡妇偷汉性猛交| 在线性视频日韩欧美| 久久久久国产一区二区三区四区| 国产精品一区二区久久久| 欧美国产日韩一区二区在线观看| 99这里只有精品| 久久久91精品国产| 国产精品久久久久久久久| 狠狠干成人综合网| 亚洲一区二区三区在线视频| 老司机成人在线视频| 亚洲视频观看| 欧美精品v国产精品v日韩精品 | 欧美精品国产一区二区| 精品成人一区二区三区四区| 亚洲欧美三级在线| 亚洲欧洲精品一区二区| 久久精品视频在线播放| 国产欧美精品日韩| 亚洲欧美综合v|