锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 2005119@gmail.com v1.0 鎽樿錛氬湪瀵光滈潛鍙風鐢ㄢ濋」鐩殑閲嶆瀯涓紝鎴戦氳繃鐘舵佸浘寰堝ソ鐨勭悊瑙d簡涓氬姟閫昏緫銆傜敱姝よ繘涓姝ュ綊綰充簡鐘舵佸浘鍦ㄥ紑鍙戣繃紼嬩腑鐨勪嬌鐢ㄦ彁紺哄拰鎶宸с?/SPAN> 鍏抽敭璇嶏細UML錛岀姸鎬佸浘錛岄噸鏋?/SPAN> 璇昏呮按騫籌細鍒濈駭 鈥滈潛鍙風鐢ㄢ濇槸鍘熸棤綰挎妧鏈儴闂ㄥ紑鍙?/SPAN>GLSMRPIDService涓殑涓涓儴鍒嗭紝鐢變簬榪欓儴鍒嗗瓨鍦ㄥ凡鐨勫姛鑳界己闄鳳紝闇瑕佸涔嬭繘琛岄傚綋鐨勪慨鏀癸紝閫氳繃榪欑鏂瑰紡鏉ヤ嬌鍔熻兘寰楀埌瀹屽杽騫朵嬌鐗堟湰寰楀埌婕旇繘銆傛垜鍏堢粰鍑哄綋鍓嶉渶姹傦紝瀵瑰璞♀滈潛鍙封濈殑鐘舵佸浘銆?SPAN lang=EN-US> 鎸夊浘璇村浘鍥撅紙1錛夋弿榪頒簡瀵硅薄鈥滈潛鍙封濆湪鍏剁敓鍛芥湡涓殑鍑犱釜鐘舵侊紝鈥滈潛鍙封濊兘琚攣瀹氾紝琚攣瀹氱殑鈥滈潛鍙封濅笉鑳借鍏跺畠鐢ㄦ埛鍐嶉攣瀹氥傝閿佸畾鐨勯潛鍙峰鏋滃湪15鍒嗛挓鍐呮病琚敤鎴風鐢紝鍒欒繕鍥炲埌鍒濆鐘舵侊紝鍙互鍐嶈錛堝叾浠栵級鐢ㄦ埛閿佸畾銆傝閿佸畾鐨勨滈潛鍙封濆彲浠ヨ縐熺敤錛岀鐢ㄥ埌鏈熷悗鑳借緋葷粺棰勭暀錛堝嵆涓哄厛鍓嶇殑鐢ㄦ埛淇濇姢璧鋒潵錛夛紝棰勭暀涓涓湀鍚庡鐢ㄦ埛鏈畫縐燂紝鍒欐鈥滈潛鍙封濆彲浠ヨ鍏朵粬浜洪攣瀹氭垨縐熺敤銆傚湪縐熺敤鐘舵佷笅鐨勨滈潛鍙封濓紝濡傛灉琚悓涓鐢ㄦ埛绱Н縐熺敤瓚呰繃鍗婂勾錛屽垯鍙互涔版柇銆傝涔版柇鍚庯紝姝も滈潛鍙封濆彉鎴愭櫘閫氬彿銆?BR> 寰堥仐鎲撅紝鍘熻璁$敱浜庢墍闈㈠鐨勯棶棰橀鍩熻妯″皬錛屾墍浠ュ茍娌℃湁閲囩敤OOD/OOP鐨勬柟寮忥紝鎵浠ョ湅涓嶅埌綾?/B> 鍑嗗垯1: 鐘舵佸浘鍙鍗曚竴瀵硅薄鐨勫鏉傝涓鴻繘琛屾ā寤恒傝繖閲岀殑瀵硅薄鎸囩被銆佽鑹層佸瓙緋葷粺銆佹垨緇勪歡銆?/SPAN> 鍥犳錛岀姸鎬佸浘騫朵笉涓哄涓璞′箣闂寸殑琛屼負寤烘ā銆傚涓璞′箣闂寸殑琛屼負寤烘ā鍙傝冣滄椿鍔ㄥ浘鈥濓紝鈥滄椂搴忓浘鈥濓紝瀵硅薄涔嬮棿鐨勫叧緋誨弬鑰冣滅被鍥鋸濓紝鈥滃璞″浘鈥濅互鍙婂弬鑰冭璁℃ā寮?/SPAN>(璁捐妯″紡閫氬父鐢?/SPAN>UML鎴?/SPAN>Booch鍥捐〃紺虹被涔嬮棿鐨勫叧緋?/SPAN>, Booch鏄?/SPAN>UML鐨勫墠韜?/SPAN>)銆傜幇鍦ㄦ垜浠粰鍑虹姸鎬佸浘鐨勫畾涔夈?/SPAN> 鐘舵佸浘錛屽叏縐頒負鐘舵佹満瑙嗗浘(state machine view)錛岄氳繃瀵規瘡涓被鐨勭敓涓璞″艦瀛楃殑鐢熷懡鏈熷緩妯★紝鎻忚堪浜嗗璞″湪鏃墮棿涓婄殑鍔ㄦ佽涓恒?/SPAN>鐘舵佸浘鐢ㄤ簬瀵規ā鍨嬪厓绱犵殑鍔ㄦ佽涓鴻繘琛屽緩妯★紝鏇村叿浣撳湴璇達紝灝辨槸瀵圭郴緇熻涓轟腑鍙椾簨浠墮┍鍔ㄧ殑鏂歸潰榪涜寤烘ā銆?/SPAN> 鐘舵佸浘鐢辯姸鎬佺粍鎴愶紝鍚勭姸鎬佺敱杞Щ閾炬帴鍦ㄤ竴璧楓傜姸鎬佹槸瀵硅薄鎵ц鏌愰」媧誨姩鎴栫瓑寰呮煇涓簨浠舵椂鐨勬潯浠躲傝漿縐繪槸涓や釜鐘舵佷箣闂寸殑鍏崇郴錛屽畠鐢辨煇涓簨浠惰Е鍙戯紝鐒跺悗鎵ц鐗瑰畾鐨勬搷浣滄垨璇勪及騫跺鑷寸壒瀹氱殑緇撴潫鐘舵併傚浘 (2) 鎻忕粯浜嗙姸鎬佸浘鐨勫悇縐嶅厓绱犮?/SPAN> 鍥? 鎬佹槸瀵硅薄鎵ц鏌愰」媧誨姩鎴栫瓑寰呮煇涓簨浠舵椂鐨勬潯浠躲傚璞″彲鑳戒細鍦ㄦ湁闄愮殑鏃墮棿闀垮害鍐呬繚鎸佹煇涓鐘舵併傜姸鎬佸叿鏈変互涓嬪嚑欏圭壒寰侊細 鍚嶇О 灝嗕竴涓姸鎬佷笌鍏朵粬鐘舵佸尯鍒嗗紑鏉ョ殑鏂囨湰瀛楃涓詫紱鐘舵佷篃鍙兘鏄尶鍚嶇殑錛岃繖琛ㄧず瀹冩病鏈夊悕縐般?/SPAN> 榪涘叆/閫鍑烘搷浣?/SPAN> 鍦ㄨ繘鍏ュ拰閫鍑虹姸鎬佹椂鎵鎵ц鐨勬搷浣溿?/SPAN> 鍐呴儴杞Щ 鍦ㄤ笉浣跨姸鎬佸彂鐢熷彉鏇寸殑鎯呭喌涓嬭繘琛岀殑杞Щ銆?/SPAN> 瀛愮姸鎬?/SPAN> 鐘舵佺殑宓屽緇撴瀯錛屽寘鎷笉鐩歌繛鐨勶紙渚濇澶勪簬媧誨姩鐘舵佺殑錛夋垨騫惰鐨勶紙鍚屾椂澶勪簬媧誨姩鐘舵佺殑錛夊瓙鐘舵併?/SPAN> 寤惰繜鐨勪簨浠?/SPAN> 鏈湪璇ョ姸鎬佷腑澶勭悊浣嗚寤惰繜澶勭悊錛堝嵆鍒楅槦絳夊緟鐢卞彟涓涓姸鎬佷腑鐨勫璞℃潵澶勭悊錛夌殑涓緋誨垪浜嬩歡銆?/SPAN> 濡傚浘 (2) 鎵紺猴紝鍙互涓哄璞$殑鐘舵佸浘瀹氫箟涓ょ鐗規畩鐨勭姸鎬併傚垵濮嬬姸鎬佹寚紺虹姸鎬佸浘鎴栧瓙鐘舵佺殑榛樿璧峰浣嶇疆銆?/SPAN> 鍦ㄥ疄闄呯殑欏圭洰寮鍙戜腑錛屽茍涓嶆槸瀵規瘡涓涓被閮界敾鐘舵佸浘銆備綍鏃墮渶瑕佺姸鎬佸浘錛屾垜浠彲浠ラ噰鐢ㄤ笅闈㈢殑鍘熷垯鏉ョ‘瀹氾細 鏁忔嵎寤烘ā( AM) ( Ambler 2002)鐨勫師鍒欙紞錛嶆渶澶у寲欏圭洰騫茬郴浜虹殑鎶曡祫錛嶏紞寤鴻浣犲彧鏈夊綋妯″瀷鑳藉鎻愪緵姝i潰浠峰肩殑鏃跺欐墠鍒涘緩妯″瀷銆?/SPAN> 濡傛灉涓涓疄浣擄紝姣斿涓涓被鎴栫粍浠訛紝琛ㄧず鐨勮涓虹殑欏哄簭鍜屽綋鍓嶇殑鐘舵佹棤鍏籌紝閭d箞鐢諱竴涓?/SPAN>UML鐘舵佸浘鍙兘鏄病鏈変粈涔堢敤澶勭殑銆備緥濡備竴涓?/SPAN>CLogFile綾誨氨寰堢畝鍗曪紝琛ㄧず浜嗛偅浜涗綘灝嗕細鍦ㄧ郴緇熶腑璁板綍涓鎿嶄綔鐨勬暟鎹紝鍥犳涓涓?/SPAN>UML鐘舵佸浘灝辨病鏈変換浣曠浉鍏充箣澶勩傝屸滈潛鍙封濊繖綾誨璞″氨緇忔瘮杈冪殑澶嶆潅銆?/SPAN> l 褰撶粰瀹氫竴欏歸夋嫨鏃訛紝瑕佷嬌鐢ㄧ姸鎬佸浘鐨勫彲瑙嗚涔夛紝鑰屼笉瑕佸啓鍑鴻緇嗙殑杞Щ浠g爜銆備緥濡傦紝涓嶈鐢ㄥ嚑涓俊鍙瘋Е鍙戜竴涓漿縐伙紝鐒跺悗浣跨敤璇︾粏浠g爜鏉ョ鐞嗕互涓嶅悓鐨勬柟寮忎緷璧栦簬淇″彿鐨勬帶鍒舵祦銆傚簲浣跨敤鐢卞崟鐙殑淇″彿鏉ヨЕ鍙戠殑鍗曠嫭杞Щ銆傚湪闅愯棌浜嗛檮鍔犺涓虹殑杞Щ浠g爜涓紝瑕侀伩鍏嶄嬌鐢ㄦ潯浠墮昏緫銆?/SPAN> l 鏍規嵁鍦ㄧ姸鎬佹湡闂寸瓑寰呯殑浜嬩歡鎴栨鍦ㄥ彂鐢熺殑浜嬩歡鏉ュ懡鍚嶇姸鎬併傝浣忥紝鐘舵佷笉鏄滄椂闂寸偣鈥濓紱瀹冩槸鐘舵佸浘絳夊緟鏌愪釜浜嬩歡鍙戠敓鐨勬椂闂存銆備緥濡傦紝鈥?/SPAN>waitingForEnd鈥濊繖涓鍚嶇О姣斺?/SPAN>end鈥濇洿濂斤紱鈥?/SPAN>timingSomeActivity鈥濇瘮鈥?/SPAN>timeout鈥濇洿濂姐備笉瑕佽鐘舵佺殑鍚嶇О鐪嬭搗鏉ヨ薄鏄搷浣滃悕銆?/SPAN> l 鍦ㄤ竴涓姸鎬佸浘鍐呭敮涓鍦板懡鍚嶆墍鏈夌姸鎬佸拰杞Щ錛涜繖灝嗕究浜庤繘琛屾簮綰у埆鐨勮皟璇曘?/SPAN> l 璋ㄦ厧浣跨敤鐘舵佸彉閲忥紱涓嶈鍦ㄥ垱寤烘柊鐘舵佹椂浣跨敤瀹冧滑銆傚鏋滅姸鎬佷笉澶氾紝寰堝皯甯︽湁鎴栦笉甯︽湁渚濊禆浜庣姸鎬佺殑琛屼負錛屽茍涓斿緢灝戞湁鎴栨牴鏈病鏈夊彲鑳戒笌鍖呭惈鐘舵佸浘鐨勫皝瑁呬綋騫惰鎴栫嫭绔嬬殑琛屼負錛屽氨鍙互浣跨敤鐘舵佸彉閲忋傚鏋滄湁澶嶆潅鐨勩佷緷璧栦簬鐘舵佺殑娼滃湪騫惰琛屼負錛屾垨鑰呭鏋滃繀欏誨鐞嗙殑浜嬩歡鍙兘鏉ヨ嚜浜庡寘鍚姸鎬佸浘鐨勫皝瑁呬綋涔嬪錛屽垯搴旇冭檻浣跨敤鏋勪歡灝佽浣撱?/SPAN> l 濡傛灉鍗曚釜鍥句腑鐨勭姸鎬佽秴榪?/SPAN> 5 * 2 涓紝灝卞簲鑰冭檻浣跨敤瀛愮姸鎬併傚湪榪欓噷鍙互搴旂敤鎴戜滑鐨勫父璇嗭細鍦ㄤ竴涓潪甯歌鍒欑殑妯″紡涓彲浠ユ湁鍗佷釜鐘舵侊紝浣嗗鏋滀袱涓姸鎬佷箣闂村叿鏈夊洓鍗佷釜杞Щ錛屾樉鐒跺氨闇瑕侀噸鏂拌冭檻浜嗐傚姟蹇呰浣跨姸鎬佸浘鏄撲簬鐞嗚В銆?/SPAN> l 浣跨敤瑙﹀彂浜嬩歡鐨勪簨浠跺拰/鎴栧湪杞Щ鏈熼棿鍙戠敓鐨勪簨浠朵負杞Щ鍛藉悕銆傞夋嫨鏇村姞鏄撲簬鐞嗚В鐨勫悕縐般?/SPAN> l 褰撴偍鐪嬭涓涓夋嫨鐐規椂錛屽簲鑰冭檻鏄惁鍙互灝嗕綔鍑鴻閫夋嫨鐨勮亴璐e鎵樼粰鍙︿竴涓瀯浠訛紝浠ヤ究灝嗗叾浣滀負涓緇勫皢涓嶅悓鐨勪俊鍙鋒彁渚涚粰灝佽浣撻伒鐓ф墽琛岋紙渚嬪錛屼唬鏇垮娑堟伅->鏁版嵁 > x 鐨勯夋嫨錛夛紝騫惰冭檻鏄惁鍙互璁╁彂閫佹柟鎴栧彟涓涓棿涓昏鏉ヤ綔鍑哄喅瀹氾紝鐒跺悗閫氳繃鍦ㄤ俊鍙峰悕縐頒腑鏄庣‘鏄劇ず璇ュ喅瀹氱殑鏂瑰紡鍙戦佷俊鍙鳳紙渚嬪錛屼嬌鐢ㄥ悕涓?/SPAN> isFull 鍜?/SPAN> isEmpty 鐨勪俊鍙鳳紝鑰屼笉鏄互鍊煎懡鍚嶄俊鍙峰茍媯鏌ユ秷鎭暟鎹級銆?/SPAN> l 涓哄湪閫夋嫨鐐逛腑鍥炵瓟鐨勯棶棰樻寚瀹氭弿榪版х殑鍚嶇О錛屼緥濡傗?/SPAN>isThereStillLife鈥濇垨鈥?/SPAN>isItTimeToComplain鈥濄?/SPAN> l 鍦ㄤ換浣曠粰瀹氱殑灝佽浣撲腑錛屽敖閲忎嬌閫夋嫨鐐瑰悕縐頒繚鎸佸敮涓錛堝叾鍘熷洜涓庤漿縐誨悕縐伴渶淇濇寔鍞竴鐩稿悓錛夈?/SPAN> l 杞Щ鐨勪唬鐮佹鏄惁澶暱錛熸槸鍚﹀簲浣跨敤鍑芥暟鏉ヤ唬鏇垮畠浠紝鏄惁灝嗗父鐢ㄤ唬鐮佹璁板綍涓哄嚱鏁幫紵杞Щ搴旇綾諱技浜庨珮灞傜殑浼唬鐮侊紝騫朵笖搴斿綋閬靛驚涓?/SPAN> C++ 鍑芥暟鐩稿悓鎴栨洿涓ユ牸鐨勯暱搴﹁鍒欍備緥濡傦紝浠g爜瓚呰繃 25 琛岀殑杞Щ鍙璁や負鏄繃闀褲?/SPAN> l 搴旀牴鎹嚱鏁版墽琛岀殑鎿嶄綔鏉ュ懡鍚嶅嚱鏁般?/SPAN> l 瑕佺壒鍒敞鎰忚繘鍏ュ拰閫鍑烘搷浣滐細鍦ㄨ繘琛屾洿鏀瑰悗蹇樿鏇存敼鐩稿簲榪涘叆鍜岄鍑烘搷浣滅殑鎯呭喌灝ゅ叾瀹規槗鍙戠敓銆?/SPAN> l 閫鍑烘搷浣滃彲鐢ㄤ簬鎻愪緵瀹夊叏鎬у姛鑳斤紝渚嬪錛屼粠鈥?/SPAN>heaterOn鈥濈姸鎬佷腑鐨勯鍑烘搷浣滃皢鍏抽棴鍔犵儹鍣紝鍦ㄨ繖閲岋紝鎿嶄綔琚敤鏉ュ己鍒舵墽琛屼竴涓柇璦璇彞銆?/SPAN> l 閫氬父錛岄櫎闈炵姸鎬佸浘鏄娊璞$殑騫朵笖灝嗙敱鍖呭惈鍏冪礌鐨勫瓙綾繪潵榪涜鏀硅繘錛屽惁鍒欏瓙鐘舵佸簲鍖呭惈涓や釜鎴栨洿澶氫釜鐘舵併?/SPAN> l 搴旇鐢ㄩ夋嫨鐐規潵浠f浛鎿嶄綔鎴栬漿縐諱腑鐨勬潯浠墮昏緫銆傞夋嫨鐐瑰鏄撹鐪嬪埌錛岃屼唬鐮佷腑鐨勬潯浠墮昏緫鍒欐槸涓嶅彲瑙佺殑錛屽緢瀹規槗琚拷鐣ャ?/SPAN> l 閬垮厤浣跨敤璀︽垝鏉′歡銆?/SPAN> n 濡傛灉浜嬩歡瑙﹀彂浜嗗嚑涓漿縐伙紝灝嗘棤娉曟帶鍒墮鍏堝鍝釜璀︽垝鏉′歡姹傚箋傝繖浼氫駭鐢熸棤娉曢鏂欑殑緇撴灉銆?/SPAN> n 鍙兘鏈夊涓鎴掓潯浠朵負鈥?/SPAN>True鈥濓紝浣嗛殢鍚庡彧鑳芥湁涓涓漿縐匯傛墍閫夋嫨鐨勮礬寰勬槸鏃犳硶棰勬枡鐨勩?/SPAN> n 璀︽垝鏉′歡鏄笉鍙鐨勶紱瑕佲滅湅瑙佲濆畠浠殑鍑虹幇鏇存槸鍥伴毦銆?/SPAN> n 閬垮厤浣跨敤綾諱技嫻佺▼鍥劇殑鐘舵佸浘銆?/SPAN> u 榪欏彲鑳借〃紺烘偍璇曞浘瀵瑰茍涓嶅疄闄呭瓨鍦ㄧ殑鎶借薄姒傚康榪涜寤烘ā錛屼緥濡傦細 u 浣跨敤涓涓皝瑁呬綋鏉ュ鏈閫傚悎浜庢暟鎹被鐨勮涓鴻繘琛屽緩妯★紝鎴?/SPAN> n 閫氳繃浣跨敤绱у瘑鑰﹀悎鐨勬暟鎹被鍜屽皝瑁呬綋綾繪潵瀵規暟鎹被寤烘ā錛堜緥濡傦紝鏁版嵁綾葷敤浜庡悜鍥涘懆浼犻掔被鍨嬩俊鎭紝浣嗗皝瑁呬綋綾誨寘鍚簡搴斾笌鏁版嵁綾葷浉鍏寵仈鐨勫ぇ閮ㄥ垎鏁版嵁錛夈?/SPAN> u 鐘舵佸浘鐨勮繖縐嶉敊璇敤娉曞彲浠ラ氳繃浠ヤ笅鏁呴殰鐜拌薄鏉ヨ瘑鍒細 u 琚彂閫佺粰鈥滆嚜宸扁濈殑娑堟伅錛屼富瑕佹槸涓轟簡閲嶅浣跨敤浠g爜 u 鍑犱箮娌℃湁鐘舵侊紝浣嗘湁寰堝閫夋嫨鐐?/SPAN> u 鍦ㄦ煇浜涙儏鍐典笅娌℃湁寰幆鐨勭姸鎬佸浘銆傚湪嫻佺▼鎺у埗搴旂敤紼嬪簭涓紝鎴栬呭湪璇曞浘鎺у埗涓涓簨浠跺簭鍒楁椂錛岃繖鏍風殑鐘舵佸浘鏄湁鏁堢殑錛涘鏋滃畠浠湪鍒嗘瀽榪囩▼涓嚭鐜幫紝鍒欒〃紺虹姸鎬佸浘宸查鍖栦負嫻佺▼鍥俱?/SPAN> n 褰撳彂鐜伴棶棰樻椂錛屽簲閲囧彇浠ヤ笅鎺柦錛?/SPAN> u 鑰冭檻灝嗗皝瑁呬綋鍒嗚В涓鴻亴璐f洿鏄庣‘鐨勫皬鍗曞厓錛?/SPAN> u 灝嗘洿澶氱殑琛屼負杞Щ鍒頒笌鏈夐棶棰樼殑灝佽浣撶浉鍏寵仈鐨勬暟鎹被涓?/SPAN> u 灝嗘洿澶氱殑琛屼負杞Щ鍒板皝瑁呬綋綾誨嚱鏁頒腑銆?/SPAN> u 鍒朵綔鏇存湁鎰忎箟鐨勪俊鍙鳳紝浠ラ伩鍏嶅鏁版嵁鐨勪緷璧栥?/SPAN> l 閬垮厤"榛戞礊"鐘舵併?/SPAN> n 榛戞礊鐘舵佹槸閭g鍙湁鍙樻崲榪涙潵浣嗘病鏈変換浣曞彉鎹㈠彂鍑虹殑鐘舵侊紝榪欑鎯呭喌瑕佷箞鐢變簬璇ョ姸鎬佹槸涓涓渶緇堢姸鎬侊紝瑕佷箞灝辨槸浣犲凡緇忛敊榪囦簡涓涓垨澶氫釜鍙樻崲鍙樻崲銆?/SPAN> l 閬垮厤"濂囪抗"鐘舵併?/SPAN> n 濂囪抗鐘舵佹槸閭g鍙湁鍙樻崲鍙戝嚭浣嗘病鏈変換浣曞彉鎹㈣繘鏉ョ殑鐘舵侊紝榪欑鎯呭喌瑕佷箞鐢變簬璇ョ姸鎬佹槸涓涓搗鐐癸紝瑕佷箞灝辨槸浣犲凡緇忛敊榪囦簡涓涓垨澶氫釜鍙樻崲鍙樻崲銆?/SPAN> 銆?/SPAN>UML鐢ㄦ埛鎵嬪唽銆?/SPAN> 鈥?/SPAN>Rational Unified Process鈥?/SPAN> 鍏跺畠緗戠粶璧勬簮
鎴戜滑榪樻槸鍏堢湅浠栫殑浠g爜鍚?//聽acetest2.cpp聽:聽Defines聽the聽entry聽point聽for聽the聽console聽application.
聽2//
聽3
聽4//聽client.cpp
聽5
聽6#include聽"ace/OS_main.h"
聽7#include聽"ace/OS_NS_string.h"
聽8#include聽"ace/OS_NS_sys_socket.h"
聽9#include聽"ace/OS_NS_unistd.h"
10#include聽"ace/OS_NS_stdlib.h"
11#include聽"ace/OS_NS_stdio.h"
12#include聽"ace/OS_NS_netdb.h"
13#include聽"ace/Default_Constants.h"
14
15ACE_RCSID(SOCK_SAP,聽client,聽"client.cpp,v聽4.10聽2005/01/21聽02:19:20聽ossama聽Exp")
16
17/**//*聽BSD聽socket聽client聽*/
18
19int
20ACE_TMAIN聽(int聽argc,聽ACE_TCHAR聽*argv[])
21{
22聽聽//聽Initialize聽WinSock聽DLL聽on聽Win32
23聽聽ACE_OS::socket_init聽(ACE_WSOCK_VERSION);
24
25聽聽struct聽sockaddr_in聽saddr;
26聽聽struct聽hostent聽*hp;
27聽聽const聽ACE_TCHAR聽*host聽=聽argc聽>聽1聽?聽argv[1]聽:聽ACE_DEFAULT_SERVER_HOST;
28聽聽u_short聽port_num聽=
29聽聽聽聽htons聽(argc聽>聽2聽?聽ACE_OS::atoi聽(argv[2])聽:聽ACE_DEFAULT_SERVER_PORT);
30聽聽int聽sockbufsize聽=聽argc聽>聽3聽?聽ACE_OS::atoi聽(argv[3])聽:聽0;
31聽聽char聽buf[BUFSIZ];
32聽聽ACE_HANDLE聽s_handle;
33聽聽int聽w_bytes;
34聽聽int聽r_bytes;
35聽聽int聽n;
36
37聽聽//聽Create聽a聽local聽endpoint聽of聽communication.
38聽聽if聽((s_handle聽=聽ACE_OS::socket聽(PF_INET,聽SOCK_STREAM,聽0))聽==聽ACE_INVALID_HANDLE)
39聽聽聽聽ACE_OS::perror聽(ACE_TEXT("socket")),聽ACE_OS::exit聽(1);
40
41聽聽//聽If聽a聽sockbufsize聽was聽specified,聽set聽it聽for聽both聽send聽and聽receive.
42聽聽if聽(sockbufsize聽>聽0)
43聽聽
{
44聽聽聽聽if聽(ACE_OS::setsockopt聽(s_handle,聽SOL_SOCKET,聽SO_SNDBUF,
45聽聽聽聽聽聽(const聽char聽*)聽&sockbufsize,
46聽聽聽聽聽聽sizeof聽(sockbufsize))聽!=聽0)
47聽聽聽聽聽聽ACE_OS::perror聽(ACE_TEXT("SO_SNDBUF")),聽ACE_OS::exit聽(1);
48聽聽聽聽if聽(ACE_OS::setsockopt聽(s_handle,聽SOL_SOCKET,聽SO_RCVBUF,
49聽聽聽聽聽聽(const聽char聽*)聽&sockbufsize,
50聽聽聽聽聽聽sizeof聽(sockbufsize))聽!=聽0)
51聽聽聽聽聽聽ACE_OS::perror聽(ACE_TEXT("SO_RCVBUF")),聽ACE_OS::exit聽(1);
52聽聽}
53
54聽聽//聽Determine聽IP聽address聽of聽the聽server.
55聽聽if聽((hp聽=聽ACE_OS::gethostbyname聽(ACE_TEXT_ALWAYS_CHAR(host)))聽==聽0)
56聽聽聽聽ACE_OS::perror聽(ACE_TEXT("gethostbyname")),聽ACE_OS::exit聽(1);
57
58聽聽//聽Set聽up聽the聽address聽information聽to聽contact聽the聽server.
59聽聽ACE_OS::memset聽((void聽*)聽&saddr,聽0,聽sizeof聽saddr);
60聽聽saddr.sin_family聽=聽AF_INET;
61聽聽saddr.sin_port聽=聽port_num;
62聽聽ACE_OS::memcpy聽(&saddr.sin_addr,聽hp->h_addr,聽hp->h_length);
63
64聽聽//聽Establish聽connection聽with聽remote聽server.
65聽聽if聽(ACE_OS::connect聽(s_handle,
66聽聽聽聽reinterpret_cast<sockaddr聽*>聽(&saddr),
67聽聽聽聽sizeof聽saddr)聽==聽-1)
68聽聽聽聽ACE_OS::perror聽(ACE_TEXT("connect")),聽ACE_OS::exit聽(1);
69
70聽聽//聽Send聽data聽to聽server聽(correctly聽handles聽"incomplete聽writes"聽due聽to
71聽聽//聽flow聽control).
72
73聽聽while聽((r_bytes聽=聽ACE_OS::read聽(ACE_STDIN,聽buf,聽sizeof聽buf))聽>聽0)
74聽聽聽聽for聽(w_bytes聽=聽0;聽w_bytes聽<聽r_bytes;聽w_bytes聽+=聽n)
75聽聽聽聽聽聽if聽((n聽=聽ACE_OS::send聽(s_handle,聽buf聽+聽w_bytes,
76聽聽聽聽聽聽聽聽r_bytes聽-聽w_bytes))聽<聽0)
77聽聽聽聽聽聽聽聽ACE_OS::perror聽(ACE_TEXT("write")),聽ACE_OS::exit聽(1);
78
79聽聽if聽(ACE_OS::recv聽(s_handle,聽buf,聽1)聽==聽1)
80聽聽聽聽ACE_OS::write聽(ACE_STDOUT,聽buf,聽1);
81
82聽聽//聽Explicitly聽close聽the聽connection.
83聽聽if聽(ACE_OS::closesocket聽(s_handle)聽==聽-1)
84聽聽聽聽ACE_OS::perror聽(ACE_TEXT("close")),聽ACE_OS::exit聽(1);
85聽聽return聽0;
86}
87
88
89
鐩存帴緙栬瘧,浜х敓濡備笅閿欒------聽Build聽started:聽Project:聽acetest2,聽Configuration:聽Debug聽Win32聽------
Compiling
acetest2.cpp
Linking
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ace_os_main_i(class聽ACE_Main_Base聽&,int,char聽*聽*聽const)"聽(__imp_?ace_os_main_i@@YAHAAVACE_Main_Base@@HQAPAD@Z)聽referenced聽in聽function聽_main
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽public:聽__thiscall聽ACE_Main_Base::ACE_Main_Base(void)"聽(__imp_??0ACE_Main_Base@@QAE@XZ)聽referenced聽in聽function聽"public:聽__thiscall聽ACE_Main::ACE_Main(void)"聽(??0ACE_Main@@QAE@XZ)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::closesocket(void聽*)"聽(__imp_?closesocket@ACE_OS@@YAHPAX@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::write(void聽*,void聽const聽*,unsigned聽int)"聽(__imp_?write@ACE_OS@@YAHPAXPBXI@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::recv(void聽*,char聽*,unsigned聽int,int)"聽(__imp_?recv@ACE_OS@@YAHPAXPADIH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::send(void聽*,char聽const聽*,unsigned聽int,int)"聽(__imp_?send@ACE_OS@@YAHPAXPBDIH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::read(void聽*,void聽*,unsigned聽int)"聽(__imp_?read@ACE_OS@@YAHPAX0I@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::connect(void聽*,struct聽sockaddr聽*,int)"聽(__imp_?connect@ACE_OS@@YAHPAXPAUsockaddr@@H@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽*聽__cdecl聽ACE_OS::memcpy(void聽*,void聽const聽*,unsigned聽int)"聽(__imp_?memcpy@ACE_OS@@YAPAXPAXPBXI@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽*聽__cdecl聽ACE_OS::memset(void聽*,int,unsigned聽int)"聽(__imp_?memset@ACE_OS@@YAPAXPAXHI@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽struct聽hostent聽*聽__cdecl聽ACE_OS::gethostbyname(char聽const聽*)"聽(__imp_?gethostbyname@ACE_OS@@YAPAUhostent@@PBD@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::setsockopt(void聽*,int,int,char聽const聽*,int)"聽(__imp_?setsockopt@ACE_OS@@YAHPAXHHPBDH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽__cdecl聽ACE_OS::exit(int)"聽(__imp_?exit@ACE_OS@@YAXH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽__cdecl聽ACE_OS::perror(char聽const聽*)"聽(__imp_?perror@ACE_OS@@YAXPBD@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽*聽__cdecl聽ACE_OS::socket(int,int,int)"聽(__imp_?socket@ACE_OS@@YAPAXHHH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::atoi(char聽const聽*)"聽(__imp_?atoi@ACE_OS@@YAHPBD@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::socket_init(int,int)"聽(__imp_?socket_init@ACE_OS@@YAHHH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
Debug/acetest2.exe聽:聽fatal聽error聽LNK1120:聽17聽unresolved聽externals
瑙e喅鏂規硶,鏄紜殑閾炬帴ace(x).lib
鍏朵腑, release鐗堝搴旂殑鏄痑ce.lib,debug瀵瑰簲鐨勬槸aced.lib
鍚屾椂錛岃繕瑕佺‘淇濈紪杈戝櫒鑳芥紜壘鍒癮ce(x).lib鐨勪綅緗紟
綆鍗曠殑鍔炴硶鏄姞鍏ヤ笅闈㈢殑浠g爜#ifdef聽_DEBUG
#pragma聽聽comment聽(lib,"aced.lib")
#else
#pragma聽聽comment聽(lib,"ace.lib")
#endif
聽
]]>寮曡█
姒傚康
浣曟椂闇瑕佺姸鎬佸浘
鎻愮ず涓庢妧宸?/SPAN>
鍙傝冩枃鐚?/SPAN>
]]>
ACE_Message_Block灝忕煡璇?/STRONG>
ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);
mb->copy(buff); //buff鍏堝凡緇忓垵濮嬪寲
2.1
ACE_Message_Block* mb = new ACE_Message_Block(buff,len);
mb->wt_ptr(len); //len鏄痓uff鐨勯暱搴?len = strlen(buff) +1
// +1 琛ㄧず鍚庨潰鐨刓0
ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);
ACE_OS::sprintf(mb->wt_ptr(),buff);
mb->wt_ptr(len);
ACE_Message_Block* mb = new ACE_Message_Block(len,
ACE_Message_Block::MB_DATA,
mb2, //琛ㄧず mb->cont(mb2)
buff)
mb->wt_ptr(len);
mb->cont(mb2);
mb2->cont(mb3); //ok
***mb3->cont(mb); //姝誨畾浜?/DIV>
ACE_Message_Block* lastMsg =ACE_Message_Block ,ACE_Message_Block::MB_STOP)
otherTask鍦ㄦ帴鏀跺埌鐨勬椂鍊欏涓嬪鐞?BR>
{
ACE_Message_Block* mb;
while(1)
{
getq(mb);
if(mb->get_tpye() == ACE_Message_Block::MB_STOP)
{
mb->release();
break; //閫鍑鴻繖涓案涔呴檺鐜?
}
else
{
handle_message(mb); //澶勭悊榪欐潯娑堟伅
}
} // end while
return 0;
}
]]>