TCPIP實驗報告_第1頁
TCPIP實驗報告_第2頁
TCPIP實驗報告_第3頁
TCPIP實驗報告_第4頁
TCPIP實驗報告_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、TCP/IP技術實驗報告書專業(yè):通信工程學生XX:X世超完成時間:11:28AM實驗一網(wǎng)絡應用程序基礎實驗目的:通過實驗,使學生熟悉并掌握運用TCP/IP技術進行網(wǎng)絡編程的基本知識,加深對課堂教學內(nèi)容的理解,掌握套接字網(wǎng)絡通信編程技術,能夠運用VC+為開發(fā)工具編程解決網(wǎng)絡通信中的實際問題,進行一些簡單的網(wǎng)絡應用程序設計。實驗內(nèi)容:1,Winsock的啟動與終止。2,Winsock的創(chuàng)建及綁定和關閉。3,建立通信連接listen及accept和connect4,數(shù)據(jù)的傳輸。5,簡單的客戶機/服務器之間的通信。要求:通過在SDK模式下完成數(shù)據(jù)通信的過程,掌握WindowsSocket的常用函數(shù)的形

2、式和使用方法,理解數(shù)據(jù)通信的過程。實驗步驟:1,打開VC環(huán)境1,使用向?qū)榭蛻舳藙?chuàng)建工程:選擇可執(zhí)行程序,選擇使用wsa環(huán)境,單文檔環(huán)境,其他的選擇默認設置2,在文件中添加代碼3,編譯調(diào)試4,使用向?qū)榉掌鞫藙?chuàng)建工程:選擇可執(zhí)行程序,選擇使用wsa環(huán)境,單文檔環(huán)境,其他的選擇默認設置5,在文件中添加代碼6,編譯調(diào)試7,分別打開兩個系統(tǒng)命令窗口中,并分別在其中運行客戶端和服務器端程序。8,在客戶端側(cè)輸入字符,可以看到服務器收到字符串參考代碼:課本156頁-160頁實驗結果:Client:#include<Winsock2.h>#include<stdio.h>/服務器端

3、口號為5050#defineDEFAULT_PORT5050#defineDATA_BUFFER1024voidmain(intargc,char*argv)WSADATAwsaData;SOCKETsClient;intiPort=DEFAULT_PORT;/從服務器端接收的數(shù)據(jù)長度intiLen;/接收數(shù)據(jù)的緩沖charbufDATA_BUFFER;/服務器端地址structsockaddr_inser;/判斷輸入的參數(shù)是否正確if(argc<2)/提示在命令行中輸入服務器IP地址printf("Usage:clientserverIPaddressn");ret

