锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日本人成中文字幕,亚洲一线产区二线产区精华,亚洲一区二区三区亚瑟http://www.tkk7.com/john_yu/category/24348.html姝e湪瀛︿範涓細錛?/description>zh-cnWed, 26 Dec 2007 22:37:04 GMTWed, 26 Dec 2007 22:37:04 GMT60甯哥敤鐨凪Q鍛戒護http://www.tkk7.com/john_yu/archive/2007/12/26/170644.htmljohnjohnWed, 26 Dec 2007 09:26:00 GMThttp://www.tkk7.com/john_yu/archive/2007/12/26/170644.htmlhttp://www.tkk7.com/john_yu/comments/170644.htmlhttp://www.tkk7.com/john_yu/archive/2007/12/26/170644.html#Feedback0http://www.tkk7.com/john_yu/comments/commentRss/170644.htmlhttp://www.tkk7.com/john_yu/services/trackbacks/170644.html鏈榪戝湪閰嶇疆MQ,璁頒笅浜嗕竴浜涘父鐢ㄧ殑MQ鍛戒護,濡備笅:

鍒涘緩闃熷垪綆$悊鍣?
crtmqm –q QMgrName
-q鏄寚鍒涘緩緙虹渷鐨勯槦鍒楃鐞嗗櫒

鍒犻櫎闃熷垪綆$悊鍣?
dltmqm QmgrName

鍚姩闃熷垪綆$悊鍣?
strmqm QmgrName
濡傛灉鏄惎鍔ㄩ粯璁ょ殑闃熷垪綆$悊鍣紝鍙互涓嶅甫鍏跺悕瀛?

鍋滄闃熷垪綆$悊鍣?
endmqm QmgrName 鍙楁帶鍋滄

endmqm –i QmgrName 绔嬪嵆鍋滄

endmqm –p QmgrName 寮哄埗鍋滄

鏄劇ず闃熷垪綆$悊鍣?
dspmq –m QmgrName

榪愯MQ鍛戒護
runmqsc QmgrName
濡傛灉鏄粯璁ら槦鍒楃鐞嗗櫒錛屽彲浠ヤ笉甯﹀叾鍚嶅瓧

寰闃熷垪涓斁娑堟伅
amqsput QName QmgrName
濡傛灉闃熷垪鏄粯璁ら槦鍒楃鐞嗗櫒涓殑闃熷垪錛屽彲浠ヤ笉甯﹀叾闃熷垪綆$悊鍣ㄧ殑鍚嶅瓧

浠庨槦鍒椾腑鍙栧嚭娑堟伅
amqsget QName QmgrName
濡傛灉闃熷垪鏄粯璁ら槦鍒楃鐞嗗櫒涓殑闃熷垪錛屽彲浠ヤ笉甯﹀叾闃熷垪綆$悊鍣ㄧ殑鍚嶅瓧

鍚姩閫氶亾
runmqchl –c ChlName –m QmgrName

鍚姩渚﹀惉
runmqlsr –t TYPE –p PORT –m QMgrName

鍋滄渚﹀惉
endmqlsr -m QmgrName

涓嬮潰鏄湪MQ鐜涓彲浠ユ墽琛岀殑MQ鍛戒護(鍗沖湪runmqsc鐜涓嬪彲浠ユ暡鐨勫懡浠?

瀹氫箟鎸佷箙淇¢槦鍒?
DEFINE QLOCAL錛圦NAME錛?DEFPSIST錛圷ES錛?REPLACE

璁懼畾闃熷垪綆$悊鍣ㄧ殑鎸佷箙淇¢槦鍒?
ALTER QMGR DEADQ錛圦NAME錛?

瀹氫箟鏈湴闃熷垪
DEFINE QL錛圦NAME錛?REPLACE

瀹氫箟鍒悕闃熷垪
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)

榪滅▼闃熷垪瀹氫箟
DEFINE QREMOTE錛圦RNAME錛?+
RNAME錛圓AA錛?RQMNAME錛圦MGRNAME錛?+
XMITQ錛圦TNAME錛?

瀹氫箟妯″瀷闃熷垪
DEFINE QMODEL錛圦NAME錛?DEFTYPE錛圱EMPDYN錛?

瀹氫箟鏈湴浼犺緭闃熷垪
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ錛圫YSTEM.CHANNEL.INITQ錛?
PROCESS(PROCESSNAME) REPLACE

鍒涘緩榪涚▼瀹氫箟
DEFINE PROCESS錛圥RONAME錛?+
DESCR錛?#8216;STRING’錛?
APPLTYPE錛圵INDOWSNT錛?
APPLICID錛?#8217; runmqchl -c SDR_TEST -m QM_ TEST’錛?
鍏朵腑APPLTYPE鐨勫煎彲浠ユ槸錛欳ICS銆乁NIX銆乄INDOWS銆乄INDOWSNT絳?

鍒涘緩鍙戦佹柟閫氶亾
DEFINE CHANNEL錛圫DRNAME錛?CHLTYPE錛圫DR錛?
CONNAME錛?#8216;100.100.100.215(1418)’錛?XMITQ錛圦TNAME錛?REPLACE
鍏朵腑CHLTYPE鍙互鏄細SDR銆丼VR銆丷CVR銆丷QSTR銆丆LNTCONN銆丼VRCONN銆丆LUSSDR鍜孋LUSRCVR銆?

鍒涘緩鎺ユ敹鏂歸氶亾
DEFINE CHANNEL錛圫DR_ TEST錛?CHLTYPE錛圧CVR錛?REPLACE

鍒涘緩鏈嶅姟鍣ㄨ繛鎺ラ氶亾
DEFINE CHANNEL錛圫VRCONNNAME錛?CHLTYPE錛圫VRCONN錛?REPLACE

鏄劇ず闃熷垪鐨勬墍鏈夊睘鎬?
DISPLAY QUEUE錛圦NAME錛?[ALL]

鏄劇ず闃熷垪鐨勬墍閫夊睘鎬?
DISPLAY QUEUE錛圦NAME錛?DESCR GET PUT
DISPLAY QUEUE錛圦NAME錛塎AXDEPTH CURDEPTH

鏄劇ず闃熷垪綆$悊鍣ㄧ殑鎵鏈夊睘鎬?
DISPLAY QMGR [ALL]

鏄劇ず榪涚▼瀹氫箟
DISPLAY PROCESS錛圥RONAME錛?

鏇存敼灞炴?
ALTER QMGR DESCR錛?#8216;NEW DESCRIPTION’錛?
ALTER QLOCAL錛圦NAME錛?PUT錛圖ISABLED錛?
ALTER QALIAS錛圦NAME錛?TARGQ錛圱ARGQNAME錛?

鍒犻櫎闃熷垪
DELETE QLOCAL錛圦NAME錛?
DELETE QREMOTE錛圦RNAME錛?

