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

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱-SOCKET編程、實(shí)驗(yàn)?zāi)康募由顚?duì)TCP和UDP的理解;實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間TCP/UDP通信。二、實(shí)驗(yàn)過(guò)程原理:socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用以實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。如下圖所示:應(yīng)用層剛絡(luò)層鏈路層serverclient創(chuàng)socket連接指定計(jì)算機(jī)的端口向socket中寫入信息關(guān)31socketTCP通信原理如圖:創(chuàng)建socket綁定socket端口號(hào)監(jiān)聽該端口號(hào)接收未自客戶端的連接請(qǐng)求socket中讀取字符關(guān)fflsocket代碼:服務(wù)器端:#pragmacomment(lib,WS2_32.lib

2、)#includevWinsock2.h#include#includeusingnamespacestd;intmain()inti=0;WSADATAwsaData;SOCKEToldSocket,newSocket;/客戶地址長(zhǎng)度intiLen=0;/發(fā)送的數(shù)據(jù)長(zhǎng)度intiSend=0;/接收的數(shù)據(jù)長(zhǎng)度intircv=0;/處世要發(fā)送給客戶的信息charbuf20=lamaserver;/接收來(lái)自用戶的信息charfromcli512;/客戶和服務(wù)器的SOCKET地址結(jié)構(gòu)structsockaddr_inser,cli;if(WSAStartup(MAKEWORD(2,2),&wsaDa

3、ta)!=0)coutfailedtoloadwinsockendl;return0;coutserverwaitingendl;coutendl;/創(chuàng)建服務(wù)器端幀聽SOCKEToldSocket=socket(AF_INET,SOCK_STREAM,0);if(oldSocket=INVALID_SOCKET)coutsocket()failed:vvWSAGetLastError()vvendl;return0;/以下是建立服務(wù)器端的SOCKET地址結(jié)構(gòu)ser.sin_family=AF_INET;ser.sin_port=htons(5050);/使用系統(tǒng)指定的ip地址INADDR_AN