4、urn;/接收數(shù)據(jù)的緩沖區(qū)初始化memset(buf,0,sizeof(buf);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf("FailedtoloadWinsock.n");return;/填寫要連接的服務器地址信息ser.sin_family=AF_INET;ser.sin_port=htons(iPort);/inet_addr()函數(shù)將命令行的點分IP地址轉(zhuǎn)換為用二進制表示的網(wǎng)絡字節(jié)順序的IP地址ser.sin_addr.s_addr=inet_addr(argv1);/建立客戶端流式套接口sClient=

5、socket(AF_INET,SOCK_STREAM,0);if(sClient=INVALID_SOCKET)printf("socket()Failed:%dn",WSAGetLastError();return;/請求與服務器端建立TCP連接if(connect(sClient,(structsockaddr*)&ser,sizeof(ser)=INVALID_SOCKET)printf("connect()Failed:%dn",WSAGetLastError();return;else/從服務器端接收數(shù)據(jù)iLen=recv(sClien

6、t,buf,sizeof(buf),0);if(iLen=0)return;elseif(iLen=SOCKET_ERROR)printf("recv()Failed:%d",WSAGetLastError();return;printf("recv()datafromserver:%sn",buf);closesocket(sClient);WSACleanup();Server:#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#pragmament(li

7、b,"ws2_32.lib")/服務器使用的端口號為5050#defineDEFAULT_PORT5050voidmain()intiPort=DEFAULT_PORT;WSADATAwsaData;SOCKETsListen,sAccept;/客戶端地址長度intiLen;/發(fā)送的數(shù)據(jù)長度intiSend;/要發(fā)送給客戶端的信息charbuf="Iamaserver."/服務器和客戶端的IP地址structsockaddr_inser,cli;printf("n");printf("Serverwaitingn"

8、);printf("n");if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf("FailedtoloadWinsock.n");return;/創(chuàng)建服務器端套接口sListen=socket(AF_INET,SOCK_STREAM,0);if(sListen=INVALID_SOCKET)printf("socket()Failed:%dn",WSAGetLastError();return;/以下建立服務器端地址ser.sin_family=AF_INET;/htons()函數(shù)把

9、一個雙字節(jié)的主機直接順序的數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡直接順序的數(shù)ser.sin_port=htons(iPort);/htonl()函數(shù)把一個四字節(jié)的主機直接順序的數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡直接順序的數(shù)/使用系統(tǒng)制定的IP地址INADDR_ANYser.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)printf("bind()Failed:%dn",WSAGetLastError();return;/進入監(jiān)聽狀態(tài)if(listen(sListen,5)=

10、SOCKET_ERROR)printf("listen()Failed:%dn",WSAGetLastError();return;/初始化客戶端地址長度參數(shù)iLen=sizeof(cli);/進入一個無限循環(huán),等待客戶的連接請求while(1)sAccept=accept(sListen,(structsockaddr*)&cli,&iLen);if(sAccept=INVALID_SOCKET)printf("accept()Failed:%dn",WSAGetLastError();break;/輸出客戶IP地址和端口號printf

11、("AcceptedclientIP:%s,port:%dn",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port);/給建立連接的客戶發(fā)送信息iSend=send(sAccept,buf,sizeof(buf),0);if(iSend=SOCKET_ERROR)printf("send()Failed:%dn",WSAGetLastError();break;elseif(iSend=0)break;elseprintf("send()byte:%dn",iSend);n");printf

12、("closesocket(sAccept);closesocket(sListen);WSACleanup();實驗截圖:實驗二基于TCP協(xié)議的客戶/服務器通信程序?qū)嶒災康模和ㄟ^實驗,使學生熟悉并掌握運用TCP/IP技術進行網(wǎng)絡編程的基本知識,加深對課堂教學內(nèi)容的理解,掌握套接字網(wǎng)絡通信編程技術,能夠運用VC+為開發(fā)工具編程解決網(wǎng)絡通信中的實際問題,進行一些簡單的網(wǎng)絡應用程序設計。實驗內(nèi)容:1,主機間TCP的性能測試之一:回程時延。2,服務器端能從客戶端接收數(shù)據(jù)并立即將接收到的數(shù)據(jù)原樣返回給客戶方。3,客戶端能往服務器端發(fā)送數(shù)據(jù),然后立即接受從服務器端原樣返回的數(shù)據(jù)。理解TCP通信

13、程序設計過程,并結合特定應用場景(如創(chuàng)建留言板程序、創(chuàng)建多客戶端服務器/客戶通信程序等)完成程序開發(fā)。掌握TCP服務器程序和客戶程序的創(chuàng)建過程,熟悉單播通信程序中用到的Winsock接口,培養(yǎng)學生將所學知識進行靈活運用的能力。實驗步驟:1,打開VC環(huán)境2,使用向?qū)榭蛻舳藙?chuàng)建工程:選擇可執(zhí)行程序,選擇使用wsa環(huán)境,單文檔環(huán)境,其他的選擇默認設置3,在文件中添加代碼4,編譯調(diào)試5,使用向?qū)榉掌鞫藙?chuàng)建工程:選擇可執(zhí)行程序,選擇使用wsa環(huán)境,單文檔環(huán)境,其他的選擇默認設置6,在文件中添加代碼7,編譯調(diào)試8,分別打開兩個系統(tǒng)命令窗口中,并分別在其中運行客戶端和服務器端程序。9,在客戶端著輸入字

14、符,可以看到服務器收到字符串注:可以再實驗一的代碼上修改,自己增加額外的功能,比如取系統(tǒng)時間,計算往返時間等作完之后,修改通信代碼使用UDP來實現(xiàn)網(wǎng)絡通信實驗結果:Client:#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#defineDEFAULT_PORT5050#defineDATA_BUFFER1024#pragmament(lib,"WS2_32.lib")voidmain(intargc,char*argv)WSADATAwsaData;SOCKETsClien

15、t;intiPort=5050;intiLen;intisend,iRecv;charsend_buf="Hello!Iamaclient"charrecv_bufDATA_BUFFER;structsockaddr_inser;if(argc<2)printf("輸入服務器的IP地址:n");return;elsememset(recv_buf,0,sizeof(recv_buf);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf("Winsock環(huán)境初始化失敗:n");r

16、eturn;sClient=socket(AF_INET,SOCK_DGRAM,0);if(sClient=INVALID_SOCKET)printf("socket()函數(shù)調(diào)用失敗:dn",WSAGetLastError();return;ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=inet_addr(argv1);iLen=sizeof(ser);isend=sendto(sClient,send_buf,sizeof(send_buf),0,(structsockaddr*)

17、&ser,iLen);if(isend=SOCKET_ERROR)printf("sendto()函數(shù)調(diào)用失敗:dn",WSAGetLastError();return;elseif(isend=0)return;elseprintf("sendto()調(diào)用成功:n");iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(structsockaddr*)&ser,&iLen);if(iRecv=SOCKET_ERROR)printf("recvfrom()函數(shù)調(diào)用失敗:

18、%dn",WSAGetLastError();return;elseif(iRecv=0)return;elseprintf("sendto():%sn",recv_buf);printf("n");closesocket(sClient);WSACleanup();Server:#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#defineDEFAULT_PORT5050#defineBUFFER_LENGTH1024#pragmament(li

19、b,"WS2_32.lib")voidmain()intiPort=DEFAULT_PORT;WSADATAwsaData;SOCKETsSocket;intiLen,iRecv,iSend;structsockaddr_inser,cli;charsend_buf="Hollo!Iamaserver"charrecv_bufBUFFER_LENGTH;printf("");printf("Serverwaiting");printf("");if(WSAStartup(MAKEWORD(2,2

20、),&wsaData)!=0)printf("環(huán)境初始化錯誤:n");return;sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf("socket()函數(shù)調(diào)用失敗:n",WSAGetLastError();return;ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sSocket,(LPSOCKADDR)&

21、ser,sizeof(ser)=SOCKET_ERROR)printf("bind()函數(shù)調(diào)用失敗:n",WSAGetLastError();return;iLen=sizeof(cli);memset(recv_buf,0,sizeof(recv_buf);while(1)iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen);if(iRecv=SOCKET_ERROR)printf("recvfrom()函數(shù)調(diào)用失敗:n",WSAGetLastErr

22、or();break;elseif(iRecv=0)break;elseprintf("recvfrom():%dn",recv_buf);printf("客戶端的IP地址、端口號:%dn",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port);iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli);if(iSend=SOCKET_ERROR)printf("sendto()函數(shù)調(diào)用失敗:n",W

23、SAGetLastError();break;elseif(iSend=0)break;elseprintf("sendto()調(diào)用成功!n");closesocket(sSocket);WSACleanup();實驗截圖:SB百E星斤>C":Wndowt32',>cmd»+-nicpocoFtUindoua1然'車版權所TrMirriJKuf4CDTpaHtinn«.:旱田所有權利.C"71元月產(chǎn)株3/11in4靠上r"小七tirE/缶"下;載卜取金二51iRntudisxDiithJ

24、iigiSr;inntmdp.t?K«:195?.16H186.1調(diào)用成功ciendtoC-HoHotIanaEei*Uel*ES苣鋰0:CAWirjjjowsggj色旦3tt*nde、e_-E:&雷下曳實驗二se(verudp史地典盟£HierosoftMIndues1版本6.1,76013版權所有S)2009PicvvQvftCovporationft保留所有權利."一"-fv事i*YKi1七in挈客戶端的U地址:端口號:71日麗?serdto<?:調(diào)用成功!實驗三簡易聊天系統(tǒng)的實現(xiàn)實驗目的:通過實驗,使學生熟悉并掌握運用TCP/IP技

25、術進行網(wǎng)絡編程的基本知識,加深對課堂教學內(nèi)容的理解,掌握套接字網(wǎng)絡通信編程技術,能夠運用VC+為開發(fā)工具編程解決網(wǎng)絡通信中的實際問題,進行一些簡單的網(wǎng)絡應用程序設計。實驗內(nèi)容:設計實現(xiàn)包括客戶端和服務器端的簡單聊天系統(tǒng)。通過編寫簡單的聊天程序,理解MFC的Socket類同SocketAPI之間的區(qū)別以及MFC的兩種類之間的聯(lián)系與區(qū)別。實驗步驟:1,打開VC環(huán)境2,使用向?qū)榭蛻舳藙?chuàng)建工程:選擇FMC可執(zhí)行程序,選擇使用wsa環(huán)境,選擇單文檔環(huán)境,其他的選擇默認設置3,為對話窗添加控件:右擊工具欄選擇控件,拖拽某個控件到對話框4,為控件添加變量:使用類向?qū)Вx擇要操作的對話窗類,選擇變量Tab,

26、點擊添加變量按鈕,為變量命名并選擇變量類型。5,為控件添加代碼:右擊控件添加事件,如點擊,雙擊,右擊。為事件添加代碼,根據(jù)教科書添加代碼6,添加新的對話窗:單機rousourceTab,在對話窗出右擊,選擇添加對話窗,7,為對話窗添加類:右鍵點擊新對話窗,選擇添加類,出現(xiàn)向?qū)В瑸轭惷⑦x擇父類8,為心對話窗添加控件和變量9,為新對話窗添加代碼10,編譯調(diào)試參考代碼:課本224頁-229頁實驗結果:CsockClient:#include"stdafx.h"#include"CSockClient.h"#include"CSockClientD

27、lg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CCSockClientAppBEGIN_MESSAGE_MAP(CCSockClientApp,CWinApp)/AFX_MSG_MAP(CCSockClientApp)/NOTE-theClassWizardwilladdandremovemappingmacroshere./DONOTEDITwhatyouseeintheseblocksofgeneratedcode!/AFX_MSGON_MAND(ID_HE

28、LP,CWinApp:OnHelp)END_MESSAGE_MAP()/CCSockClientAppconstructionCCSockClientApp:CCSockClientApp()/TODO:addconstructioncodehere,/PlaceallsignificantinitializationinInitInstance/TheoneandonlyCCSockClientAppobjectCCSockClientApptheApp;/CCSockClientAppinitializationBOOLCCSockClientApp:InitInstance()if(!A

29、fxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);returnFALSE;AfxEnableControlContainer();/Standardinitialization/Ifyouarenotusingthesefeaturesandwishtoreducethesize/ofyourfinalexecutable,youshouldremovefromthefollowing/thespecificinitializationroutinesyoudonotneed.#ifdefAFXDLLEnable3dControls();

30、#else/CallthiswhenusingMFCinasharedDLLEnable3dControlsStatic();/CallthiswhenlinkingtoMFCstatically#endifCCSockClientDlgdlg;m_pMainWnd=&dlg;intnResponse=dlg.DoModal();if(nResponse=IDOK)/TODO:Placecodeheretohandlewhenthedialogis/dismissedwithOKelseif(nResponse=IDCANCEL)/TODO:Placecodeheretohandlew

31、henthedialogis/dismissedwithCancel/Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe/application,ratherthanstarttheapplication'smessagepump.returnFALSE;CsockServer:#include"stdafx.h"#include"CsockServer.h"#include"CsockServerDlg.h"#ifdef_DEBUG#definenewDEBUG_NE

32、W#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CCsockServerAppBEGIN_MESSAGE_MAP(CCsockServerApp,CWinApp)/AFX_MSG_MAP(CCsockServerApp)/NOTE-theClassWizardwilladdandremovemappingmacroshere./DONOTEDITwhatyouseeintheseblocksofgeneratedcode!/AFX_MSGON_MAND(ID_HELP,CWinApp:OnHelp)END_MESSAGE_MAP()/CCso

33、ckServerAppconstructionCCsockServerApp:CCsockServerApp()/TODO:addconstructioncodehere,/PlaceallsignificantinitializationinInitInstance/TheoneandonlyCCsockServerAppobjectCCsockServerApptheApp;/CCsockServerAppinitializationBOOLCCsockServerApp:InitInstance()if(!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_

34、INIT_FAILED);returnFALSE;AfxEnableControlContainer();/Standardinitialization/Ifyouarenotusingthesefeaturesandwishtoreducethesize/ofyourfinalexecutable,youshouldremovefromthefollowing/thespecificinitializationroutinesyoudonotneed.#ifdef_AFXDLLEnable3dControls();/CallthiswhenusingMFCinasharedDLL#elseE

35、nable3dControlsStatic();/CallthiswhenlinkingtoMFCstatically#endifCCsockServerDlgdlg;m_pMainWnd=&dlg;intnResponse=dlg.DoModal();if(nResponse=IDOK)/TODO:Placecodeheretohandlewhenthedialogis/dismissedwithOKelseif(nResponse=IDCANCEL)/TODO:Placecodeheretohandlewhenthedialogis/dismissedwithCancel/Sinc

36、ethedialoghasbeenclosed,returnFALSEsothatweexitthe/application,ratherthanstarttheapplication'smessagepump.returnFALSE;實驗截圖:實驗四WinInet實現(xiàn)FTP客戶端實驗目的:通過實驗,使學生熟悉并掌握運用TCP/IP技術進行網(wǎng)絡編程的基本知識,加深對課堂教學內(nèi)容的理解,掌握套接字網(wǎng)絡通信編程技術,能夠運用VC+為開發(fā)工具編程解決網(wǎng)絡通信中的實際問題,進行一些簡單的網(wǎng)絡應用程序設計。實驗內(nèi)容:1,寫出完整的軟件需求說明書。2,開發(fā)FTP的客戶端。3,完成在局域網(wǎng)內(nèi)的測試,

37、并記錄測試結果。本實驗涵蓋了C/S體系結構和Socket編程。通過本實驗深入地了解FTP的工作原理以及服務器端和客戶端的工作流程,學習Socket在網(wǎng)絡編程中的各種應用,掌握WinInet的套接字編程。實驗步驟:1,打開VC環(huán)境2,使用向?qū)榭蛻舳藙?chuàng)建工程:選擇MFC可執(zhí)行程序,單文檔環(huán)境,其他的選擇默認設置3,為對話窗添加控件:右擊工具欄選擇控件,拖拽某個控件到對話框4,為控件添加變量:使用類向?qū)Вx擇要操作的對話窗類,選擇變量Tab,點擊添加變量按鈕,為變量命名并選擇變量類型。5,為控件添加代碼:右擊控件添加事件,如點擊,雙擊,右擊。為事件添加代碼,根據(jù)教科書添加代碼6,編譯調(diào)試實驗結果:Scan:#include"stdafx.h"#include"scan.h"#include"scanDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CScanAppBEGIN_MESSAGE_MAP(CScanApp,CWinApp)/AFX_MSG_MAP(CScanApp)/NOTE-theClassWi

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論