娓呴櫎闃熷垪涓殑鎵鏈夋秷鎭?
CLEAR QLOCAL錛圦NAME錛?

浠ヤ笅鏄竴浜涢珮綰ч厤緗殑鍛戒護:

amqmcert                  閰嶇疆SSL璇佷功

amqmdain                閰嶇疆windows涓婄殑MQ鏈嶅姟

crtmqcvx                    杞崲鏁版嵁

dmpmqaut                杞偍瀵硅薄鏉冮檺綆$悊

dmpmqlog                杞偍鏃ュ織綆$悊

dspmq                         鏄劇ず闃熷垪綆$悊鍣?/p>

dspmqaut                  鏄劇ず鎵撳紑瀵硅薄鐨勬潈闄?/p>

dmpmqcap               鏄劇ず澶勭悊紼嬪簭瀹歸噺鍜屽鐞嗙▼搴忔暟

dspmqcsv                 鏄劇ず鍛戒護鏈嶅姟鍣ㄧ姸鎬?/p>

dspmqfls                   鏄劇ず鏂囦歡鍚?/p>

dspmqtrc                   璺熻釜MQ杈撳嚭(HP-UNIX LINUX Solaris)

dspmqrtn                   鏄劇ず浜嬪姟鐨勮緇嗕俊鎭?/p>

endmqcsv                 鍋滄闃熷垪綆$悊鍣ㄤ笂鐨勫懡浠ゆ湇鍔″櫒

strmqcsv                    鍚姩闃熷垪綆$悊鍣ㄤ笂鐨勫懡浠ゆ湇鍔″櫒

endmqtrc                   鍋滄璺熻釜

rcdmqimg                  鍚戞棩蹇楀啓瀵硅薄鐨勬槧鍍?/p>

rcmqobj                      鏍規嵁鏃ュ織涓殑鏄犲儚閲嶆柊鍒涘緩涓涓璞?/p>

rsvmqtrn                     鎻愪氦鎴栭嗗簭鎭㈠浜嬪姟

 




john 2007-12-26 17:26 鍙戣〃璇勮
]]>
Linux緋葷粺鐜涓嬬殑Socket緙栫▼璇︾粏瑙f瀽http://www.tkk7.com/john_yu/archive/2007/07/23/131945.htmljohnjohnMon, 23 Jul 2007 14:45:00 GMThttp://www.tkk7.com/john_yu/archive/2007/07/23/131945.htmlhttp://www.tkk7.com/john_yu/comments/131945.htmlhttp://www.tkk7.com/john_yu/archive/2007/07/23/131945.html#Feedback0http://www.tkk7.com/john_yu/comments/commentRss/131945.htmlhttp://www.tkk7.com/john_yu/services/trackbacks/131945.htmlLinux緋葷粺鐜涓嬬殑Socket緙栫▼璇︾粏瑙f瀽

浠涔堟槸Socket

銆銆Socket鎺ュ彛鏄疶CP/IP緗戠粶鐨凙PI錛孲ocket鎺ュ彛瀹氫箟浜嗚澶氬嚱鏁版垨渚嬬▼錛岀▼搴忓憳鍙互鐢ㄥ畠浠潵寮鍙慣CP/IP緗戠粶涓婄殑搴旂敤紼嬪簭銆傝瀛nternet涓婄殑TCP/IP緗戠粶緙栫▼錛屽繀欏葷悊瑙ocket鎺ュ彛銆?

銆銆Socket鎺ュ彛璁捐鑰呮渶鍏堟槸灝嗘帴鍙f斁鍦║nix鎿嶄綔緋葷粺閲岄潰鐨勩傚鏋滀簡瑙nix緋葷粺鐨勮緭鍏ュ拰杈撳嚭鐨勮瘽錛屽氨寰堝鏄撲簡瑙ocket浜嗐傜綉緇滅殑Socket鏁版嵁浼犺緭鏄竴縐嶇壒孌婄殑I/O錛孲ocket涔熸槸涓縐嶆枃浠舵弿榪扮銆係ocket涔熷叿鏈変竴涓被浼間簬鎵撳紑鏂囦歡鐨勫嚱鏁拌皟鐢⊿ocket()錛岃鍑芥暟榪斿洖涓涓暣鍨嬬殑Socket鎻忚堪絎︼紝闅忓悗鐨勮繛鎺ュ緩绔嬨佹暟鎹紶杈撶瓑鎿嶄綔閮芥槸閫氳繃璇ocket瀹炵幇鐨勩傚父鐢ㄧ殑Socket綾誨瀷鏈変袱縐嶏細嫻佸紡Socket錛圫OCK_STREAM錛夊拰鏁版嵁鎶ュ紡Socket錛圫OCK_DGRAM錛夈傛祦寮忔槸涓縐嶉潰鍚戣繛鎺ョ殑Socket錛岄拡瀵逛簬闈㈠悜榪炴帴鐨凾CP鏈嶅姟搴旂敤錛涙暟鎹姤寮廠ocket鏄竴縐嶆棤榪炴帴鐨凷ocket錛屽搴斾簬鏃犺繛鎺ョ殑UDP鏈嶅姟搴旂敤銆?

銆銆Socket寤虹珛

銆銆涓轟簡寤虹珛Socket錛岀▼搴忓彲浠ヨ皟鐢⊿ocket鍑芥暟錛岃鍑芥暟榪斿洖涓涓被浼間簬鏂囦歡鎻忚堪絎︾殑鍙ユ焺銆俿ocket鍑芥暟鍘熷瀷涓猴細

銆銆int socket(int domain, int type, int protocol);

銆銆domain鎸囨槑鎵浣跨敤鐨勫崗璁棌錛岄氬父涓篜F_INET錛岃〃紺轟簰鑱旂綉鍗忚鏃忥紙TCP/IP鍗忚鏃忥級錛泃ype鍙傛暟鎸囧畾socket鐨勭被鍨嬶細SOCK_STREAM 鎴朣OCK_DGRAM錛孲ocket鎺ュ彛榪樺畾涔変簡鍘熷Socket錛圫OCK_RAW錛夛紝鍏佽紼嬪簭浣跨敤浣庡眰鍗忚錛沺rotocol閫氬父璧嬪?0"銆係ocket()璋冪敤榪斿洖涓涓暣鍨媠ocket鎻忚堪絎︼紝浣犲彲浠ュ湪鍚庨潰鐨勮皟鐢ㄤ嬌鐢ㄥ畠銆?/span>

