計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)一WindowsSocke編程_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)一WindowsSocke編程_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)一WindowsSocke編程_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)一WindowsSocke編程_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)一WindowsSocke編程_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)實(shí)驗(yàn)一WindowsSocket

編程華中科技大學(xué)電信學(xué)院2015WindowsSocket編程實(shí)驗(yàn)?zāi)康腟ocket編程

常用API實(shí)驗(yàn)軟件實(shí)驗(yàn)內(nèi)容2實(shí)驗(yàn)?zāi)康耐ㄟ^編程了解Client/Server結(jié)構(gòu)的網(wǎng)絡(luò)通信模型掌握Socket機(jī)制的工作原理掌握基于Client/Server結(jié)構(gòu)的WindowsSocketTCP/UDP程序設(shè)計(jì)方法3Client-Server結(jié)構(gòu)在TCP/IP網(wǎng)絡(luò)環(huán)境下,不同主機(jī)上的兩個(gè)應(yīng)用程序通信普遍采用客戶端-服務(wù)器模型(client-serverarchitecture,C/S)Client在需要服務(wù)時(shí)向server提出申請(qǐng)Server等待client提出請(qǐng)求并予以相應(yīng)Server始終運(yùn)行,監(jiān)聽網(wǎng)絡(luò)接口收到client請(qǐng)求啟動(dòng)服務(wù)進(jìn)程響應(yīng)客戶,

同時(shí)繼續(xù)監(jiān)聽服務(wù)窗口,保證后續(xù)的client也能及時(shí)得到服務(wù)4背景知識(shí)——WindowsSocket是什么?WindowsSockets是MicrosoftWindows的網(wǎng)絡(luò)程序設(shè)計(jì)接口Socket于1981年在BSD4.1UNIX中提出客戶端/服務(wù)器模型580年代初,美國(guó)國(guó)防部高級(jí)研究計(jì)劃局(ARPA)給UCBerkeley提供了資金,讓他們?cè)赨NIX操作系統(tǒng)下實(shí)現(xiàn)TCP/IP協(xié)議。在這個(gè)項(xiàng)目中,研究人員為TCP/IP網(wǎng)絡(luò)通信開發(fā)了一個(gè)API(應(yīng)用程序接口),這個(gè)API稱為Socket接口(套接字)。今天Socket接口是TCP/IP網(wǎng)絡(luò)最為通用的API,也是在Internet上進(jìn)行應(yīng)用開發(fā)最為通用的API。90年代初,由Microsoft聯(lián)合其他幾家公司共同制定了一套Windows下的網(wǎng)絡(luò)編程接口,即WindowsSocket規(guī)范。它是BerkeleySocket的重要擴(kuò)充,主要是增加了一些異步函數(shù),并增加了符合Windows消息驅(qū)動(dòng)特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。WinSock規(guī)范是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。從1991年的1.0版到1995年的2.0.8版,經(jīng)過不斷完善,已成為Windows網(wǎng)絡(luò)編程的事實(shí)上的標(biāo)準(zhǔn)。一個(gè)本地的,應(yīng)用程序創(chuàng)建的,操作系統(tǒng)控制的接口。通過該接口應(yīng)用進(jìn)程可以從另一個(gè)應(yīng)用進(jìn)程發(fā)送或者接收消息socketSocket套接字目標(biāo):學(xué)習(xí)如何建立客戶端/服務(wù)器應(yīng)用程序,使用套接字進(jìn)行通信套接字(socket):

