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

下載本文檔

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

文檔簡介

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

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

3、 DEFAULT_PORT 5050#define DATA_BUFFER 1024void main(int argc,char *argv)WSADATA wsaData;SOCKET sClient;int iPort=DEFAULT_PORT;/從服務器端接收的數(shù)據(jù)長度int iLen;/接收數(shù)據(jù)的緩沖char bufDATA_BUFFER;/服務器端地址struct sockaddr_in ser;/判斷輸入的參數(shù)是否正確if(argc2)/提示在命令行中輸入服務器IP地址printf(Usage:client server IP addressn);return;/接收數(shù)據(jù)的緩沖區(qū)

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

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

6、SOCKET_ERROR)printf(recv() Failed:%d,WSAGetLastError();return;printf(recv() data from server:%sn,buf);closesocket(sClient);WSACleanup();Server:#include#include#include#pragma comment(lib,ws2_32.lib)/服務器使用的端口號為5050#define DEFAULT_PORT 5050void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sList

7、en,sAccept;/客戶端地址長度int iLen;/發(fā)送的數(shù)據(jù)長度int iSend;/要發(fā)送給客戶端的信息char buf=I am a server.;/服務器和客戶端的IP地址struct sockaddr_in ser,cli;printf(-n);printf(Server waitingn);printf(-n);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(Failed to load Winsock.n);return;/創(chuàng)建服務器端套接口sListen=socket(AF_INET,SOCK_STREAM,0);if(s

8、Listen=INVALID_SOCKET)printf(socket() Failed:%dn,WSAGetLastError();return;/以下建立服務器端地址ser.sin_family=AF_INET;/htons()函數(shù)把一個雙字節(jié)的主機直接順序的數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡(luò)直接順序的數(shù)ser.sin_port=htons(iPort);/htonl()函數(shù)把一個四字節(jié)的主機直接順序的數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡(luò)直接順序的數(shù)/使用系統(tǒng)制定的IP地址INADDR_ANYser.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sListen,(LPSOCKADDR)&ser

9、,sizeof(ser)=SOCKET_ERROR)printf(bind() Failed: %dn,WSAGetLastError();return;/進入監(jiān)聽狀態(tài)if(listen(sListen,5)=SOCKET_ERROR)printf(listen() Failed:%dn,WSAGetLastError();return;/初始化客戶端地址長度參數(shù)iLen=sizeof(cli);/進入一個無限循環(huán),等待客戶的連接請求while(1)sAccept=accept(sListen,(struct sockaddr*)&cli,&iLen);if(sAccept=INVALID_S

10、OCKET)printf(accept() Failed: %dn,WSAGetLastError();break;/輸出客戶IP地址和端口號printf(Accepted client IP:%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;else if(iSend=0)break;el

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

12、能往服務器端發(fā)送數(shù)據(jù),然后立即接受從服務器端原樣返回的數(shù)據(jù)。 理解TCP通信程序設(shè)計過程,并結(jié)合特定應用場景(如創(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)境,其他的選擇默認設(shè)置3, 在文件中添加代碼4, 編譯調(diào)試5, 使用向?qū)榉掌鞫藙?chuàng)建工程:選擇可執(zhí)行程序,選擇使用wsa環(huán)境,單文檔環(huán)境,其他的選擇默認設(shè)置6, 在文件中添加代碼7, 編譯調(diào)試

13、8, 分別打開兩個系統(tǒng)命令窗口中,并分別在其中運行客戶端和服務器端程序。9, 在客戶端著輸入字符,可以看到服務器收到字符串注:可以再實驗一的代碼上修改,自己增加額外的功能,比如取系統(tǒng)時間,計算往返時間等作完之后,修改通信代碼使用UDP來實現(xiàn)網(wǎng)絡(luò)通信實驗結(jié)果:Client:#include#include#include#define DEFAULT_PORT 5050#define DATA_BUFFER 1024#pragma comment(lib,WS2_32.lib)void main(int argc,char* argv)WSADATA wsaData;SOCKET sClient

14、; int iPort=5050;int iLen;int isend,iRecv;char send_buf=Hello! I am a client;char recv_bufDATA_BUFFER;struct sockaddr_in ser;if(argc2) printf(輸入服務器的IP地址:n); return; elsememset(recv_buf,0,sizeof(recv_buf);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) printf(Winsock環(huán)境初始化失?。簄); return; sClient=socket(AF_IN

15、ET,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,(struct sockaddr*)&ser,iLen);if(isend=SOCKET_ERRO

16、R) printf(sendto()函數(shù)調(diào)用失敗:%dn,WSAGetLastError(); return;else if(isend=0)return;elseprintf(sendto()調(diào)用成功:n); iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen); if(iRecv=SOCKET_ERROR) printf(recvfrom()函數(shù)調(diào)用失?。?dn,WSAGetLastError(); return;else if(iRecv=0) return;elseprintf(

17、sendto():%sn,recv_buf); printf(-n);closesocket(sClient);WSACleanup();Server:#include#include#include#define DEFAULT_PORT 5050#define BUFFER_LENGTH 1024#pragma comment(lib,WS2_32.lib)void main()int iPort=DEFAULT_PORT;WSADATA wsaData; SOCKET sSocket;int iLen,iRecv,iSend;struct sockaddr_in ser,cli;char

18、 send_buf=Hollo!I am a server;char recv_bufBUFFER_LENGTH; printf(-); printf(Server waiting); printf(-);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(環(huán)境初始化錯誤:n);return; sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET) printf(socket()函數(shù)調(diào)用失?。簄,WSAGetLastError();return;ser.sin_family=AF

19、_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sSocket,(LPSOCKADDR)&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*)&c

20、li,&iLen); if(iRecv=SOCKET_ERROR) printf(recvfrom()函數(shù)調(diào)用失?。簄,WSAGetLastError();break; else if(iRecv=0) break; else printf(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(iSe

21、nd=SOCKET_ERROR) printf(sendto()函數(shù)調(diào)用失?。簄,WSAGetLastError();break; else if(iSend=0) break; else printf(sendto():調(diào)用成功!n); closesocket(sSocket);WSACleanup();實驗截圖:實驗三 簡易聊天系統(tǒng)的實現(xiàn)實驗目的:通過實驗,使學生熟悉并掌握運用TCP/IP技術(shù)進行網(wǎng)絡(luò)編程的基本知識,加深對課堂教學內(nèi)容的理解,掌握套接字網(wǎng)絡(luò)通信編程技術(shù),能夠運用VC+為開發(fā)工具編程解決網(wǎng)絡(luò)通信中的實際問題,進行一些簡單的網(wǎng)絡(luò)應用程序設(shè)計。實驗內(nèi)容:設(shè)計實現(xiàn)包括客戶端和服務器

22、端的簡單聊天系統(tǒng)。通過編寫簡單的聊天程序,理解MFC的Socket類同Socket API之間的區(qū)別以及MFC的兩種類之間的聯(lián)系與區(qū)別。實驗步驟:1, 打開VC環(huán)境2, 使用向?qū)榭蛻舳藙?chuàng)建工程:選擇FMC可執(zhí)行程序,選擇使用wsa環(huán)境,選擇單文檔環(huán)境,其他的選擇默認設(shè)置3, 為對話窗添加控件:右擊工具欄選擇控件,拖拽某個控件到對話框4, 為控件添加變量:使用類向?qū)?,選擇要操作的對話窗類,選擇變量Tab,點擊添加變量按鈕,為變量命名并選擇變量類型。5, 為控件添加代碼:右擊控件添加事件,如點擊,雙擊,右擊。為事件添加代碼,根據(jù)教科書添加代碼6, 添加新的對話窗:單機rousource Tab,

23、 在對話窗出右擊,選擇添加對話窗,7, 為對話窗添加類:右鍵點擊新對話窗,選擇添加類,出現(xiàn)向?qū)?,為類命名并選擇父類8, 為心對話窗添加控件和變量9, 為新對話窗添加代碼10, 編譯調(diào)試 參考代碼:課本224頁-229頁實驗結(jié)果:CsockClient:#include stdafx.h#include CSockClient.h#include CSockClientDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CCSockClientAppBEGIN_

24、MESSAGE_MAP(CCSockClientApp, CWinApp)/AFX_MSG_MAP(CCSockClientApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CCSockClientApp constructionCCSockClientApp:CC

25、SockClientApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CCSockClientApp objectCCSockClientApp theApp;/ CCSockClientApp initializationBOOL CCSockClientApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return

26、 FALSE;AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using

27、MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endifCCSockClientDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: Place code here to handle when the dialog is/ dismissed with OKelse if (nResponse = IDCANCEL)/ TODO: Place

28、 code here to handle when the dialog is/ dismissed with Cancel/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;CsockServer:#include stdafx.h#include CsockServer.h#include CsockServerDlg.h#ifdef _DEBUG#defi

29、ne new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CCsockServerAppBEGIN_MESSAGE_MAP(CCsockServerApp, CWinApp)/AFX_MSG_MAP(CCsockServerApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSGON_COMMA

30、ND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CCsockServerApp constructionCCsockServerApp:CCsockServerApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CCsockServerApp objectCCsockServerApp theApp;/ CCsockServerApp initializationBOOL CCs

31、ockServerApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific init

32、ialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endifCCsockServerDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: Place code her

33、e to handle when the dialog is/ dismissed with OKelse if (nResponse = IDCANCEL)/ TODO: Place code here to handle when the dialog is/ dismissed with Cancel/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;實驗

34、截圖:實驗四 WinInet實現(xiàn)FTP客戶端實驗目的:通過實驗,使學生熟悉并掌握運用TCP/IP技術(shù)進行網(wǎng)絡(luò)編程的基本知識,加深對課堂教學內(nèi)容的理解,掌握套接字網(wǎng)絡(luò)通信編程技術(shù),能夠運用VC+為開發(fā)工具編程解決網(wǎng)絡(luò)通信中的實際問題,進行一些簡單的網(wǎng)絡(luò)應用程序設(shè)計。實驗內(nèi)容:1,寫出完整的軟件需求說明書。2,開發(fā)FTP的客戶端。3,完成在局域網(wǎng)內(nèi)的測試,并記錄測試結(jié)果。本實驗涵蓋了C/S體系結(jié)構(gòu)和Socket編程。通過本實驗深入地了解FTP的工作原理以及服務器端和客戶端的工作流程,學習Socket在網(wǎng)絡(luò)編程中的各種應用,掌握WinInet的套接字編程。實驗步驟:1, 打開VC環(huán)境2, 使用向?qū)?/p>

35、客戶端創(chuàng)建工程:選擇MFC可執(zhí)行程序,單文檔環(huán)境,其他的選擇默認設(shè)置3, 為對話窗添加控件:右擊工具欄選擇控件,拖拽某個控件到對話框4, 為控件添加變量:使用類向?qū)?,選擇要操作的對話窗類,選擇變量Tab,點擊添加變量按鈕,為變量命名并選擇變量類型。5, 為控件添加代碼:右擊控件添加事件,如點擊,雙擊,右擊。為事件添加代碼,根據(jù)教科書添加代碼6, 編譯調(diào)試實驗結(jié)果:Scan:#include stdafx.h#include scan.h#include scanDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CScanAppBEGIN_MESSAGE_MAP(CScanApp, CWinApp)/AFX_MSG_MAP(CScanApp)/ NOTE - th

溫馨提示

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

評論

0/150

提交評論