銆銆Socket鎻忚堪絎︽槸涓涓寚鍚戝唴閮ㄦ暟鎹粨鏋勭殑鎸囬拡錛屽畠鎸囧悜鎻忚堪絎﹁〃鍏ュ彛銆傝皟鐢⊿ocket鍑芥暟鏃訛紝socket鎵ц浣撳皢寤虹珛涓涓猄ocket錛屽疄闄呬笂"寤虹珛涓涓猄ocket"鎰忓懗鐫涓轟竴涓猄ocket鏁版嵁緇撴瀯鍒嗛厤瀛樺偍絀洪棿銆係ocket鎵ц浣撲負浣犵鐞嗘弿榪扮琛ㄣ?/span>

銆銆涓や釜緗戠粶紼嬪簭涔嬮棿鐨勪竴涓綉緇滆繛鎺ュ寘鎷簲縐嶄俊鎭細閫氫俊鍗忚銆佹湰鍦板崗璁湴鍧銆佹湰鍦頒富鏈虹鍙c佽繙绔富鏈哄湴鍧鍜岃繙绔崗璁鍙c係ocket鏁版嵁緇撴瀯涓寘鍚繖浜旂淇℃伅銆?

銆銆Socket閰嶇疆

銆銆閫氳繃socket璋冪敤榪斿洖涓涓猻ocket鎻忚堪絎﹀悗錛屽湪浣跨敤socket榪涜緗戠粶浼犺緭浠ュ墠錛屽繀欏婚厤緗socket銆傞潰鍚戣繛鎺ョ殑socket瀹㈡埛绔氳繃璋冪敤Connect鍑芥暟鍦╯ocket鏁版嵁緇撴瀯涓繚瀛樻湰鍦板拰榪滅淇℃伅銆傛棤榪炴帴socket鐨勫鎴風鍜屾湇鍔$浠ュ強闈㈠悜榪炴帴socket鐨勬湇鍔$閫氳繃璋冪敤bind鍑芥暟鏉ラ厤緗湰鍦頒俊鎭?
Bind鍑芥暟灝唖ocket涓庢湰鏈轟笂鐨勪竴涓鍙g浉鍏寵仈錛岄殢鍚庝綘灝卞彲浠ュ湪璇ョ鍙g洃鍚湇鍔¤姹傘侭ind鍑芥暟鍘熷瀷涓猴細

銆銆

int bind(int sockfd,struct sockaddr *my_addr, int addrlen); 
銆銆Sockfd鏄皟鐢╯ocket鍑芥暟榪斿洖鐨剆ocket鎻忚堪絎? my_addr鏄竴涓寚鍚戝寘鍚湁鏈満IP鍦板潃鍙婄鍙e彿絳変俊鎭殑sockaddr綾誨瀷鐨勬寚閽堬紱 addrlen甯歌璁劇疆涓簊izeof(struct sockaddr)銆?
銆銆struct sockaddr緇撴瀯綾誨瀷鏄敤鏉ヤ繚瀛榮ocket淇℃伅鐨勶細
銆銆struct sockaddr {
銆銆 unsigned short sa_family; /* 鍦板潃鏃忥紝 AF_xxx */
char sa_data[14]; /* 14 瀛楄妭鐨勫崗璁湴鍧 */
};
銆銆sa_family涓鑸負AF_INET錛屼唬琛↖nternet錛圱CP/IP錛夊湴鍧鏃忥紱sa_data
鍒欏寘鍚socket鐨処P鍦板潃鍜岀鍙e彿銆?
銆銆鍙﹀榪樻湁涓縐嶇粨鏋勭被鍨嬶細
銆銆struct sockaddr_in {
銆銆 short int sin_family; /* 鍦板潃鏃?*/
銆銆 unsigned short int sin_port; /* 绔彛鍙?*/
銆銆 struct in_addr sin_addr; /* IP鍦板潃 */
銆銆 unsigned char sin_zero[8]; /* 濉厖0 浠ヤ繚鎸佷笌struct sockaddr鍚屾牱澶у皬 */
銆銆};

 

銆銆榪欎釜緇撴瀯鏇存柟渚夸嬌鐢ㄣ俿in_zero鐢ㄦ潵灝唖ockaddr_in緇撴瀯濉厖鍒頒笌struct sockaddr鍚屾牱鐨勯暱搴︼紝鍙互鐢╞zero()鎴杕emset()鍑芥暟灝嗗叾緗負闆躲傛寚鍚憇ockaddr_in 鐨勬寚閽堝拰鎸囧悜sockaddr鐨勬寚閽堝彲浠ョ浉浜掕漿鎹紝榪欐剰鍛崇潃濡傛灉涓涓嚱鏁版墍闇鍙傛暟綾誨瀷鏄痵ockaddr鏃訛紝浣犲彲浠ュ湪鍑芥暟璋冪敤鐨勬椂鍊欏皢涓涓寚鍚憇ockaddr_in鐨勬寚閽堣漿鎹負鎸囧悜sockaddr鐨勬寚閽堬紱鎴栬呯浉鍙嶃?

銆銆浣跨敤bind鍑芥暟鏃訛紝鍙互鐢ㄤ笅闈㈢殑璧嬪煎疄鐜拌嚜鍔ㄨ幏寰楁湰鏈篒P鍦板潃鍜岄殢鏈鴻幏鍙栦竴涓病鏈夎鍗犵敤鐨勭鍙e彿錛?

銆銆my_addr.sin_port = 0; /* 緋葷粺闅忔満閫夋嫨涓涓湭琚嬌鐢ㄧ殑绔彛鍙?*/
銆銆my_addr.sin_addr.s_addr = INADDR_ANY; /* 濉叆鏈満IP鍦板潃 */
閫氳繃灝唌y_addr.sin_port緗負0錛屽嚱鏁頒細鑷姩涓轟綘閫夋嫨涓涓湭鍗犵敤鐨勭鍙f潵浣跨敤銆傚悓鏍鳳紝閫氳繃灝唌y_addr.sin_addr.s_addr緗負INADDR_ANY錛岀郴緇熶細鑷姩濉叆鏈満IP鍦板潃銆?/span>

銆銆娉ㄦ剰鍦ㄤ嬌鐢╞ind鍑芥暟鏄渶瑕佸皢sin_port鍜宻in_addr杞崲鎴愪負緗戠粶瀛楄妭浼樺厛欏哄簭錛涜宻in_addr鍒欎笉闇瑕佽漿鎹€?/span>

銆銆璁$畻鏈烘暟鎹瓨鍌ㄦ湁涓ょ瀛楄妭浼樺厛欏哄簭錛氶珮浣嶅瓧鑺備紭鍏堝拰浣庝綅瀛楄妭浼樺厛銆侷nternet涓婃暟鎹互楂樹綅瀛楄妭浼樺厛欏哄簭鍦ㄧ綉緇滀笂浼犺緭錛屾墍浠ュ浜庡湪鍐呴儴鏄互浣庝綅瀛楄妭浼樺厛鏂瑰紡瀛樺偍鏁版嵁鐨勬満鍣紝鍦↖nternet涓婁紶杈撴暟鎹椂灝遍渶瑕佽繘琛岃漿鎹紝鍚﹀垯灝變細鍑虹幇鏁版嵁涓嶄竴鑷淬?/span>