應(yīng)用進(jìn)程之間的接口,實(shí)現(xiàn)端到端的傳輸協(xié)議6Internet由操作系統(tǒng)控制由應(yīng)用開發(fā)者控制傳輸層應(yīng)用層物理層數(shù)據(jù)鏈路層網(wǎng)絡(luò)層進(jìn)程傳輸層應(yīng)用層物理層數(shù)據(jù)鏈路層網(wǎng)絡(luò)層進(jìn)程套接字Socket是應(yīng)用層與TCP/IP協(xié)議棧通信的中間軟件抽象層WinSockDLLWinSock與操作系統(tǒng)的關(guān)系7應(yīng)用程序1應(yīng)用程序2網(wǎng)絡(luò)編程接口——如WinSockAPI網(wǎng)絡(luò)通信協(xié)議——如TCP/IP協(xié)議操作系統(tǒng)——如Windows物理通信介質(zhì)動(dòng)態(tài)鏈接庫16位版:WINSOCK.DLL32位版:WSOCK32.DLLTCP套接字編程服務(wù)器做好準(zhǔn)備服務(wù)器進(jìn)程必須首先運(yùn)行服務(wù)器必須先創(chuàng)建socket等待處理客戶端的連接請(qǐng)求客戶端與服務(wù)器的聯(lián)系創(chuàng)建客戶端本地的TCPsocket指明服務(wù)器進(jìn)程的IP地址和端口號(hào)當(dāng)客戶端創(chuàng)建socket后,客戶端的TCPsocket與服務(wù)器TCPsocket建立連接8服務(wù)器收到客戶端連接請(qǐng)求后,創(chuàng)建新的socket用來與客戶端通信允許服務(wù)器與多個(gè)客戶端通信源端口號(hào)用來識(shí)別客戶端TCP協(xié)議提供了客戶端和服務(wù)器之間可靠的,按次序的字節(jié)流傳輸TCP套接字編程如同中國(guó)移動(dòng)的10086服務(wù)調(diào)用socket()建立一個(gè)套接口(移動(dòng)建立好一個(gè)電話總機(jī))bind()將該接口和本地IP地址和Port綁定(設(shè)定總機(jī)號(hào)為10086)listen()讓套接口做好偵聽準(zhǔn)備(隨時(shí)準(zhǔn)備接聽電話)客戶在套接口建立起來之后,便可調(diào)用connect()連接服務(wù)器指定的Port(用戶可撥打10086要求服務(wù))服務(wù)器調(diào)用accept()來接收客戶的連接請(qǐng)求(一旦有電話就接起)服務(wù)器收到請(qǐng)求后,建立新的socket來對(duì)此連接服務(wù),原來的socket回到監(jiān)聽等待狀態(tài)(總機(jī)接電話后轉(zhuǎn)某分機(jī)服務(wù),本身繼續(xù)等待新的電話)連接建立后,send()和recv()來發(fā)送和接收數(shù)據(jù)(客戶與客服對(duì)話)數(shù)據(jù)傳送結(jié)束,調(diào)用closesocket()關(guān)閉套接口(結(jié)束請(qǐng)掛機(jī))9常用APIAPI(ApplicationProgrammingInterface)應(yīng)用程序接口DLL裝載WinSock服務(wù)由動(dòng)態(tài)鏈接庫WinSockDLL提供,它完成WinSock的初始化任務(wù),協(xié)商WinSock的版本支持,并分配必要的資源。在使用WinSockAPI之前,必須調(diào)用WSAStartup函數(shù)對(duì)其進(jìn)行初始化。intWSAStartup(WORDv,(LPWSADATA)&WD)DLL卸載當(dāng)不需WinSockDLL的服務(wù)時(shí),釋放DLL所使用的資源,需調(diào)用WSACleanup函數(shù)終止對(duì)WinSock庫的使用intWSACleanup()10常用API創(chuàng)建套接字:socket()綁定本地地址:bind()偵聽連接:listen()建立套接字連接:accept(),connect()面向連接的數(shù)據(jù)傳輸:send(),recv()關(guān)閉套接字:closesocket()11常用APISocketAPI類別:可支持任意的底層協(xié)議族PF_INET:用于互聯(lián)網(wǎng)編程PF_UNIX:用于Unix管道編程PF_PACKET:直接訪問網(wǎng)絡(luò)接口(i.e,繞過TCP/IP協(xié)議棧)兩種基本socket

API分別支持兩種傳輸服務(wù):SOCK_STREAM:

可靠的,字節(jié)流服務(wù)(TCP)SOCK_DGRAM:

非可靠的數(shù)據(jù)報(bào)服務(wù)(UDP)應(yīng)用案例客戶端從鍵盤讀取一行字符(數(shù)據(jù))并將該數(shù)據(jù)發(fā)送到服務(wù)器;服務(wù)器接收數(shù)據(jù)后并顯示在屏幕上。12示例:C客戶端(TCP)#include<windows.h>#include<winsock2.h>#include<stdio.h>#include<string.h>#include<conio.h>#defineSERVER_PORT5432#defineMAX_LINE256intmain(intargc,char*argv[]){WSADATAWSAData;intWSAreturn;structhostent*hp;structsockaddr_insin;char*host;charbuf[MAX_LINE];ints;intlen;13Socket編程庫文件示例:C客戶端(TCP)

if(argc==2){ host=argv[1]; } else{ fprintf(stderr,"usage:simplex-talkhost\n"); exit(1); }

