




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機網絡原理實驗指導書網絡1201-1202(14-15(2)實驗項目要求序號項目名稱完成要求實驗報告要求備注1認識網絡體系結構必做書寫報告并提交驗證2以太網幀結構分析課后必做不做要求3IP協議分析必做書寫報告并提交4路由與路由協議必做書寫報告并提交綜合5TCP通信分析選作不做要求驗證6DNS域名解析分析課后必做不做要求7HTTP通信分析選作不做要求驗證8Socket API編程課后必做不做要求9CGI編程課后必做不做要求10網絡命令工具使用選作不做要求11組建簡單以太網必做書寫報告并提交12Web服務配置必做書寫報告并提交實驗項目表序號項目名稱主要內容要點適用專業1認識網絡體系結構了解網絡
2、設備組件與網絡功能層次的對應關系;網絡物理結構分布與網絡邏輯拓撲的對應關系協議的報文分組封裝和分層在包結構中的表示網絡、其它2以太網幀結構分析捕獲以太網幀,以進行結構分析網絡3IP協議分析捕獲IP分組報文,以進行報文結構分析網絡4路由與路由協議查看路由器的路由表,觀察數據包在路由器中的轉發過程。分析某種路由協議(如RIP)的路由交換過程。網絡5TCP通信分析捕獲TCP通信過程的報文,分析TCP包結構和TCP通信原理。網絡6DNS域名解析分析使用dig軟件,驗證DNS的域名解析過程。網絡7HTTP通信分析使用Telnet,手工進行HTTP通信驗證,分析HTTP報文結構。網絡8Socket API
3、編程通過調用Socket API,編程實現基于UDP或TCP的網絡通信。網絡、其它9CGI編程基于C語言實現Web的CGI編程,表單交互,理解Get和post方法的差異。網絡10網絡命令工具使用熟練使用廠家的網絡工具,檢測網絡狀況。網絡、其它11組建簡單以太網將計算機、交換機等構建為局域網,包括網線制作、IP配置等,實現計算機間的連通。其它12Web服務配置安裝配置好Web服務,制作簡單網頁,發布到Web服務器中,實現對其訪問。其它有關軟件介紹說明軟件名有關網址用途Wireshark/網絡數據包捕獲和分析Ping系統自帶telnet系統自帶trac
4、eroute/tracert系統自帶Cisco Packet TracerCisco提供的網絡仿真工具wget/curl獲取Web URL資源的命令行工具Internet ExplorerWeb瀏覽器digDNS測試檢查工具IISWeb服務器軟件ApacheWeb服務器軟件vIsio繪圖工具VC+C/C+編程軟件實驗1 認識網絡體系結構實驗類型、性質與學時驗證、2學時。實驗目的要求與任務了解網絡體系結構的分層模型及其各層的內容和功能,查看各層對應的實體(物理硬件和/或軟件。了解計算機網絡的邏輯拓撲和物理拓撲;參觀實驗室的網絡布局,繪制其邏輯拓撲或給出實驗室網絡的邏輯拓撲,對應查找/查看物理網絡
5、結構組件。捕獲一個包好所有通信協議層的數據包,分析該數據包的層次結構;理解協議的報文分組的封裝和分層在包結構中的體現。實驗環境與器具一個完整的網絡環境,盡量包好盡可能多的網絡設備。使用Cisco Packet Tracer構建仿真的網絡或網絡拓撲繪制軟件(如visio)。數據包捕獲和分析軟件(Wireshark)。實驗原理或實驗方案在老師的指導下查看網絡各層對應的實體(如物理層下的傳輸介質雙絞線;物理層的網卡和驅動程序;網絡層、運輸層的TCP/IP配置;應用層的各個應用程序)。老師講解參觀機房網絡,給出拓撲圖,學生使用繪圖軟件進行拓撲圖繪制或使用Cisco Packet Tracer構建仿真的
6、網絡。使用Wireshark軟件捕獲網絡通信流量,分析數據包結構(具體參見“附錄A”文檔)。實驗方法與步驟老師說明,學生查看有關網絡實體;老師講解網絡拓撲,學生參觀,繪制網絡拓撲圖。老師指導學生捕獲數據包,分析數據包,記錄下捕獲的數據包的有關信息。進一步思考提高如何查看網絡體系結構中各層實體發送出或接收到的數據包(流);網絡拓撲的結構有那些,當前局域網的基本拓撲是什么,校園企業網有是什么拓撲。實驗數據處理及其結論分析給出網絡體系結構中各層實體的名稱和主要功能;繪制出的拓撲圖;記錄的有關數據包信息。實驗2 以太網幀分析實驗類型、性質與學時驗證、必做、2學時。實驗目的要求與任務理解以太網幀結構細節
7、。實驗環境與器具一個完整的連接到Internet的網絡環境;數據包捕獲和分析軟件(Wireshark);手動控制獲取Web URL資源的命令行工具wget/curl;路由跟蹤命令:traceroute/tracert。實驗原理或實驗方案使用Wireshark軟件捕獲網絡通信流量,分析數據包結構。實驗方法與步驟老師指導學生捕獲數據包,分析數據包,記錄下捕獲的數據包的有關信息。具體參見“附錄B”文檔。實驗數據處理及其結論分析記錄的有關數據包信息。實驗3 IP協議分析實驗類型、性質與學時驗證、2學時。實驗目的要求與任務了解IP(互聯網協議)的細節。實驗環境與器具一個完整的連接到Internet的網絡
8、環境;數據包捕獲和分析軟件(Wireshark);手動控制獲取Web URL資源的命令行工具wget/curl;路由跟蹤命令:traceroute/tracert。實驗原理或實驗方案使用Wireshark軟件捕獲網絡通信流量,分析數據包結構。實驗方法與步驟老師指導學生捕獲數據包,分析數據包,記錄下捕獲的數據包的有關信息。具體參見“附錄C”文檔。實驗數據處理及其結論分析記錄的有關數據包信息。實驗4 路由與路由協議實驗類型、性質與學時驗證、2學時。實驗目的要求與任務查看路由器的路由表并做記錄,觀察路由器如何依據路由表來進行IP報文的轉發;分析某種路由協議(如RIP)的路由交換過程,理解其構建網絡路
9、由表的過程。實驗環境與器具網絡仿真工具Cisco Packet Tracer;實驗原理或實驗方案由于要觀察多個路由器之間的路由交換信息,構建具體的物理網絡進行實驗,一方面較復雜,另一方面,觀察通信過程也不方便,故本實驗使用Cisco Packet Tracer仿真軟件來進行,可以很好的完成本次實驗。概念界定:路由轉發指路由器依據路由表(轉發表),將從一個接口收到的報文從另外的接口發送出去。路由交換指路由器之間相互發送消息,構建路由表的過程。通過使用Cisco Packet Tracer構建仿真網絡,將其切換到仿真模式,觀察網絡通信的包轉發/交換過程和包中的數據內容。通過ping命令發送消息數據
10、包,觀察數據包在路由器內的轉發(通過那個接口發送出去),通過查看路由器中的路由表,說明轉發的依據;將仿真網絡配置為動態路由協議(如RIP),依據使用的動態路由協議,設置捕獲的數據包類型(如RIP)。清空路由表,觀察各個捕獲的路由交換報文及內容以及根據路由表的變化,說明路由交換的過程。實驗方法與步驟1)使用Cisco Packet Tracer構建網絡構建如下的網絡拓撲圖(文件CNLab_Route.pkt)IP配置表設備/接口名IP掩碼網關備注2)配置路由表(采用靜態路由)路由器目的網絡/下一條備注R1R2R33)觀察路由轉發過程注:查看路由表信息命令:route1#show ip route
11、IP報文(發送IP/接收IP) 路由器的接收端口 路由器的送出端口說明4)配置動態路由協議(RIP)清空路由器的靜態路由。配置各個路由器的Rip路由。5)觀察路由交換過程發送/接收的路由報文路由交換報文內容路由表的影響備注進一步思考提高在操作系統中使用Route命令,觀察其路由表的輸出“route print”,說明本機路由表的各個路由條目的含義實驗5 TCP通信分析實驗類型、性質與學時驗證、2學時。實驗目的要求與任務理解TCP協議通信過程實驗環境與器具一個完整的連接到Internet的網絡環境;數據包捕獲和分析軟件(Wireshark);手動控制獲取Web URL資源的命令行工具wget/c
12、url;任意的Web瀏覽器,如Internet Explorer。實驗原理或實驗方案使用Wireshark軟件捕獲網絡通信流量,分析數據包結構。實驗方法與步驟老師指導學生捕獲數據包,分析數據包,記錄下捕獲的數據包的有關信息。具體參見“附錄D”文檔。實驗數據處理及其結論分析記錄的有關數據包信息。實驗6 DNS域名解析分析實驗類型、性質與學時驗證、2學時。實驗目的要求與任務了解DNS域名解析的詳細過程。實驗環境與器具一個完整的連接到Internet的網絡環境;數據包捕獲和分析軟件(Wireshark);任意的Web瀏覽器,如Internet Explorer;DNS測試檢查工具dig。實驗原理或實
13、驗方案使用Wireshark軟件捕獲網絡通信流量,分析數據包結構。實驗方法與步驟老師指導學生捕獲數據包,分析數據包,記錄下捕獲的數據包的有關信息。具體參見“附錄E”文檔。實驗數據處理及其結論分析記錄的有關數據包信息。實驗6附錄:Dig的使用教程常用的DNS的命令行診斷工具是DIG和NSLOOKUP,DIG比NSLOOKUP功能強大。DIG(Domain Information Groper)原本是Linux平臺上BIND服務器診斷的工具,現在已經有了windows的版本。下面使用dig工具在windows環境下來做一些DNS的診斷測試。1、安裝DIG程序運行安裝程序中的BINDInstall.
14、exe,如下圖:運行完成后,會彈出一個對話框,告訴我們安裝已完成。如下圖:程序默認將關鍵文件安裝到C:WINDOWSsystem32dns下的BIN文件夾下,如下圖:紅框的文件就是DIG程序。至此,程序安裝完成。2、設置DIG運行環境待安裝完成后,我們需要將上述安裝目錄添加到環境變量中,以方便在命令行中直接運行dig命令,而無需使用絕對路徑。具體步驟如下:打開系統屬性,并找到高級選項卡。如下圖:我們需要把DIG的路徑添加到系統變量中,如下圖:添加完成后,在命令行里測試一下。如下圖:出現上圖提示就表明DIG程序安裝成功,下面對輸出內容做簡要介紹,如下圖:當不添加任何參數,直接使用dig命令時,默
15、認會解析根服務器,并附加解析對應的A記錄。如果想解析一個域名,則之需要在dig后面添加域名地址即可。3 dig使用介紹以為例,如下圖:上圖是利用dig命令查詢的A記錄,但這樣的結果過于簡單,并沒有體現整個解析過程,此時我們可以借助+trace這個參數,來獲得過多的信息。如下圖:上圖是利用dig命令解析的A記錄的整個過程,我們可以清晰的看到首先是查找根DNS服務器,然后其中的K.root-根服務器告訴DNS負責.com域名的13臺頂級域名服務器,接著由其中的a.gtld-頂級域名服務器告訴DNS負責的2臺NS服務器分別是和,最后DNS繼續查詢負責解析www這臺主機的NS服務器,結尾一行表明是由N
16、S3這臺NS服務器負責解析這個地址的A記錄,只是這個A記錄做了別名記錄,并未直接顯示出來而已。但我們可以繼續利用dig命令查這個CNAME記錄所對應的A記錄。如下圖:上兩幅圖掩飾了地址完整的解析過程。我們可以把這個過程以圖表的形式體現出來,也就是整個解析路徑,如下圖:從這張圖大家應該大致了解整個解析的過程和步驟。這2個命令僅僅是DIG工具極小的一部分,下面我們將繼續介紹我們可以利用DIG命令很輕松的查詢某一域名的A、MX等記錄。如下圖:以為例,查詢對應的A記錄:同樣的,如果想查詢對應的MX記錄,之需要將a改為mx即可。如下圖:最后的A記錄是附加的信息,為了簡化輸出結果,我們可以將這部分內容過濾
17、掉。之需要配合適當參數即可。如下圖:同理,我們可以查詢PTR記錄、SOA記錄等等,這里不再演示。這節僅僅是拋磚引玉,還有很多精彩的DIG應用未被列出,大家可以使用dig -help 命令查詢DIG更多的參數,由于本系列并非以DIG為主,所以這里就不再熬述其他內容,請見諒。實驗7 HTTP通信分析實驗類型、性質與學時驗證、必做、2學時。實驗目的要求與任務分析驗證HTTP協議的通信過程。實驗環境與器具一個完整的連接到Internet的網絡環境;數據包捕獲和分析軟件(Wireshark);Telnet工具;任意的Web瀏覽器,如Internet Explorer。實驗原理或實驗方案教材關于萬維網中瀏
18、覽器與Web服務器的通信過程的HTTP協議內容。實驗方法與步驟具體參見“附錄F”文檔。實驗數據處理及其結論分析在每個驗證過程中,至少對五項服務器應答的信息進行分析。并提供分析的依據。進一步思考提高通過學習Socket API編程,通過程序來驗證HTTP協議,實現Web URL的獲取。編寫一個程序,與Web服務器建立TCP連接,然后發送HTTP請求報文,獲取Web服務的響應報文。#include #include #pragma comment(lib,wsock32)void main()WSADATA wsaData;WSAStartup(0x0101,&wsaData);/裝載動態連接庫W
19、inSock DLLstruct sockaddr_in SA;char SName256,SIP16,FilePath81=/;int SPort=80;struct hostent *h;int r=0;char ReqMSG256;/HTTP請求的報文char recvBuf1000000;/和服務器端進行通信(send/recv)char input80=0;doSOCKET WebSocket=socket(AF_INET,SOCK_STREAM,0);/創建套接字(socket)puts(Web Server Domain Name or IP:); gets(SName);put
20、s(Web Server Port(80):); scanf(%d,&SPort);getchar();puts(File Name and Path(/):); gets(FilePath);/h = gethostbyname(SName);/獲得對應于給定主機名(例)的主機信息(IP地址.)strcpy(SIP,inet_ntoa(*(struct in_addr *)h-h_addr);/得到IP地址SA.sin_addr.s_addr =inet_addr(SIP);/服務器IP地址SA.sin_family=AF_INET; /服務器地址類型SA.sin_port = htons(
21、SPort); /服務器端口。r = connect(WebSocket, (struct sockaddr far *)&SA, sizeof(SA);/向服務器發出連接請求(connect)if(r!=0)puts(connect error!);closesocket(WebSocket);break;/memset(ReqMSG,0,sizeof(ReqMSG);strcat(ReqMSG,GET );strcat(ReqMSG,FilePath);strcat(ReqMSG, HTTP/1.1xdxa);strcat(ReqMSG,Accept: */*);/首部行strcat(Re
22、qMSG,xdxa); /回車換行strcat(ReqMSG,Host: );/首部行strcat(ReqMSG,SName);/首部行strcat(ReqMSG,xdxa);/回車換行strcat(ReqMSG,Connection: Close); /首部行strcat(ReqMSG,xdxa);/回車換行strcat(ReqMSG,xdxa);/回車換行printf(Request message:n%snn,ReqMSG);r=send(WebSocket,ReqMSG,strlen(ReqMSG),0);if(r = SOCKET_ERROR)puts(send error!);cl
23、osesocket(WebSocket);break;/memset(recvBuf,0,sizeof(recvBuf);r=recv(WebSocket,recvBuf,sizeof(recvBuf),0);/讀接收緩沖區recvBufr=0; printf(Server response:n%snn,recvBuf);/closesocket(WebSocket);/關閉套接字puts(Continue? YES or NO(NO):); gets(input);while(!strcmp(input,YES);WSACleanup();/必須調用這個函數清除參數附錄:通過telnet手動
24、獲取HTTP URL過程使用Telnet與Web服務的80端口連接,然后輸入HTTP請求報文發送Web服務,查看Web服務的響應報文,并與通過瀏覽器獲得對應的URL資源進行比較。telnet 80HEAD /index.html HTTP/1.1host: (返回數據略)GET /index.html HTTP/1.1host: (返回數據略)telnet 80HEAD /default.htm HTTP/1.1host: (返回數據略)GET /default.htm HTTP/1.1host: (返回數據略)實驗8 Socket API編程實驗類型、性質與學時驗證、必做、2學時。實驗目的要
25、求與任務了解和掌握基于UDP無面向連接的應用程序的運行機制和編程方法;了解和掌握基于TCP面向連接的應用程序的運行機制和編程方法;實驗環境與器具Windows OS,TCP/IP協議 ,Visual C+ 6.0。實驗原理或實驗方案參考計算機網絡主要是數字信息的傳送,開發網絡程序,也就是信息的傳送與接收。這猶如單機程序的輸入輸出是標準的輸入輸出或文件輸入輸出改成了向網絡上(遠地的計算機)進行輸入輸出。所以網絡程序設計不難,知道如何向網絡上的計算機輸入輸出信息就行了。程序設計的關鍵仍然是得到的數據如何設計出有效的算法進行處理。網絡編程包括三個層次模型:1)核心協議開發計算機通信系統中的核心協議開
26、發,這些在操作系統和路由器中實現,是計算機網絡的核心基礎。一般人很少涉及。2)基于Socket API的C/S編程基于通信服務,開發新的應用服務應用層程序開發(C/S系統)在應用層下面,是傳輸層。TCP/IP模型中,傳輸層提供了可靠的面向連接的服務TCP和不可靠的用戶數據報服務UDP。如何使用這兩種服務,為我們提供通信,TCP/IP模型沒有相應的標準。各實現的平臺提供了自己獨特的應用編程接口API:(1)加利福尼亞大學伯克利分校為Berkeley UNIX 操作系統定義了socket interface;(2)微軟的Windows操作系統采用并擴展了socket接口,形成了Windows so
27、cket;(3)AT&T為UNIX系統V定義了TLI(Transport Layer Interface)。3)基于Web的B/S編程基于某種應用模型,開發增值服務如基于WWW服務的B/S系統;使用CGI、WinCGI、Perl、PHP、ASP.Net、J2EE 進行Web編程2 WinSock模型介紹Windows平臺Socket程序開發模型如圖所示。實驗方法與步驟1 基于UDP的數據包通信1.1 基于UDP通信的流程圖1.2簡單的UDP通信示例簡單的UDP通信示例UDP接受端(服務器)UDP發送端(客戶機)/ UDP (TCP/IP) for the console application
28、./VC6.0 add WSOCK32.LIB in /Project-Settings.-Link#include #include #include /by user#include /by user#pragma comment(lib,wsock32)WORD RPort = 7777; /遠程端口RemotePortchar RIP16=; /遠程IP地址RemoteIPAddrWORD LPort = 6666; /本地端口LocalPortchar LIP16=; /本地IP地址LocalIPAddrSOCKET S; /套接口SOCKETst
29、ruct sockaddr_in rAddr; /遠程參數,remoteAddrstruct sockaddr_in lAddr; /本地參數,localAddrWSADATA WD; /WinSock DLL信息int r; /result; /-void ShowInfo(char *info) puts(info); exit(1); /-void SetSockAddr(struct sockaddr_in *A,WORD Port,char *IP)A-sin_family = AF_INET; /TCP/IP協議A-sin_port = htons(Port); /端口。A-sin
30、_addr.s_addr =inet_addr(IP); /IP網址。/-void main()WORD v; /wVersionRequested;/- - - Startup Win Socket - - - - - - - -v=0x0101; /0x0101 for v1.1, 0x0002 forv 2.0r = WSAStartup(v, (LPWSADATA)&WD);if(r != 0) ShowInfo(Start_Error);/- - - Create Win Socket - - - - - - - -S = socket(PF_INET, SOCK_DGRAM, 0)
31、;if(S = -1) ShowInfo(Socket_Create_Error);int l=sizeof(rAddr);char Msg80;puts(Type exit then Quit Program!);SetSockAddr(&lAddr, LPort, LIP);r = bind(S,(struct sockaddr far *)&lAddr, sizeof(lAddr);if(r = -1) ShowInfo(bind_Error);SetSockAddr(&rAddr, RPort, RIP);do/- - - Recieve Mess - - - - - -puts(Wa
32、iting Recieve.);r = recv(S, Msg, 80,0);/ r = recvfrom(SD,Msg,80,0,(struct sockaddr far *)&rAddr, &l);/ 發送套接口的主機地址信息存放在rAddr中if(r = -1) ShowInfo(Recieve_Error);Msgr=0; puts( Msg);puts(Recieve ok!);/- - - Send Mess - - - - - - - -puts(Send:); gets( Msg);if(!strcmp(Msg,exit) break;r = sendto(S,Msg,strl
33、en(Msg), 0,(struct sockaddr far *)&rAddr, l);if(r = -1) ShowInfo(Send_Error);while(1);closesocket(S);WSACleanup();return ;/-/ UDP (TCP/IP) for the console application./VC6.0 add WSOCK32.LIB in /Project-Settings.-Link#include #include #include /by user#include /by user #pragma comment(lib,wsock32)WOR
34、D RPort = 6666; /遠程端口RemotePortchar RIP16=;/遠程IP地址RemoteIPAddrWORD LPort = 7777; /本地端口LocalPortchar LIP16=; /本地IP地址LocalIPAddrSOCKET S; /套接口SOCKETstruct sockaddr_in rAddr; /遠程參數,remoteAddrstruct sockaddr_in lAddr; /本地參數,localAddrWSADATA WD; /WinSock DLL信息int r; /result;/-void ShowI
35、nfo(char *info) puts(info); exit(1); /-void SetSockAddr(struct sockaddr_in *A,WORD Port,char *IP)A-sin_family = AF_INET; /TCP/IP協議A-sin_port = htons(Port); /端口。A-sin_addr.s_addr =inet_addr(IP); /IP網址。/-void main()WORD v; /wVersionRequested;/- - - Startup Win Socket - - - - - - - -v=0x0101; /0x0101 f
36、or v1.1, 0x0002 forv 2.0r = WSAStartup(v, (LPWSADATA)&WD);if(r != 0) ShowInfo(Start_Error);/- - - Create Win Socket - - - - - - - -S = socket(PF_INET, SOCK_DGRAM, 0);if(S = -1) ShowInfo(Socket_Create_Error);int l=sizeof(rAddr);char Msg80;puts(Type exit then Quit Program!);SetSockAddr(&lAddr, LPort,
37、LIP);r = bind(S,(struct sockaddr far *)&lAddr, sizeof(lAddr);if(r = -1) ShowInfo(bind_Error);SetSockAddr(&rAddr, RPort, RIP);do/- - - Send Mess - - - - - - - -puts(Send:); gets( Msg);if(!strcmp(Msg,exit) break;r = sendto(S,Msg,strlen(Msg), 0,(struct sockaddr far *)&rAddr, l);if(r = -1) ShowInfo(Send
38、_Error);/- - Recieve Mess - - - - - - -puts(Send ok! Waiting Recieve.);r = recv(S, Msg, 80,0);/ r = recvfrom(SD,Msg,80,0,(struct sockaddr far *)&rAddr, &l);/ 發送套接口的主機地址信息存放在rAddr中if(r = -1) ShowInfo(Recieve_Error!);Msgr=0; puts( Msg);puts(Recieve ok!);while(1);closesocket(S);WSACleanup();return ;/-2
39、 基于TCP的可靠通信2.1基于TCP通信的流程圖2.2簡單的TCP通信示例簡單的TCP通信示例TCP 接受端(服務器)TCP發送端(客戶機)#include /加裁頭文件#include /加載標準輸入輸出頭文件#pragma comment(lib,wsock32)void main() WORD wVersionRequested;/版本號 WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );/1.1版本的套接字 err = WSAStartup( wVersionRequested, &wsaData ); if
40、 ( err != 0 ) return; /加載套接字庫,加裁失敗則返回 if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return; /如果不是1.1的則退出 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);/創建套接字(socket)。 SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/轉換Unsigned short為網絡字節序的格
41、式 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); /將套接字綁定到一個本地地址和端口上(bind) listen(sockSrv,5);/將套接字設為監聽模式,準備接收客戶請求(listen)。 SOCKADDR_IN addrClient;/定義地址族 int len=sizeof(SOCKADDR);/初始化這個參數,這個參數必須被初始化 while(1) SOCKET sockConn=accept(sockSrv,(S
42、OCKADDR*)&addrClient,&len);/accept的第三個參數一定要有初始值。 /等待客戶請求到來;當請求到來后,接受連接請求,返回一個新的對應于此次連接的套接字(accept)。 /此時程序在此發生阻塞 char sendBuf100; sprintf(sendBuf,Welcome %s., inet_ntoa(addrClient.sin_addr); /用返回的套接字和客戶端進行通信(send/recv)。 send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf100; recv(sockConn,recvBu
43、f,100,0); printf(%sn,recvBuf); closesocket(sockConn);/關閉套接字。等待另一個用戶請求 /while(1)#include #include #pragma comment(lib,wsock32)void main() WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData );/加載套接字庫 if ( err != 0 ) ret
44、urn; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return; SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);/創建套接字(socket)。 SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);connect
45、(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);/向服務器發出連接請求(connect)。 char recvBuf100;/和服務器端進行通信(send/recv)。 send(sockClient,This is lizin,strlen(This is lizi)+1,0); recv(sockClient,recvBuf,100,0); printf(%sn,recvBuf);send(sockClient,This is lizin,strlen(This is lizi)+1,0); closesocket(sockClient);
46、/關閉套接字。 WSACleanup();/必須調用這個函數清除參數進一步思考提高實現一個多線程的TCP服務器,可以同時面向多個用戶通信。1 工程建立1、使用vc6向導建立控制臺工程(console application),并選擇支持MFC。2、在stdafx.h中加入頭文件conio.h和winsock2.h。3、在頭文件中加入:#pragma comment(lib, ws2_32.lib)。2 主程序主要是啟動服務器線程并等待用戶退出的命令。int _tmain(int argc, TCHAR* argv, TCHAR* envp)int nRetCode = 0; cout Pres
47、s ESCAPE to terminate programrn;AfxBeginThread(ServerThread,0); /啟動一條線程while(_getch()!=27); /用戶按ESC鍵則退出return nRetCode;3 線程代碼一個簡單的tcp服務器,返回客戶的ip地址。UINT ServerThread(LPVOID pParam) cout Starting up TCP serverrn;/A SOCKET is simply a typedef for an unsigned int./In Unix, socket handles were just about
48、 same as file /handles which were again unsigned ints./Since this cannot be entirely true under Windows/a new data type called SOCKET was defined./定義一個socket句柄作為服務器SOCKET server;/WSADATA is a struct that is filled up by the call /to WSAStartup/這是一個結構體,用于調用函數WSAStartup時作為參數WSADATA wsaData;/The sockaddr_in specifies the address of the socket/for TCP/IP sockets. Other protocols use similar structures./存放ip地址的結構體sockaddr_in local;/WSAStartup initializes the program for calling WinSock./The first parameter specifies the highest version of the /WinSock specification, the program is
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理中自我提升的方法與途徑試題及答案
- 證券從業資格證資產利用效率評估試題及答案
- 港口物流操作流程優化考核試卷
- 環保通風設備技術創新與市場布局前景考核試卷
- 白酒市場的渠道管理與銷售策略考核試卷
- 電纜線路敷設過程中的應力控制考核試卷
- 2024項目管理考試實務問題試題及答案
- 西溝土地整治方案范本
- 證券分析模型的應用考試試題及答案
- 項目管理考試核心內容的詳細解讀試題及答案
- DB33T 809-2010 農村水電站運行管理技術規程
- 民航貴州監管局制員工招聘筆試真題2023
- 2022版義務教育(歷史)課程標準(附課標解讀)
- 天津市保溫裝飾板外墻外保溫系統技術規程
- 《 大學生軍事理論教程》全套教學課件
- CJT 526-2018 軟土固化劑 標準
- 品質提升計劃改善報告課件
- NB-T10208-2019陸上風電場工程施工安全技術規范
- 《跟上兔子》繪本五年級第1季A-Magic-Card
- 在線網課知慧《形勢與政策(吉林大學)》單元測試考核答案
- 三年級必讀書課外閱讀測試(附答案)
評論
0/150
提交評論