銆銆涓嬮潰鏄嚑涓瓧鑺傞『搴忚漿鎹㈠嚱鏁幫細

·htonl()錛氭妸32浣嶅間粠涓繪満瀛楄妭搴忚漿鎹㈡垚緗戠粶瀛楄妭搴?
·htons()錛氭妸16浣嶅間粠涓繪満瀛楄妭搴忚漿鎹㈡垚緗戠粶瀛楄妭搴?
·ntohl()錛氭妸32浣嶅間粠緗戠粶瀛楄妭搴忚漿鎹㈡垚涓繪満瀛楄妭搴?
·ntohs()錛氭妸16浣嶅間粠緗戠粶瀛楄妭搴忚漿鎹㈡垚涓繪満瀛楄妭搴?

 

銆銆Bind()鍑芥暟鍦ㄦ垚鍔熻璋冪敤鏃惰繑鍥?錛涘嚭鐜伴敊璇椂榪斿洖"-1"騫跺皢errno緗負鐩稿簲鐨勯敊璇彿銆傞渶瑕佹敞鎰忕殑鏄紝鍦ㄨ皟鐢╞ind鍑芥暟鏃朵竴鑸笉瑕佸皢绔彛鍙風疆涓哄皬浜?024鐨勫鹼紝鍥犱負1鍒?024鏄繚鐣欑鍙e彿錛屼綘鍙互閫夋嫨澶т簬1024涓殑浠諱綍涓涓病鏈夎鍗犵敤鐨勭鍙e彿銆?

榪炴帴寤虹珛

 

銆銆闈㈠悜榪炴帴鐨勫鎴風▼搴忎嬌鐢–onnect鍑芥暟鏉ラ厤緗畇ocket騫朵笌榪滅鏈嶅姟鍣ㄥ緩绔嬩竴涓猅CP榪炴帴錛屽叾鍑芥暟鍘熷瀷涓猴細

銆銆int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);
Sockfd鏄痵ocket鍑芥暟榪斿洖鐨剆ocket鎻忚堪絎︼紱serv_addr鏄寘鍚繙绔富鏈篒P鍦板潃鍜岀鍙e彿鐨勬寚閽堬紱addrlen鏄繙绔湴璐ㄧ粨鏋勭殑闀垮害銆侰onnect鍑芥暟鍦ㄥ嚭鐜伴敊璇椂榪斿洖-1錛屽茍涓旇緗甧rrno涓虹浉搴旂殑閿欒鐮併傝繘琛屽鎴風紼嬪簭璁捐鏃犻』璋冪敤bind()錛屽洜涓鴻繖縐嶆儏鍐典笅鍙渶鐭ラ亾鐩殑鏈哄櫒鐨処P鍦板潃錛岃屽鎴烽氳繃鍝釜绔彛涓庢湇鍔″櫒寤虹珛榪炴帴騫朵笉闇瑕佸叧蹇冿紝socket鎵ц浣撲負浣犵殑紼嬪簭鑷姩閫夋嫨涓涓湭琚崰鐢ㄧ殑绔彛錛屽茍閫氱煡浣犵殑紼嬪簭鏁版嵁浠涔堟椂鍊欏埌鎵撴柇鍙c?/span>

銆銆Connect鍑芥暟鍚姩鍜岃繙绔富鏈虹殑鐩存帴榪炴帴銆傚彧鏈夐潰鍚戣繛鎺ョ殑瀹㈡埛紼嬪簭浣跨敤socket鏃舵墠闇瑕佸皢姝ocket涓庤繙绔富鏈虹浉榪炪傛棤榪炴帴鍗忚浠庝笉寤虹珛鐩存帴榪炴帴銆傞潰鍚戣繛鎺ョ殑鏈嶅姟鍣ㄤ篃浠庝笉鍚姩涓涓繛鎺ワ紝瀹冨彧鏄鍔ㄧ殑鍦ㄥ崗璁鍙g洃鍚鎴風殑璇鋒眰銆?

銆銆Listen鍑芥暟浣縮ocket澶勪簬琚姩鐨勭洃鍚ā寮忥紝騫朵負璇ocket寤虹珛涓涓緭鍏ユ暟鎹槦鍒楋紝灝嗗埌杈劇殑鏈嶅姟璇鋒眰淇濆瓨鍦ㄦ闃熷垪涓紝鐩村埌紼嬪簭澶勭悊瀹冧滑銆?/span>

銆銆int listen(int sockfd錛?int backlog);

銆銆Sockfd鏄疭ocket緋葷粺璋冪敤榪斿洖鐨剆ocket 鎻忚堪絎︼紱backlog鎸囧畾鍦ㄨ姹傞槦鍒椾腑鍏佽鐨勬渶澶ц姹傛暟錛岃繘鍏ョ殑榪炴帴璇鋒眰灝嗗湪闃熷垪涓瓑寰卆ccept()瀹冧滑錛堝弬鑰冧笅鏂囷級銆侭acklog瀵歸槦鍒椾腑絳夊緟鏈嶅姟鐨勮姹傜殑鏁扮洰榪涜浜嗛檺鍒訛紝澶у鏁扮郴緇熺己鐪佸間負20銆傚鏋滀竴涓湇鍔¤姹傚埌鏉ユ椂錛岃緭鍏ラ槦鍒楀凡婊★紝璇ocket灝嗘嫆緇濊繛鎺ヨ姹傦紝瀹㈡埛灝嗘敹鍒頒竴涓嚭閿欎俊鎭?/span>

銆銆褰撳嚭鐜伴敊璇椂listen鍑芥暟榪斿洖-1錛屽茍緗浉搴旂殑errno閿欒鐮併?/span>

銆銆accept()鍑芥暟璁╂湇鍔″櫒鎺ユ敹瀹㈡埛鐨勮繛鎺ヨ姹傘傚湪寤虹珛濂借緭鍏ラ槦鍒楀悗錛屾湇鍔″櫒灝辮皟鐢╝ccept鍑芥暟錛岀劧鍚庣潯鐪犲茍絳夊緟瀹㈡埛鐨勮繛鎺ヨ姹傘?/span>

銆銆int accept(int sockfd, void *addr, int *addrlen);

