




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱Tcp與Udp的通信實(shí)現(xiàn)班級(jí)軟信1101學(xué)號(hào)20112329姓名杜海濤日期2013-7-13成績(jī)?cè)u(píng)閱人軟件學(xué)院實(shí)驗(yàn)?zāi)康呐c意義IP,端1、編寫Tcp服務(wù)器與客戶端程序,服務(wù)器程序在客戶端連接后輸出客戶端信息( 口號(hào))2、編寫Tcp服務(wù)器與客戶端程序,客戶端在連接后可從鍵盤輸入字符,在服務(wù)器端實(shí)時(shí) 顯3、在2的基礎(chǔ)上,服務(wù)器判斷接收到的字符,如是某指定字符,則服務(wù)器退出監(jiān)聽(tīng)4、編寫基于Udp的控制臺(tái)聊天程序通過(guò)tcp和udp的編程實(shí)現(xiàn) windows環(huán)境下的進(jìn)程間的通信。二、實(shí)驗(yàn)環(huán)境操作系統(tǒng):Win dows 7實(shí)驗(yàn)環(huán)境:Microsoft Visual C+6.0三、實(shí)
2、驗(yàn)的預(yù)習(xí)內(nèi)容傳輸控制協(xié)議 TCP(Tra nsport Con trol Protocol)是一種面向連接的,可靠的傳輸層協(xié)議。面向連接是指一次正常的 TCP傳輸需要通過(guò)在TCP客戶端和TCP服務(wù)端建立 特定的虛電路連接來(lái)完成,該過(guò)程通常被稱為“三次握手”。舉例說(shuō)明,TCP客戶端需要和TCP服務(wù)端建立連接,過(guò)程如圖所示LSTENTC3 StiteTCP PacketTCP StateCLOSEDSEQ«1)OOfCTLi$YNSYNSENTSYN-RECfIVEDACIMOOh CTLSYNIACKESTARLISHFDSVN-RFCfIVFnSF0.1WArK.7S1,CTl
3、71;ACKFSTABLISHFn第一步中,客戶端向服務(wù)端提出連接請(qǐng)求。這時(shí)TCP SYN標(biāo)志置位??蛻舳烁嬖V服務(wù)端序列號(hào)區(qū)域合法,需要檢查。客戶端在TCP報(bào)頭的序列號(hào)區(qū)中插入自己的ISN。服務(wù)端收到該 TCP分段后,在第二步以自己的ISN回應(yīng)(SYN標(biāo)志置位),同時(shí)確認(rèn)收到客戶端的第一個(gè)TCP分段(ACK標(biāo)志置位)。在第三步中,客戶端確認(rèn)收到服務(wù)端的ISN(ACK標(biāo)志置位)。到此為止建立完整的 TCP連接,開(kāi)始全雙工模式的數(shù)據(jù)傳輸過(guò)程。UDP(User Datagram Protocol ),即用戶數(shù)據(jù)報(bào)協(xié)議。它屬于"面向無(wú)連接的不可靠的傳輸”的類型。UDP中,每個(gè)數(shù)據(jù)包稱為“數(shù)據(jù)
4、報(bào)”,它的包頭只包含4個(gè)域,主要是地址信息與包的長(zhǎng)度和校驗(yàn)信息。與此對(duì)應(yīng),TCP包的頭信息有10多個(gè)域。因此UDP的網(wǎng)絡(luò)開(kāi)銷一般要小于 TCP由于UDP在傳送數(shù)據(jù)過(guò)程中沒(méi)有建立連接,也不進(jìn)行檢查,因此UDP是不可靠的,它不能保證數(shù)據(jù)報(bào)能安全無(wú)誤地到達(dá)目的主機(jī)。四、實(shí)驗(yàn)的步驟與調(diào)試方法程序的流程圖TCP協(xié)議客戶端服務(wù)器UDP協(xié)議下實(shí)驗(yàn): 程序流程圖:UDP協(xié)議服務(wù)器客戶端五、實(shí)驗(yàn)數(shù)據(jù)與實(shí)驗(yàn)結(jié)果Tcpclie ntsiseFfrady to connect 127成功.據(jù)input your word:>i am tcp client 戍功發(fā)送藪扌啟16 >»5,te<
5、s>.input your word>hello there或功發(fā)送數(shù)據(jù)12 bytets>.input your uord:>back準(zhǔn)備關(guān)閉客戶端連接.Press any key to cont inue,TcperverUdp clie ntU 'CU5erski dDeslctopH«tClientDebugN etCJ ient.exePlfrflse inputhello192.168.1.10Please input1 U clientdata:say:hello data:,are ou ok?192,168.1say;i am ok
6、Pl»asfi input ilat:192.168.1.10 saj/:see you kchat end!Press any key to continuesayt hello data:say: i am client . are you ok? data:Udp serverH PU5erslci dDesktGpNetSrvDe bugN etSrv. exe"192>168.1.10Please input hello 192.168.1.IB Please input i Mi o k 192.168.1.10 chat end?Press any ke
7、y to cont inue六、實(shí)驗(yàn)用程序清單(要有注釋)TCPSERVER:/ Module Name: tcpserver.cpp#in clude <win sock2.h> #in clude <stdio.h>#pragma comme nt(lib, "ws2_32.lib")void mai n(void)WSADATASOCKETSOCKETSOCKADDR_INSOCKADDR_INwsaData;Liste nin gSocket;NewC onnection;ServerAddr;Clie ntAddr;intint chari
8、ntClie ntAddrLe n;Port = 5150;Ret;DataBuffer1024;/ I nitialize Win sock version 2.2if (Ret = WSAStartup(MAKEWORD(2,2), &wsaData) != 0)prin tf("WSAStartup failed with error %dn". Ret);return;/ Create a new socket to liste ning for clie nt connections.if (Liste nin gSocket = socket(AF_IN
9、ET, SOCK_STREAM, IPPROTO_TCP)=INVALID_SOCKET)prin tf("socket failed with error %dn", WSAGetLastError();WSAClea nu p();return;ServerAddr.sin_family = AF_INET;ServerAddr.s in _port = hton s(Port);ServerAddr.sin_addr.s_addr = hton l(INADDR_ANY);/ Associate the address in formati on with the s
10、ocket using bind.if (bi nd(Liste nin gSocket, (SOCKADDR *)& ServerAddr, sizeof(ServerAddr)=SOCKET_ERROR)prin tf("bi nd failed with error %dn", WSAGetLastError();closesocket(Liste nin gSocket);WSAClea nu p();return;/ Liste n for clie nt connections. We used a backlog of 5 which is/ no r
11、mal for many applicati ons.if (liste n(Liste nin gSocket, 5) = SOCKET_ERROR)prin tf("liste n failed with error %dn", WSAGetLastError();closesocket(Liste nin gSocket);WSAClea nu p();return;prin tf("等待客戶端連接端口%d.n", Port);/ Accept a new connection whe n one arrives.Clie ntAddrLe n =
12、 sizeof(Clie ntAddr);if (NewCo nn ection = accept(Liste nin gSocket, (SOCKADDR *) & Clie ntAddr,& Clie ntAddrLe n) = INVALID_SOCKET)prin tf("accept failed with error %dn", WSAGetLastError();closesocket(Liste nin gSocket);WSAClea nu p();return;printf(”成功建立連接%sn",inet_n toa(Clie
13、 ntAddr.s in _addr);closesocket(Liste nin gSocket);/ Start sending and receivi ng data on NewC onnection. For simplicity,/ we will just receive some data and report how many bytes were/ received.printf(”等待接收數(shù)據(jù).n");printf("IP is %sn",inet_ntoa(ClientAddr.sin_addr); /打印 ip 地址prin tf(&qu
14、ot;port is %dn",hto ns(Clie ntAddr.sin_port); /打印端口號(hào)While(flag)接收數(shù)if (Ret = recv(NewCo nn ectio n, DataBuffer, sizeof(DataBuffer), 0) /據(jù)=SOCKET_ERROR)prin tf("recv failed with error %dn", WSAGetLastError();closesocket(NewC onnection);WSAClea nu p();return;if(i=strcmp(buffer,"back
15、")=O) /如果是指定字符斷開(kāi)連接flag=0;if(flag)*(DataBuffer+Ret)='O:printf("成功接收數(shù)據(jù) %s,共 %d byte(s).n", DataBuffer,Ret);printf(" 準(zhǔn)備關(guān)閉客戶端連接.n");closesocket(NewC onn ecti on);/ When your applicati on is fini shed han dli ng the connections/ call WSAClea nup.WSAClea nu p();/ tcpclie nt.ex
16、e <server IP address>/TCPCLIENT:#i nclude <win sock2.h>#in clude <stdio.h>void mai n(void)WSADATAwsaData;SOCKETs;SOCKADDR_IN ServerAddr; intPort = 5150;intRet;Charsen dbuf100;/ I nitialize Win sock version 2.2if (Ret = WSAStartup(MAKEWORD(2,2), &wsaData) != 0)prin tf("WSAS
17、tartup failed with error %dn", Ret); return;/ Create a new socket to make a clie nt conn ecti on.if (s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)=INVALID_SOCKET)prin tf("socket failed with error %dn", WSAGetLastError();WSAClea nu p();return;ServerAddr.sin_family = AF_INET;ServerAddr.
18、s in _port = hton s(Port);本機(jī)ipServerAddr.sin_addr.s_addr = in et_addr("127.0.0.1");/ Make a connection to the server with socket s.prin tf("ready to conn ect %s:%d.n",i net_n toa(ServerAddr.s in _addr), hton s(ServerAddr.s in _port);if (co nn ect(s, (SOCKADDR *) & ServerAddr,
19、 sizeof(ServerAddr)=SOCKET_ERROR)prin tf("co nn ect failed with error %dn", WSAGetLastError(); closesocket(s);WSAClea nu p();return;printf(”客戶端連接成功.n");/ At this point you can start sending or receivi ng data on/ the socket s. We will just send a hello message to the server.printf(&qu
20、ot;準(zhǔn)備傳送數(shù)據(jù)n");while(1)prin tf("i nput your word:");fflush(stdi n);scan f("%s",se ndbuf);prin tf("n");if(strcmp(se ndbuf,"back")=O) /如果是指定字符退出連接break;sen d(s, sen dbuf, sizeof(se ndbuf), 0)if (Ret = sen d(s, sen dbuf, sizeof(se ndbuf), 0) = SOCKET_ERROR)pri
21、n tf("se nd failed with error %dn", WSAGetLastError(); closesocket(s);WSAClea nu p();return;printf(”成功發(fā)送數(shù)據(jù) %d byte(s).n", Ret);/ When you are fini shed sending and receivi ng data on socket s,/ you should close the socket.printf(" 關(guān)閉連接.n");closesocket(s);/ When your applicat
22、i on is fini shed han dli ng the connection, call/ WSAClea nup.WSAClea nu p();UDPSERVER:#i ncludevWi nsock2.h>#i nclude<stdio.h>void main()WORD wVersio nRequested;WSADATA wsaData;int err;wVersio nRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersi on Requested, &wsaData );if ( err !=
23、0 )return;if ( LOBYTE( wsaData.wVersion ) != 1 |HIBYTE( wsaData.wVersio n ) != 1 )WSAClea nup(); return;SOCKET sockSrv=socket(AFN ET,SOCK_DGRAM,O); SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_u n.S_addr=hto nl(INADDR_ANY); addrSrv.sin_family=AFN ET;addrSrv.sin_port=hto ns(6000);bin d(sockSrv,(SOCKADDR* )
24、&addrSrv,sizeof(SOCKADDR);char recvBuf100;char sen dBuf100;char tempBuf200;SOCKADDR_IN addrClie nt;int len=sizeof(SOCKADDR);while(1)recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR* )&addrClie nt,&len); if('q'=recvBuf0)sen dto(sockSrv,"q",strle n("q")+1,0,(SOCKADDR* )
25、&addrClie nt,le n); prin tf("chat en d!n");break;sprin tf(tempBuf,"%ssay: %s",i net_n toa(addrClie nt.sin_addr),recvBuf);prin tf("%sn",tempBuf);prin tf("Please in put data:' n"); gets(se ndBuf);sen dto(sockSrv,se ndBuf,strle n(se ndBuf)+1,0,(SOCKADDR*
26、)&addrClie nt ,le n);closesocket(sockSrv);WSAClea nup();UDPCLIENT:#i ncludevWi nsock2.h>#i nclude<stdio.h>void main()WORD wVersio nRequested;WSADATA wsaData;int err;wVersio nRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersi on Requested, &wsaData );if ( err != 0 )return;if ( LOBYTE( wsaData.wVersion ) != 1 |HIBYTE( wsaData.wVersio n ) != 1 )WSAClea nup();return;SOCKET sockClie nt=socket(AFN ET,SOCK_DGRAM,0); SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_u n.S_addr=i net_addr("127.0.0.1"); addrSrv.sin_family=AFN ET;addrSrv.sin_port=hto ns(6000);char recv
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物質(zhì)能發(fā)電的生物質(zhì)能發(fā)電新技術(shù)開(kāi)發(fā)考核試卷
- 一年級(jí)口算練習(xí)題大全(1000題)
- 靜脈血液標(biāo)本采集指南 2
- 血液透析患者的護(hù)理
- 小學(xué)四年級(jí)語(yǔ)文詞語(yǔ)搭配練習(xí)題
- 江西省南昌二中、九江一中、新余一中、臨川一中八所重點(diǎn)中學(xué)2025屆高三下第二次診斷性考試數(shù)學(xué)試題含解析
- 新疆昌吉市教育共同體2025屆高中畢業(yè)班第一次模擬(生物試題理)試卷含解析
- 平頂山文化藝術(shù)職業(yè)學(xué)院《影視平面設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省泰安市南關(guān)中學(xué)2024-2025學(xué)年中考數(shù)學(xué)試題考前三個(gè)月(江蘇專版)含解析
- 江西省宜春市豐城市豐城九中2025屆高三4月綜合測(cè)試生物試題理試題含解析
- 化學(xué)性及藥物性頜骨骨髓炎
- 神奇的植物王國(guó)課件
- 員工崗位技能考核評(píng)定表
- 人工氣道的護(hù)理劉亞課件
- 項(xiàng)目部安全生產(chǎn)事故應(yīng)急預(yù)案
- 垂體瘤-PPT課件
- 鉆井井控裝置
- 贛美版(江西)小學(xué)四年級(jí)美術(shù)下全冊(cè)教案
- 12隊(duì)淘汰賽_對(duì)陣表
- 我國(guó)城市馬拉松賽事發(fā)展現(xiàn)狀分析
- 貧困戶登記表入戶摸底調(diào)查表
評(píng)論
0/150
提交評(píng)論