




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、計算機網(wǎng)絡實驗報告實驗名稱Tcp與Udp的通信實現(xiàn)班級軟信1101學號20112329姓名杜海濤日期2013-7-13成績評閱人軟件學院實驗目的與意義IP,端1、編寫Tcp服務器與客戶端程序,服務器程序在客戶端連接后輸出客戶端信息( 口號)2、編寫Tcp服務器與客戶端程序,客戶端在連接后可從鍵盤輸入字符,在服務器端實時 顯3、在2的基礎上,服務器判斷接收到的字符,如是某指定字符,則服務器退出監(jiān)聽4、編寫基于Udp的控制臺聊天程序通過tcp和udp的編程實現(xiàn) windows環(huán)境下的進程間的通信。二、實驗環(huán)境操作系統(tǒng):Win dows 7實驗環(huán)境:Microsoft Visual C+6.0三、實
2、驗的預習內(nèi)容傳輸控制協(xié)議 TCP(Tra nsport Con trol Protocol)是一種面向連接的,可靠的傳輸層協(xié)議。面向連接是指一次正常的 TCP傳輸需要通過在TCP客戶端和TCP服務端建立 特定的虛電路連接來完成,該過程通常被稱為“三次握手”。舉例說明,TCP客戶端需要和TCP服務端建立連接,過程如圖所示LSTENTC3 StiteTCP PacketTCP StateCLOSEDSEQ«1)OOfCTLi$YNSYNSENTSYN-RECfIVEDACIMOOh CTLSYNIACKESTARLISHFDSVN-RFCfIVFnSF0.1WArK.7S1,CTl
3、71;ACKFSTABLISHFn第一步中,客戶端向服務端提出連接請求。這時TCP SYN標志置位。客戶端告訴服務端序列號區(qū)域合法,需要檢查。客戶端在TCP報頭的序列號區(qū)中插入自己的ISN。服務端收到該 TCP分段后,在第二步以自己的ISN回應(SYN標志置位),同時確認收到客戶端的第一個TCP分段(ACK標志置位)。在第三步中,客戶端確認收到服務端的ISN(ACK標志置位)。到此為止建立完整的 TCP連接,開始全雙工模式的數(shù)據(jù)傳輸過程。UDP(User Datagram Protocol ),即用戶數(shù)據(jù)報協(xié)議。它屬于"面向無連接的不可靠的傳輸”的類型。UDP中,每個數(shù)據(jù)包稱為“數(shù)據(jù)
4、報”,它的包頭只包含4個域,主要是地址信息與包的長度和校驗信息。與此對應,TCP包的頭信息有10多個域。因此UDP的網(wǎng)絡開銷一般要小于 TCP由于UDP在傳送數(shù)據(jù)過程中沒有建立連接,也不進行檢查,因此UDP是不可靠的,它不能保證數(shù)據(jù)報能安全無誤地到達目的主機。四、實驗的步驟與調(diào)試方法程序的流程圖TCP協(xié)議客戶端服務器UDP協(xié)議下實驗: 程序流程圖:UDP協(xié)議服務器客戶端五、實驗數(shù)據(jù)與實驗結果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準備關閉客戶端連接.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六、實驗用程序清單(要有注釋)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); /打印端口號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) /如果是指定字符斷開連接flag=0;if(flag)*(DataBuffer+Ret)='O:printf("成功接收數(shù)據(jù) %s,共 %d byte(s).n", DataBuffer,Ret);printf(" 準備關閉客戶端連接.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);本機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;準備傳送數(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(" 關閉連接.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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 試訓隊員合同協(xié)議書
- 2025年藥物檢測設備項目發(fā)展計劃
- 網(wǎng)紅美食區(qū)域代理加盟合同及特色配料研發(fā)供應協(xié)議
- 網(wǎng)上商店經(jīng)營風險管理與責任協(xié)議
- 土地承包經(jīng)營權流轉與農(nóng)業(yè)循環(huán)經(jīng)濟項目合作協(xié)議
- 醫(yī)用麻醉設備全面檢修與保養(yǎng)合同
- 快遞末端網(wǎng)點承包經(jīng)營與快遞成本控制協(xié)議
- 跨境網(wǎng)絡游戲版號申請代理服務合同
- 農(nóng)村留守兒童勞動教育扶持協(xié)議
- 抖音平臺短視頻內(nèi)容創(chuàng)作者收益分配與權益保障協(xié)議
- 微生物實驗室病原微生物評估報告
- 陜旅版五年級英語上冊句型詞匯知識點總結
- 漢字構字的基本原理和識字教學模式分析
- RouterOS介紹
- 綜采工作面液壓支架壓死救活技術研究
- 十字軸鍛造成型工藝及模具設計畢業(yè)論文
- 主體結構監(jiān)理實施細則范本
- 控制性詳細規(guī)劃 - 寧波市規(guī)劃局
- 保潔員工考勤表
- JGJ8-2016建筑變形測量規(guī)范
- 《MSDS培訓資料》PPT課件.ppt
評論
0/150
提交評論