銆銆sockfd鏄鐩戝惉鐨剆ocket鎻忚堪絎︼紝addr閫氬父鏄竴涓寚鍚憇ockaddr_in鍙橀噺鐨勬寚閽堬紝璇ュ彉閲忕敤鏉ュ瓨鏀炬彁鍑鴻繛鎺ヨ姹傛湇鍔$殑涓繪満鐨勪俊鎭紙鏌愬彴涓繪満浠庢煇涓鍙e彂鍑鴻璇鋒眰錛夛紱addrten閫氬父涓轟竴涓寚鍚戝間負sizeof(struct sockaddr_in)鐨勬暣鍨嬫寚閽堝彉閲忋傚嚭鐜伴敊璇椂accept鍑芥暟榪斿洖-1騫剁疆鐩稿簲鐨別rrno鍊箋?/span>

銆銆棣栧厛錛屽綋accept鍑芥暟鐩戣鐨剆ocket鏀跺埌榪炴帴璇鋒眰鏃訛紝socket鎵ц浣撳皢寤虹珛涓涓柊鐨剆ocket錛屾墽琛屼綋灝嗚繖涓柊socket鍜岃姹傝繛鎺ヨ繘紼嬬殑鍦板潃鑱旂郴璧鋒潵錛屾敹鍒版湇鍔¤姹傜殑鍒濆socket浠嶅彲浠ョ戶緇湪浠ュ墠鐨?socket涓婄洃鍚紝鍚屾椂鍙互鍦ㄦ柊鐨剆ocket鎻忚堪絎︿笂榪涜鏁版嵁浼犺緭鎿嶄綔銆?

銆銆鏁版嵁浼犺緭

銆銆Send()鍜宺ecv()榪欎袱涓嚱鏁扮敤浜庨潰鍚戣繛鎺ョ殑socket涓婅繘琛屾暟鎹紶杈撱?

銆銆Send()鍑芥暟鍘熷瀷涓猴細

銆銆int send(int sockfd, const void *msg, int len, int flags);
Sockfd鏄綘鎯崇敤鏉ヤ紶杈撴暟鎹殑socket鎻忚堪絎︼紱msg鏄竴涓寚鍚戣鍙戦佹暟鎹殑鎸囬拡錛汱en鏄互瀛楄妭涓哄崟浣嶇殑鏁版嵁鐨勯暱搴︼紱flags涓鑸儏鍐典笅緗負0錛堝叧浜庤鍙傛暟鐨勭敤娉曞彲鍙傜収man鎵嬪唽錛夈?

銆銆Send()鍑芥暟榪斿洖瀹為檯涓婂彂閫佸嚭鐨勫瓧鑺傛暟錛屽彲鑳戒細灝戜簬浣犲笇鏈涘彂閫佺殑鏁版嵁銆傚湪紼嬪簭涓簲璇ュ皢send()鐨勮繑鍥炲間笌嬈插彂閫佺殑瀛楄妭鏁拌繘琛屾瘮杈冦傚綋send()榪斿洖鍊間笌len涓嶅尮閰嶆椂錛屽簲璇ュ榪欑鎯呭喌榪涜澶勭悊銆?
char *msg = "Hello!";
int len, bytes_sent;
……
len = strlen(msg);
bytes_sent = send(sockfd, msg,len,0);
……
銆銆recv()鍑芥暟鍘熷瀷涓猴細

銆銆int recv(int sockfd,void *buf,int len,unsigned int flags);

銆銆Sockfd鏄帴鍙楁暟鎹殑socket鎻忚堪絎︼紱buf 鏄瓨鏀炬帴鏀舵暟鎹殑緙撳啿鍖猴紱len鏄紦鍐茬殑闀垮害銆侳lags涔熻緗負0銆俁ecv()榪斿洖瀹為檯涓婃帴鏀剁殑瀛楄妭鏁幫紝褰撳嚭鐜伴敊璇椂錛岃繑鍥?1騫剁疆鐩稿簲鐨別rrno鍊箋?

銆銆Sendto()鍜宺ecvfrom()鐢ㄤ簬鍦ㄦ棤榪炴帴鐨勬暟鎹姤socket鏂瑰紡涓嬭繘琛屾暟鎹紶杈撱傜敱浜庢湰鍦皊ocket騫舵病鏈変笌榪滅鏈哄櫒寤虹珛榪炴帴錛屾墍浠ュ湪鍙戦佹暟鎹椂搴旀寚鏄庣洰鐨勫湴鍧銆?
銆銆Sendto()鍑芥暟鍘熷瀷涓猴細
銆銆int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);

銆銆璇ュ嚱鏁版瘮send()鍑芥暟澶氫簡涓や釜鍙傛暟錛宼o琛ㄧず鐩湴鏈虹殑IP鍦板潃鍜岀鍙e彿淇℃伅錛岃宼olen甯稿父琚祴鍊間負sizeof (struct sockaddr)銆係endto 鍑芥暟涔熻繑鍥炲疄闄呭彂閫佺殑鏁版嵁瀛楄妭闀垮害鎴栧湪鍑虹幇鍙戦侀敊璇椂榪斿洖-1銆?

銆銆Recvfrom()鍑芥暟鍘熷瀷涓猴細

銆銆int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

銆銆from鏄竴涓猻truct sockaddr綾誨瀷鐨勫彉閲忥紝璇ュ彉閲忎繚瀛樻簮鏈虹殑IP鍦板潃鍙婄鍙e彿銆俧romlen甯哥疆涓簊izeof (struct sockaddr)銆傚綋recvfrom()榪斿洖鏃訛紝fromlen鍖呭惈瀹為檯瀛樺叆from涓殑鏁版嵁瀛楄妭鏁般俁ecvfrom()鍑芥暟榪斿洖鎺ユ敹鍒扮殑瀛楄妭鏁版垨褰撳嚭鐜伴敊璇椂榪斿洖

銆銆1錛屽茍緗浉搴旂殑errno銆?

銆銆濡傛灉浣犲鏁版嵁鎶ocket璋冪敤浜哻onnect()鍑芥暟鏃訛紝浣犱篃鍙互鍒╃敤send()鍜宺ecv()榪涜鏁版嵁浼犺緭錛屼絾璇ocket浠嶇劧鏄暟鎹姤socket錛屽茍涓斿埄鐢ㄤ紶杈撳眰鐨刄DP鏈嶅姟銆備絾鍦ㄥ彂閫佹垨鎺ユ敹鏁版嵁鎶ユ椂錛屽唴鏍鎬細鑷姩涓轟箣鍔犱笂鐩湴鍜屾簮鍦板潃淇℃伅銆?

銆銆緇撴潫浼犺緭

銆銆褰撴墍鏈夌殑鏁版嵁鎿嶄綔緇撴潫浠ュ悗錛屼綘鍙互璋冪敤close()鍑芥暟鏉ラ噴鏀捐socket錛屼粠鑰屽仠姝㈠湪璇ocket涓婄殑浠諱綍鏁版嵁鎿嶄綔錛?

銆銆close(sockfd);