WSAreturn=WSAStartup(0x101,&WSAData); if(WSAreturn) { fprintf(stderr,"simplex-talk:WSAerror.\n"); exit(1); } /*translatehostnameintopeer’sIPaddress*/ hp=gethostbyname(host); if(!hp){ fprintf(stderr,"simplex-talk:unknownhost:%s\n",host); exit(1); } /*buildaddressdatastructure*/ memset((char*)&sin,0,sizeof(sin));memcpy((char*)&sin.sin_addr,hp->h_addr,hp->h_length);sin.sin_family=AF_INET;sin.sin_port=htons(SERVER_PORT);

14將遠(yuǎn)程主機(jī)的名稱轉(zhuǎn)換成IP地址參數(shù)初始化程序參數(shù)處理WinSock的初始化示例:C客戶端(TCP)/*activeopen*/ if((s=socket(PF_INET,SOCK_STREAM,0))<0){ perror("simplex-talk:socket"); exit(1); } if(connect(s,(structsockaddr*)&sin,sizeof(sin))<0){ perror("simplex-talk:connectfalied"); close(s); exit(1); }fprintf(stderr,"clientisconnectingto%s\n",host); /*mainloop:getandsendlinesoftext*/ while(fgets(buf,sizeof(buf),stdin)){ buf[MAX_LINE-1]=’\0’; len=strlen(buf)+1; send(s,buf,len,0); } WSACleanup(); return1;}15創(chuàng)建客戶端socket從屏幕讀取字符串連接服務(wù)器示例:論C服務(wù)研器(T蹈CP紐奉)#i伏nc思lu企de吼<戀wi違nd斤ow擺s.亂h>#i塘nc紫lu矩de繼<港wi活ns般oc扭k2究.h置>#i本nc女lu辮de魂<擴(kuò)st療di叛o.認(rèn)h>#i須nc貼lu乳de侄<愉st返ri膝ng和.h熱>#d宮ef疼in侵e蛋SE聯(lián)RV頭ER巖_P煉OR撲T雹54譜32#d秋ef茫in輩e茅MA第X_奸PE站ND竄IN麻G枕5#d飾ef弄in呈e襯MA槽X_撇LI紐奉NE薄2遼56in刷t搞ma立in轎(){WS抓AD竹AT轉(zhuǎn)A匯WS警AD勿at博a;in拔t擊WS肉Ar歲et余ur獨(dú)n;/*恒s拐er楚ve六r臘ad宜dr領(lǐng)es梢s棟*/st蜻ru都ct霧s柱oc唉ka籮dd問r_屆in喜s淹in常;st止ru注ct妄s仙oc位ka相dd領(lǐng)r_滴in蟻r霉em蹤蝶ot鞏e;ch皂ar攔b逮uf梯[M故AX歲_L義IN翅E]浴;in稀t脾le忍n;in貢t胸s,羽n降ew責(zé)_s共;WS榆Ar鹿et犬ur僑n版=駛WS熊AS鑒ta因rt吩u(píng)p殼(0愈x1弄01猜,&塵WS窯AD雅at穴a)疊;if照(W遵SA霧re結(jié)tu嘩rn隸){fp胖ri壁nt樂f(錘st菜de繩rr她,位"s唱im杜pl抱ex紀(jì)-t派al閣k:潛W蠶SA觀e就rr踩or凍.\往n"客);ex捧it祝(1感);}16So塘ck饅et編程慕庫文慎件Wi葡nS好oc淺k的初勵(lì)始化示例:撈C服務(wù)朱器(T才CP喪)/*借b友ui裙ld經(jīng)a絹dd煙re且ss爸d墻at秒a注st痛ru驕ct洽ur襲e嚼*/me萍ms循et話((閑ch遼ar他*屢)&院si市n,籍0沈,貨si債ze漂of部(s攻in今))崗;si富n.漏si聯(lián)n_殲fa趙mi杰ly默=帖A唱F_額IN喂ET大;si盯n.繭si鞭n_鬧ad烏dr鉛.s荒_a芒dd籌r傍=儀IN夫AD耳DR擱_A遍NY匙;si喚n.柄si糕n_嫂po輝rt泡=羽h逐to龍ns束(S訴ER指VE廚R_傳PO猜RT窮);/*跟s滾et角up版p繳as店si薄ve趴o運(yùn)pe修n羅*/if拾(鞭(s考=痰s導(dǎo)oc臺(tái)ke謹(jǐn)t(妨PF艱_I沉NE須T,細(xì)S恒OC睡K_巖ST辱RE奔AM小,佛0)廳)卡<硬0)廟{pe貝rr績(jī)or喬("仇si浴mp柴le挎x-凈ta謹(jǐn)lk召:案so蝦ck螞et尺f休ai愛le伶d.奇")跪;ex授it傅(1處);}if挎(艇(b韻in感d(惜s,絮(約st出ru劃ct幕s起oc辨ka扎dd省r糟*)摸&s洋in壺,葵si臉ze單of托(s技in絞))那)間<零0)娃{pe濤rr雀or袍("墓si療mp賽le若x-內(nèi)ta蠅lk主:收bi正nd撒f圣ai寶le行d.食")年;ex像it覆(1萬);}pr總in蟻tf俘("棕se握rv遭er嘗i堵s灑re井a(chǎn)d們y先in壓l跳is窄te王ni詳ng摘.認(rèn)..瓶\n君")寸;li份st襯en寺(s雕,刮MA汁X_叛PE遞ND沒IN廢G)縮慧;/*盲w初ai康t攪fo麗r職co譽(yù)nn歸ec怖ti腹on裕,荷th辜en麗r移ec態(tài)ei極ve跌a已nd凈p鑼ri濱nt差t運(yùn)ex瀉t轉(zhuǎn)*/wh迷il圖e(傻1)爛{le輩n氧=仙si惜ze產(chǎn)of跡(s秩tr沾uc椅t棵so錯(cuò)ck庫ad班dr獵_i節(jié)n)荷;if拍(誤(n捆ew錯(cuò)_s圖=獸a獲cc山ep別t(訪s,都(籠st巖ru樸ct焦s秩oc界ka期dd款r虜*)岔&r門em偶o(jì)t柏e,尼&杜le駁n)倆)世<食0)奮{pe雙rr艙or絮("嗎si領(lǐng)mp柔le咬x-娛ta標(biāo)lk總:榮ac薯ce抵pt房誠f篇ai太le碌d.擾")漠;ex董it僑(1嚇);}17服務(wù)so廣ck蹦et等待客戶蔽端連告接創(chuàng)建澇服務(wù)針客戶愈端的So獲ck耗et,并眠讀取躬信息在端活口54蚊32創(chuàng)建歡迎so泛ck根et示例:啟C服務(wù)塑器(T副CP撤)pr傘in踢tf倦("乘re燭ce廚iv強(qiáng)ed斤a膨c楊on毫ne捏ct鼓io桐n奶fr魂om材%寨s呢:已\n湖",泊i沾ne匆t_贈(zèng)nt長(zhǎng)oa講(r脆em椅ot香e.褲si哲n_雷ad群dr收))慢;wh萌il交e摸(l居en雙=嗎r亞ec累v(伍ne踢w_旋s,攀b春uf兔,喇si躬ze砌of貴(b燈uf痰),更0坡))隆{//短pr艱in棚tf故("購re詳ce經(jīng)iv寇ed拐%溉2d蠢c慈ha或rs艙:"護(hù),續(xù)le詠n)剃;fp珍ut扮s(極bu匠f,跟s腿td恐ou剪t)設(shè);}cl頁os規(guī)e(旋ne岡w_美s)牲;}WS居AC航le劫an未up供()廢;re飛tu究rn同1駝;}18服務(wù)束器將食信息顯示乒在屏閉幕上wh淚il譯e循環(huán)迫結(jié)束份,等待王另外碗的客滾戶端連碧接實(shí)驗(yàn)彩環(huán)境VC電++芳6圣.0Co匯de蠅B醬lo妙ck違sht冒tp本:/費(fèi)/w驅(qū)ww而.c舌od隱eb連lo卷ck脆s.說or塔g/開源屆的、襖跨平策臺(tái)的C/家C+秧+集成嚇開發(fā)遮環(huán)境使用滔了wx凈Wi炭dg崇et視s的界抹面庫需加拿載Mi誦nG章W編譯熄器19如何計(jì)用Co裕de引Bl雙oc坐ks進(jìn)行C語言談編程矛?創(chuàng)建絲式一個(gè)悉新pr且oj軋ec碧t20如何拿用Co雜de找Bl錯(cuò)oc毛ks進(jìn)行C語言枝編程預(yù)?選擇Co歪ns蔥ol幕e孫ap遲pl騙ic器at蓬io掘n21如何透用Co勝de蘿Bl污oc方ks進(jìn)行C語言過編程服?選擇GN財(cái)U(kuò)唱GC弓C墨Co犧mp示il耍er為編腐譯器22如何遺用Co驕de裝Bl域oc門ks進(jìn)行C語言

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論