4、Y/ser.sin_addr.s_addr=htonl(INADDR_ANY);ser.sin_addr.s_addr=inet_addr(8);if(bind(oldSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)coutbind()failed:vWSAGetLastError()vvendl;return0;/進(jìn)入偵聽狀態(tài)if(listen(oldSocket,5)=SOCKET_ERROR)coutlisten()failed:vvWSAGetLastError()vvendl;return0;/接收客戶端的連接iLen=sizeof(

5、cli);newSocket=accept(oldSocket,(structsockaddr*)&cli,&iLen);新的SOCKETif(newSocket=INVALID_SOCKET)coutvaccept()failed:vvWSAGetLastError()vvendl;/return0;/進(jìn)入一個(gè)無(wú)限循環(huán),等待客戶發(fā)送數(shù)據(jù)whilei+;/服務(wù)器初始化接收緩沖區(qū)memset(fromcli,0,512);ircv=recv(newSocket,fromcli,sizeof(fromcli),O);if(ircv=SOCKET_ERROR)coutvrcv()failed:vWS

6、AGetLastError()v#include#includeusingnamespacestd;#defineDATA_BUFFER512intmain()WSADATAwsaData;SOCKETsClient;charch;inti=0;char*Serip=8;隨著程序所在主機(jī)的地址改變而改變intSeriPort=5050;/從服務(wù)器接收的數(shù)據(jù)的長(zhǎng)度intiLen;/發(fā)送的數(shù)據(jù)長(zhǎng)度intisnd;/接收緩沖區(qū)charbufDATA_BUFFER;/發(fā)送緩沖區(qū)charsndbufDATA_BUFFER;/服務(wù)器端SOCKET地址結(jié)構(gòu)structsockaddr_inser;/接收/發(fā)

7、送緩沖區(qū)的初始化memset(buf,0,sizeof(buf);memset(sndbuf,O,DATA_BUFFER);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)coutfailedtoloadwinsockendl;return0;/填寫要連接的服務(wù)器地址信息ser.sin_family=AF_INET;ser.sin_port=htons(SeriPort);ser.sin_addr.s_addr=inet_addr(Serip);/建立客戶端字節(jié)流式套接字sClient=socket(AF_INET,SOCK_STREAM,0);if(sCli

8、ent=INVALID_SOCKET)coutsocket()failed:wWSAGetLastErrorOwendl;return0;/請(qǐng)求與服務(wù)器建立連接sockaddrsockaddr/coutsetlink;if(connect(sClient,(struct*)&ser,sizeof(ser)=INVALID_SOCKET)coutconnect()failed:WSAGetLastError()endl;return0;else/向服務(wù)器端發(fā)送數(shù)據(jù)while(1)coutvvendl;i+;coutvv第vvivv發(fā)送isagirleruepwaitinST壬弄器服務(wù)器:報(bào)務(wù)器服

9、務(wù)器輻務(wù)器第灣戶端發(fā)送內(nèi)容為一十劭發(fā)送wertyuiopf客戶端發(fā)送內(nèi)容為展)yuiop蓉戶端發(fā)逵內(nèi)容為is弟4發(fā)逵L客戶端發(fā)送內(nèi)容為一一J口儀筋發(fā)送she爲(wèi)agiiJ:客戶端發(fā)送內(nèi)容為shJ4r-UJJ-,/TT為為為為為In在兩臺(tái)服務(wù)器上分別運(yùn)行服務(wù)器端和客戶端,結(jié)果如圖:上、C;DOCIJIE1ADlIirilLOCALS,lTeBpRar(HKlE8094務(wù)器話實(shí)崟.-!he11d,Iamaclient.Seruerreceiued.fromClientip:127.0.0-1,port:2BB4J12SeruerreceiuedFromClientip:J.poit:26043Ser

10、uerreceivedFvanClientip:LpaiLt:26843一StFMtrreceivedFromClientip:12?,0k011Fport:(260UDP通信原理如圖:UDP服務(wù)器端bmd()socketQ阻塞宜到接收:到客戶數(shù)據(jù)I處理客:戶數(shù)據(jù)seT敎據(jù)請(qǐng)求rsendtof)數(shù)據(jù)應(yīng)答ndt#inelude#inelude#definebuffer_length512#pragmacomment(lib,WS2_32.lib)voidmain()WSADATAwsadata;SOCKETsSocket;intilen;intirecv;charrecv_bufbuffer_l

11、ength;charsend_bufbuffer_length;/服務(wù)器和客戶SOCKET地址結(jié)構(gòu)structsockaddr_inseradd,cliadd;if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)printf(failedtoloadwinsocketn);return;sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf(socket()failed:%dn,WSAGetLastError();return;/初始化服務(wù)器SOCKET地址結(jié)構(gòu)seradd.sin

12、_family=AF_INET;seradd.sin_port=htons(6666);seradd.sin_addr.s_addr=htonl(INADDR_ANY);seradd.sin_addr.s_addr=inet_addr();if(bind(sSocket,(LPSOCKADDR)&seradd,sizeof(seradd)=SOCKET_RROR)printf(地址綁定時(shí)出錯(cuò):%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;ilen=sizeof(cliadd);/初始化接收緩沖區(qū)memset(recv_buf,0,size

13、of(recv_buf);irecv=recvfrom(sSocket,recv_buf,buffer_length,O,(structsockaddr*)&cliadd,&ilen);if(irecv=SOCKET_ERROR)printf(接收出錯(cuò)%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;elseif(irecv=0)return;elseClientprintf(n%s-,recv_buf);printf(Serverreceivedfromip:%s,port:%dn,inet_ntoa(cliadd.sin_addr),nt

14、ohs(cliadd.sin_port);while(1)/在此函數(shù)中cli為傳出參數(shù)irecv=recvfrom(sSocket,recv_buf,buffer_length,O,(structsockaddr*)&cliadd,&ilen);if(irecv=SOCKET_ERROR)printf(接收出錯(cuò)%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;elseif(irecv=0)break;elseClientprintf(n%s-,recv_buf);printf(Serverreceivedfromip:%s,port:%dn,

15、inet_ntoa(cliadd.sin_addr),ntohs(cliadd.sin_port);scanf(%s,send_buf);sendto(sSocket,send_buf,sizeof(send_buf),O,(structsockaddr*)&cliadd,sizeof(cliadd);closesocket(sSocket);WSACleanup();客戶端:#includestdafx.h#includevwinsock2.h#include#definedata_buffer1024voidmain()WSADATAwsadata;SOCKETsclient;/服務(wù)器地址

16、、端口號(hào)char*serip=8;intSeriport=6666;charch=qita;/服務(wù)器SOCKET地址結(jié)構(gòu)長(zhǎng)度intilen;/發(fā)送/接收數(shù)據(jù)大小intisend;intirecv;/要發(fā)送給服務(wù)器的數(shù)據(jù)charsend_buf=hello,lamaclient.;charrecv_bufdata_buffer;/服務(wù)器端的SOCKET地址結(jié)構(gòu)structsockaddr_inseradd,cliadd;/初始化接收緩沖區(qū)memset(recv_buf,0,sizeof(recv_buf);/字符數(shù)組初始化memset(ch,0,sizeof(ch);if(WSAStartup(

17、MAKEWORD(2,2),&wsadata)!=0)printf(failedtoloadwinsockn);return;/服務(wù)器SOCKET地址結(jié)構(gòu)初始化seradd.sin_family=AF_INET;seradd.sin_port=htons(Seriport);seradd.sin_addr.s_addr=inet_addr(serip);cliadd.sin_family=AF_INET;cliadd.sin_port=htons(7777);cliadd.sin_addr.s_addr=inet_addr();sclient=socket(AF_INET,SOCK_DGRAM

18、,0);if(sclient=INVALID_SOCKET)printf(buildsocketfailed!n);return;if(bind(sclient,(LPSOCKADDR)&cliadd,sizeof(cliadd)=SOCKET_ERROR)printf(地址綁定時(shí)出錯(cuò):dn,WSAGetLastError();return;/無(wú)連接不需要進(jìn)行地址與套接字的綁定,直接發(fā)送數(shù)據(jù)即可ilen=sizeof(seradd);isend=sendto(sclient,send_buf,sizeof(send_buf),O,(structsockaddr*)&seradd,ilen);i

19、f(isend!=0&isend!=SOCKET_ERROR)/printf(datahasbeensentsuccessfully!n);printf(客戶所發(fā)的數(shù)據(jù)為:%s,字節(jié)數(shù)為:%dn,send_buf,isend);elsereturn;while(1)scanf(%s,ch);sendto(sclient,ch,sizeof(ch),0,(structsockaddr*)&seradd,sizeof(seradd);irecv=recvfrom(sclient,recv_buf,data_buffer,O,(structsockaddr*)&seradd,&ilen);if(irecv=SOCKET_ERROR)printf(接收出錯(cuò)%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;elseif(irecv=0)break;elseClientClientprintf(n%s-,recv_buf);printf(Serverreceivedfromip:%s,port:%dn,inet_ntoa(seradd.sin_addr),ntohs(seradd.sin_port);closesocket(sclient);WSACleanup();本機(jī)上客戶端與服務(wù)器端通信結(jié)果

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論