銆銆浣犱篃鍙互璋冪敤shutdown()鍑芥暟鏉ュ叧闂socket銆傝鍑芥暟鍏佽浣犲彧鍋滄鍦ㄦ煇涓柟鍚戜笂鐨勬暟鎹紶杈擄紝鑰屼竴涓柟鍚戜笂鐨勬暟鎹紶杈撶戶緇繘琛屻傚浣犲彲浠ュ叧闂煇socket鐨勫啓鎿嶄綔鑰屽厑璁哥戶緇湪璇ocket涓婃帴鍙楁暟鎹紝鐩磋嚦璇誨叆鎵鏈夋暟鎹?

銆銆int shutdown(int sockfd,int how);

銆銆Sockfd鏄渶瑕佸叧闂殑socket鐨勬弿榪扮銆傚弬鏁?how鍏佽涓簊hutdown鎿嶄綔閫夋嫨浠ヤ笅鍑犵鏂瑰紡錛?
·0-------涓嶅厑璁哥戶緇帴鏀舵暟鎹?
·1-------涓嶅厑璁哥戶緇彂閫佹暟鎹?
·2-------涓嶅厑璁哥戶緇彂閫佸拰鎺ユ敹鏁版嵁錛?
·鍧囦負鍏佽鍒欒皟鐢╟lose ()

銆銆shutdown鍦ㄦ搷浣滄垚鍔熸椂榪斿洖0錛屽湪鍑虹幇閿欒鏃惰繑鍥?1騫剁疆鐩稿簲errno銆?/span>

銆闈㈠悜榪炴帴鐨凷ocket瀹炰緥

 

銆銆浠g爜瀹炰緥涓殑鏈嶅姟鍣ㄩ氳繃socket榪炴帴鍚戝鎴風鍙戦佸瓧絎︿覆"Hello, you are connected!"銆傚彧瑕佸湪鏈嶅姟鍣ㄤ笂榪愯璇ユ湇鍔″櫒杞歡錛屽湪瀹㈡埛绔繍琛屽鎴瘋蔣浠訛紝瀹㈡埛绔氨浼氭敹鍒拌瀛楃涓層?

銆銆璇ユ湇鍔″櫒杞歡浠g爜濡備笅錛?

#include  
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333 /*鏈嶅姟鍣ㄧ洃鍚鍙e彿 */
#define BACKLOG 10 /* 鏈澶у悓鏃惰繛鎺ヨ姹傛暟 */
main()
{
int sockfd,client_fd; /*sock_fd錛氱洃鍚瑂ocket錛沜lient_fd錛氭暟鎹紶杈搒ocket */
銆struct sockaddr_in my_addr; /* 鏈満鍦板潃淇℃伅 */
銆struct sockaddr_in remote_addr; /* 瀹㈡埛绔湴鍧淇℃伅 */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
銆銆perror("socket鍒涘緩鍑洪敊錛?); exit(1);
}
my_addr.sin_family=AF_INET;
銆my_addr.sin_port=htons(SERVPORT);
銆my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
銆if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) \
銆銆 == -1) {
perror("bind鍑洪敊錛?);
exit(1);
}
銆if (listen(sockfd, BACKLOG) == -1) {
perror("listen鍑洪敊錛?);
exit(1);
}
while(1) {
銆銆sin_size = sizeof(struct sockaddr_in);
銆銆if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, \
銆銆&sin_size)) == -1) {
perror("accept鍑洪敊");
continue;
}
銆銆printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
銆 if (!fork()) { /* 瀛愯繘紼嬩唬鐮佹 */
銆銆 if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1)
銆銆 perror("send鍑洪敊錛?);
close(client_fd);
exit(0);
}
銆銆close(client_fd);
銆銆}
銆}
}

 

銆銆鏈嶅姟鍣ㄧ殑宸ヤ綔嫻佺▼鏄繖鏍風殑錛氶鍏堣皟鐢╯ocket鍑芥暟鍒涘緩涓涓猄ocket錛岀劧鍚庤皟鐢╞ind鍑芥暟灝嗗叾涓庢湰鏈哄湴鍧浠ュ強涓涓湰鍦扮鍙e彿緇戝畾錛岀劧鍚庤皟鐢╨isten鍦ㄧ浉搴旂殑socket涓婄洃鍚紝褰揳ccpet鎺ユ敹鍒頒竴涓繛鎺ユ湇鍔¤姹傛椂錛屽皢鐢熸垚涓涓柊鐨剆ocket銆傛湇鍔″櫒鏄劇ず璇ュ鎴鋒満鐨処P鍦板潃錛屽茍閫氳繃鏂扮殑socket鍚戝鎴風鍙戦佸瓧絎︿覆"Hello錛寉ou are connected!"銆傛渶鍚庡叧闂socket銆?/span>

銆銆浠g爜瀹炰緥涓殑fork()鍑芥暟鐢熸垚涓涓瓙榪涚▼鏉ュ鐞嗘暟鎹紶杈撻儴鍒嗭紝fork()璇彞瀵逛簬瀛愯繘紼嬭繑鍥炵殑鍊間負0銆傛墍浠ュ寘鍚玣ork鍑芥暟鐨刬f璇彞鏄瓙榪涚▼浠g爜閮ㄥ垎錛屽畠涓巌f璇彞鍚庨潰鐨勭埗榪涚▼浠g爜閮ㄥ垎鏄茍鍙戞墽琛岀殑銆?

銆銆瀹㈡埛绔▼搴忎唬鐮佸涓嬶細

#include 
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333
#define MAXDATASIZE 100 /*姣忔鏈澶ф暟鎹紶杈撻噺 */
main(int argc, char *argv[]){
銆int sockfd, recvbytes;
銆char buf[MAXDATASIZE];
銆struct hostent *host;
銆struct sockaddr_in serv_addr;
銆if (argc < 2) {
fprintf(stderr,"Please enter the server's hostname!\n");
exit(1);
}
銆if((host=gethostbyname(argv[1]))==NULL) {
herror("gethostbyname鍑洪敊錛?);
exit(1);
}
銆if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket鍒涘緩鍑洪敊錛?);
exit(1);
}
銆serv_addr.sin_family=AF_INET;
銆serv_addr.sin_port=htons(SERVPORT);
銆serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
銆bzero(&(serv_addr.sin_zero),8);
銆if (connect(sockfd, (struct sockaddr *)&serv_addr, \
銆銆 sizeof(struct sockaddr)) == -1) {
perror("connect鍑洪敊錛?);
exit(1);
}
銆if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1) {
perror("recv鍑洪敊錛?);
exit(1);
}
銆buf[recvbytes] = '\0';
銆printf("Received: %s",buf);
銆close(sockfd);
}
瀹㈡埛绔▼搴忛鍏堥氳繃鏈嶅姟鍣ㄥ煙鍚嶈幏寰楁湇鍔″櫒鐨処P鍦板潃錛岀劧鍚庡垱寤轟竴涓猻ocket錛岃皟鐢╟onnect鍑芥暟涓庢湇鍔″櫒寤虹珛榪炴帴錛岃繛鎺ユ垚鍔熶箣鍚庢帴鏀朵粠鏈嶅姟鍣ㄥ彂閫佽繃鏉ョ殑鏁版嵁錛屾渶鍚庡叧闂璼ocket銆?

銆銆鍑芥暟gethostbyname()鏄畬鎴愬煙鍚嶈漿鎹㈢殑銆傜敱浜嶪P鍦板潃闅句互璁板繂鍜岃鍐欙紝鎵浠ヤ負浜嗘柟渚匡紝浜轟滑甯稿父鐢ㄥ煙鍚嶆潵琛ㄧず涓繪満錛岃繖灝遍渶瑕佽繘琛屽煙鍚嶅拰IP鍦板潃鐨勮漿鎹€傚嚱鏁板師鍨嬩負錛?/span>


銆銆struct hostent *gethostbyname(const char *name); 
銆銆鍑芥暟榪斿洖涓篽osten鐨勭粨鏋勭被鍨嬶紝瀹冪殑瀹氫箟濡備笅錛?
銆銆struct hostent {
銆 char *h_name; /* 涓繪満鐨勫畼鏂瑰煙鍚?*/
銆銆 char **h_aliases; /* 涓涓互NULL緇撳熬鐨勪富鏈哄埆鍚嶆暟緇?*/
銆銆 int h_addrtype; /* 榪斿洖鐨勫湴鍧綾誨瀷錛屽湪Internet鐜涓嬩負AF-INET */
銆銆int h_length; /* 鍦板潃鐨勫瓧鑺傞暱搴?*/
銆銆 char **h_addr_list; /* 涓涓互0緇撳熬鐨勬暟緇勶紝鍖呭惈璇ヤ富鏈虹殑鎵鏈夊湴鍧*/
銆銆};
銆銆#define h_addr h_addr_list[0] /*鍦╤-addr-list涓殑絎竴涓湴鍧*/

 

銆銆褰?gethostname()璋冪敤鎴愬姛鏃訛紝榪斿洖鎸囧悜struct hosten鐨勬寚閽堬紝褰撹皟鐢ㄥけ璐ユ椂榪斿洖-1銆傚綋璋冪敤gethostbyname鏃訛紝浣犱笉鑳戒嬌鐢╬error()鍑芥暟鏉ヨ緭鍑洪敊璇俊鎭紝鑰屽簲璇ヤ嬌鐢╤error()鍑芥暟鏉ヨ緭鍑恒?

銆銆鏃犺繛鎺ョ殑瀹㈡埛/鏈嶅姟鍣ㄧ▼搴忕殑鍦ㄥ師鐞嗕笂鍜岃繛鎺ョ殑瀹㈡埛/鏈嶅姟鍣ㄦ槸涓鏍風殑錛屼袱鑰呯殑鍖哄埆鍦ㄤ簬鏃犺繛鎺ョ殑瀹㈡埛/鏈嶅姟鍣ㄤ腑鐨勫鎴蜂竴鑸笉闇瑕佸緩绔嬭繛鎺ワ紝鑰屼笖鍦ㄥ彂閫佹帴鏀舵暟鎹椂錛岄渶瑕佹寚瀹氳繙绔満鐨勫湴鍧銆?

銆銆闃誨鍜岄潪闃誨

銆銆闃誨鍑芥暟鍦ㄥ畬鎴愬叾鎸囧畾鐨勪換鍔′互鍓嶄笉鍏佽紼嬪簭璋冪敤鍙︿竴涓嚱鏁般備緥濡傦紝紼嬪簭鎵ц涓涓鏁版嵁鐨勫嚱鏁拌皟鐢ㄦ椂錛屽湪姝ゅ嚱鏁板畬鎴愯鎿嶄綔浠ュ墠灝嗕笉浼氭墽琛屼笅涓紼嬪簭璇彞銆傚綋鏈嶅姟鍣ㄨ繍琛屽埌accept璇彞鏃訛紝鑰屾病鏈夊鎴瘋繛鎺ユ湇鍔¤姹傚埌鏉ワ紝鏈嶅姟鍣ㄥ氨浼氬仠姝㈠湪accept璇彞涓婄瓑寰呰繛鎺ユ湇鍔¤姹傜殑鍒版潵銆傝繖縐嶆儏鍐電О涓洪樆濉烇紙blocking錛夈傝岄潪闃誨鎿嶄綔鍒欏彲浠ョ珛鍗沖畬鎴愩傛瘮濡傦紝濡傛灉浣犲笇鏈涙湇鍔″櫒浠呬粎娉ㄦ剰媯鏌ユ槸鍚︽湁瀹㈡埛鍦ㄧ瓑寰呰繛鎺ワ紝鏈夊氨鎺ュ彈榪炴帴錛屽惁鍒欏氨緇х畫鍋氬叾浠栦簨鎯咃紝鍒欏彲浠ラ氳繃灝哠ocket璁劇疆涓洪潪闃誨鏂瑰紡鏉ュ疄鐜般傞潪闃誨socket鍦ㄦ病鏈夊鎴峰湪絳夊緟鏃跺氨浣縜ccept璋冪敤绔嬪嵆榪斿洖銆?
銆銆#include
銆銆#include
銆銆……
sockfd = socket(AF_INET,SOCK_STREAM,0);
fcntl(sockfd,F_SETFL,O_NONBLOCK)錛?
……

銆銆閫氳繃璁劇疆socket涓洪潪闃誨鏂瑰紡錛屽彲浠ュ疄鐜?杞"鑻ュ共Socket銆傚綋浼佸浘浠庝竴涓病鏈夋暟鎹瓑寰呭鐞嗙殑闈為樆濉濻ocket璇誨叆鏁版嵁鏃訛紝鍑芥暟灝嗙珛鍗寵繑鍥烇紝榪斿洖鍊間負-1錛屽茍緗甧rrno鍊間負EWOULDBLOCK銆備絾鏄繖縐?杞"浼氫嬌CPU澶勪簬蹇欑瓑寰呮柟寮忥紝浠庤岄檷浣庢ц兘錛屾氮璐圭郴緇熻祫婧愩傝岃皟鐢╯elect()浼氭湁鏁堝湴瑙e喅榪欎釜闂錛屽畠鍏佽浣犳妸榪涚▼鏈韓鎸傝搗鏉ワ紝鑰屽悓鏃朵嬌緋葷粺鍐呮牳鐩戝惉鎵瑕佹眰鐨勪竴緇勬枃浠舵弿榪扮鐨勪換浣曟椿鍔紝鍙紜鍦ㄤ換浣曡鐩戞帶鐨勬枃浠舵弿榪扮涓婂嚭鐜版椿鍔紝select()璋冪敤灝嗚繑鍥炴寚紺鴻鏂囦歡鎻忚堪絎﹀凡鍑嗗濂界殑淇℃伅錛屼粠鑰屽疄鐜頒簡涓鴻繘紼嬮夊嚭闅忔満鐨勫彉鍖栵紝鑰屼笉蹇呯敱榪涚▼鏈韓瀵硅緭鍏ヨ繘琛屾祴璇曡屾氮璐笴PU寮閿銆係elect鍑芥暟鍘熷瀷涓?
int select(int numfds,fd_set *readfds,fd_set *writefds錛?
fd_set *exceptfds,struct timeval *timeout);

銆銆鍏朵腑readfds銆亀ritefds銆乪xceptfds鍒嗗埆鏄select()鐩戣鐨勮銆佸啓鍜屽紓甯稿鐞嗙殑鏂囦歡鎻忚堪絎﹂泦鍚堛傚鏋滀綘甯屾湜紜畾鏄惁鍙互浠庢爣鍑嗚緭鍏ュ拰鏌愪釜socket鎻忚堪絎﹁鍙栨暟鎹紝浣犲彧闇瑕佸皢鏍囧噯杈撳叆鐨勬枃浠舵弿榪扮0鍜岀浉搴旂殑sockdtfd鍔犲叆鍒皉eadfds闆嗗悎涓紱numfds鐨勫兼槸闇瑕佹鏌ョ殑鍙風爜鏈楂樼殑鏂囦歡鎻忚堪絎﹀姞1錛岃繖涓緥瀛愪腑numfds鐨勫煎簲涓簊ockfd+1錛涘綋select榪斿洖鏃訛紝readfds灝嗚淇敼錛屾寚紺烘煇涓枃浠舵弿榪扮宸茬粡鍑嗗琚鍙栵紝浣犲彲浠ラ氳繃FD_ISSSET()鏉ユ祴璇曘備負浜嗗疄鐜癴d_set涓搴旂殑鏂囦歡鎻忚堪絎︾殑璁劇疆銆佸浣嶅拰嫻嬭瘯錛屽畠鎻愪緵浜嗕竴緇勫畯錛?
銆銆FD_ZERO(fd_set *set)----娓呴櫎涓涓枃浠舵弿榪扮闆嗭紱
銆銆FD_SET(int fd,fd_set *set)----灝嗕竴涓枃浠舵弿榪扮鍔犲叆鏂囦歡鎻忚堪絎﹂泦涓紱
銆銆FD_CLR(int fd,fd_set *set)----灝嗕竴涓枃浠舵弿榪扮浠庢枃浠舵弿榪扮闆嗕腑娓呴櫎錛?
銆銆FD_ISSET(int fd,fd_set *set)----璇曞垽鏂槸鍚︽枃浠舵弿榪扮琚疆浣嶃?
銆銆Timeout鍙傛暟鏄竴涓寚鍚憇truct timeval綾誨瀷鐨勬寚閽堬紝瀹冨彲浠ヤ嬌select()鍦ㄧ瓑寰卼imeout闀挎椂闂村悗娌℃湁鏂囦歡鎻忚堪絎﹀噯澶囧ソ鍗寵繑鍥炪俿truct timeval鏁版嵁緇撴瀯涓猴細
銆銆struct timeval {
銆銆 int tv_sec; /* seconds */
銆銆 int tv_usec; /* microseconds */ };

銆銆POP3瀹㈡埛绔疄渚?

銆銆涓嬮潰鐨勪唬鐮佸疄渚嬪熀浜嶱OP3鐨勫鎴峰崗璁紝涓庨偖浠舵湇鍔″櫒榪炴帴騫跺彇鍥炴寚瀹氱敤鎴峰笎鍙風殑閭歡銆備笌閭歡鏈嶅姟鍣ㄤ氦浜掔殑鍛戒護瀛樺偍鍦ㄥ瓧絎︿覆鏁扮粍POPMessage涓紝紼嬪簭閫氳繃涓涓猟o-while寰幆渚濇鍙戦佽繖浜涘懡浠ゃ?

#include 
#include
#include
#include
#include
#include
#include
#include
#define POP3SERVPORT 110
#define MAXDATASIZE 4096

 

main(int argc, char *argv[]){
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
char *POPMessage[]={
"USER userid\r\n",
"PASS password\r\n",
"STAT\r\n",
"LIST\r\n",
"RETR 1\r\n",
"DELE 1\r\n",
"QUIT\r\n",
NULL
};
int iLength;
int iMsg=0;
int iEnd=0;
char buf[MAXDATASIZE];

if((host=gethostbyname("your.server"))==NULL) {
perror("gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket error");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(POP3SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){
perror("connect error");
exit(1);
}

do {
send(sockfd,POPMessage[iMsg],strlen(POPMessage[iMsg]),0);
printf("have sent: %s",POPMessage[iMsg]);

iLength=recv(sockfd,buf+iEnd,sizeof(buf)-iEnd,0);
iEnd+=iLength;
buf[iEnd]='\0';
printf("received: %s,%d\n",buf,iMsg);

iMsg++;
} while (POPMessage[iMsg]);

close(sockfd);
}



john 2007-07-23 22:45 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 好男人视频社区精品免费| 国产精品免费一区二区三区 | 亚洲人午夜射精精品日韩| 2020久久精品亚洲热综合一本| 久久大香香蕉国产免费网站| 亚洲综合色自拍一区| 好湿好大好紧好爽免费视频| 亚洲精品在线视频| 成年网站免费入口在线观看| 国产在线a不卡免费视频| 亚洲AV无码专区在线电影成人| 最新中文字幕电影免费观看| 欧洲 亚洲 国产图片综合| 在线免费观看一级毛片| 亚洲国产精品成人午夜在线观看| 处破痛哭A√18成年片免费| 亚洲熟女乱色一区二区三区| 在线永久免费观看黄网站| 亚洲a∨无码一区二区| 免费A级毛片无码A∨男男 | a级毛片视频免费观看| 亚洲成AV人片一区二区| 在线免费中文字幕| wwwxxx亚洲| 免费在线观看你懂的| 中文字幕成人免费高清在线视频 | 亚洲综合无码精品一区二区三区| 日本一区午夜艳熟免费| 亚洲网红精品大秀在线观看| 在线观看免费人成视频色9| 亚洲JLZZJLZZ少妇| 久久精品国产亚洲AV不卡| 伊人久久免费视频| 亚洲中文字幕久久精品无码A| 免费国产在线观看| 国产精品免费看久久久| 亚洲一区二区三区91| 免费一级毛片在线播放| 免费黄色电影在线观看| 亚洲色成人WWW永久在线观看| 免费在线观看视频a|