版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機網絡課程設計報告課 程 計算機網絡課程設計 實驗名稱1 _ping程序設計_實驗名稱2 文件傳輸協(xié)議的簡單設計與實現(xiàn)_專業(yè)班級 姓 名 學 號 同組人姓名 _ 2008 年 12 月 28 日目錄一ping 1.實驗目的和要求 32.實驗環(huán)境 43.程序的實現(xiàn)方法和方案 53.1ping原理 53.2.設計方案 53.3設計流程圖 64. 程序源代碼 95.實驗數(shù)據、結果分析 126.思考題 127.心得體會 13二FTP1FTP實驗內容、目的 14 1.1流程圖 16 1.2服務端·. 17 1.3客戶端·232 實驗數(shù)據、結果分析··.293
2、思考題· 314 心得體會· . 32三 參考文獻.33廣東工業(yè)大學本科生課程設計任務書題目名稱PING程序設計學 院自動化專業(yè)班級姓 名學 號一、實驗目的和要求實驗目的: PING程序是我們使用的比較多的用于測試網絡連通性的程序。PING程序基于ICMP,使用ICMP的回送請求和回送應答來工作。由計算機網絡課程知道,ICMP是基于IP的一個協(xié)議,ICMP包通過IP的封裝之后傳遞。課程設計中選取PING程序的設計,其目的是希望同學們通過PING程序的設計,能初步掌握TCP/IP網絡協(xié)議的基本實現(xiàn)方法,對網絡的實現(xiàn)機制有進一步的認識。實驗內容和要求:1、RAW模式的SOCKE
3、T編程PING程序是面向用戶的應用程序,該程序使用ICMP的封裝機制,通過IP協(xié)議來工作。為了實現(xiàn)直接對IP和ICMP包進行操作,實驗中使用RAW模式的SOCKET編程。熟悉SOCKET的編程,包括基本的系統(tǒng)調用如SOCKET、BIND等;2、具體內容1. 定義數(shù)據結構需要定義好IP數(shù)據報、ICMP包等相關的數(shù)據結構;2. 程序實現(xiàn)在WINDOWS環(huán)境下實現(xiàn)PING程序;3. 程序要求在命令提示符下輸入: PING .其中為目的主機的IP地址,不要求支持域名,對是否帶有開關變量也不做要求。不帶開關變量時,要求返回4次響應。返回信息的格式: REPLY FROM .或 REQUEST TimeO
4、ut (無法PING通的情況)。二、實驗環(huán)境Pc機一臺(可以與其他機聯(lián)通或者可以上網)操作系統(tǒng)為windows xp軟件為vc6.0Windows 環(huán)境下三、實驗方法、步驟及結構測試實驗按下述步驟進行:1) 熟悉IP以及ICMP協(xié)議的工作機制2) 熟悉RAW模式的SOCKET編程3) 編寫PING的實現(xiàn)程序4) 編譯環(huán)境中需要包括SOCKET庫 WS2_32.lib5) 在模擬實現(xiàn)環(huán)境下調試并運行自己編寫的PING程序6) 保留你實現(xiàn)的程序在你的用戶目錄下,以備輔導教師檢查7) 最后提交源程序,撰寫實驗報告四、課程設計(論文)進程安排序號設計(論文)各階段內容地點起止日期1了解實驗內容,查找資
5、料 實驗室,圖書館12.222查找資料,了解各個函數(shù)的內容圖書館宿舍12.233調試,解決各段函數(shù)的錯誤,實現(xiàn)各項功能宿舍12.244小組交流,交換各自意見宿舍12.255答辯實驗室12.266完成設計報告,并加深對設計的了解宿舍12.27五、應收集的資料及主要參考文獻1程良倫,網絡工程概論,機械工業(yè)出版社,20072張越 等,Visual C+網絡程序設計實例詳解,人民郵電出版社,20063Andrew S Tanenbaum 著 潘愛民 譯 ,計算機網絡(第四版),清華大學出版社,20044謝希仁,計算機網絡(第四版),電子工業(yè)大學,20065 王宏C編程設計方案教程清華大學出版社:200
6、2: 6 夏華香C#編程技巧具體案例解析中國電力出版社:2005:發(fā)出任務書日期:2008年 月 日 指導教師簽名:計劃完成日期: 2008年 月 日基層教學單位責任人簽章:主管院長簽章:一、 ping的實現(xiàn)方法和方案: 1.1 ping的原理: Ping命令不僅存在Windows系統(tǒng)上,在Unix系統(tǒng)上也有Ping命令,其實對其他只要是支持網絡的操作系統(tǒng),一般也都存在該命令。Ping命令的主要作用是檢測網絡上主機的狀態(tài)。要是在幾年前,我們還可以下如此斷言,如果不能Ping通某臺主機,那么也就無法Telnet或者FTP到這臺主機,但隨著互聯(lián)網的安全意識的增加,出現(xiàn)了訪問控制清單的路由器和防火墻
7、,由于ICMP報文是在IP數(shù)據包中被傳輸?shù)?,而到達一臺主機不僅取決于IP層是否到達,還取決于使用何種協(xié)議和端口。譬如金山公司的金山網鏢就可以禁止其他機器Ping通這臺主機。所以在現(xiàn)在的情況下,即時Ping不通某臺機器,但也有可能FTP登陸到這臺機器,或者通過HTTP來瀏覽這臺機器上的Web頁面 定義IP數(shù)據報、ICMP包等相關的數(shù)據結構如下: / IP 頭結構typedef struct iphdr unsigned int h_len:4; / 首部長度 unsigned int version:4; / IP版本 unsigned char tos; / 服務類型 unsigned sho
8、rt total_len; / 包總長度 unsigned short ident; /標識符 unsigned short frag_and_flags; / 標志 unsigned char ttl;/ 生存周期 unsigned char proto; / protocol (TCP, UDP etc) 協(xié)議類型 unsigned short checksum; /IP檢驗和 unsigned int sourceIP;/源地址IP unsigned int destIP;/目的地址IPIpHeader;/ ICMP 頭結構typedef struct icmphdr BYTE i_ty
9、pe;/類型 BYTE i_code; / 代碼類型 USHORT i_cksum;/檢驗和 USHORT i_id;/地址 USHORT i_seq;/發(fā)送順序 /* This is not the std header, but we reserve space for time */ ULONG timestamp;/接受時間IcmpHeader;1.2設計方案: ping-n count -r count-n count 發(fā)送 count 指定的 ECHO 數(shù)據包數(shù)。默認值為 4。 -r count 在"記錄路由"字段中記錄傳出和返回數(shù)據包的路由。count 可以指
10、定最少 1 臺,最多 9 臺計算機。 Ping的返回信息有"Request Timed Out"、"Destination Net Unreachable"和"Bad IP address"還有"Source quench received"。 "Request Timed Out"這個信息表示對方主機可以到達到TIME OUT,這種情況通常是為對方拒絕接收你發(fā)給它的數(shù)據包造成數(shù)據包丟失。大多數(shù)的原因可能是對方裝有防火墻或已下線。 "Destination Net Unreachabl
11、e"這個信息表示對方主機不存在或者沒有跟對方建立連接。這里要說明一下"destination host unreachable"和"time out"的區(qū)別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其它原因不可到達,這時候會出現(xiàn)"time out",如果路由表中連到達目標的路由都沒有,那就會出現(xiàn)"destination host unreachable"。 "Bad IP address" 這個信息表示你可能沒有連接到DNS服務器所以無法解析這個IP地址,也可能是IP
12、地址不存在。 "Source quench received"信息比較特殊,它出現(xiàn)的機率很少。它表示對方或中途的服務器繁忙無法回應。 開始結束i<argc?if(*)switch()bRecordRoute=trueusage(*)if(*)datasize=atoi(argvi)ipdest=argvi1.3程序實現(xiàn)流程圖如下: rdefault成立成立 否成立否否圖(ValidateArgs)開始i<ptr/4?If(host)?Inaddr,h_nameinaddr結束成立不成立 成立不成立開始Iphdrlen&&!icmpcountDec
13、odeIPoptions()bytes<iphdrlen+ICMP_MIN_Too few bytes from*I_type !=EC*PLYnonecho type*recvdIf(id*)Someone else*結束圖(DecodeIPoptions) 成立 成立 成立 成立圖(DecodeICMPHeader)結束發(fā)送報文打印失敗信息結束函數(shù)求檢驗和接收報文解析報文打印失敗信息結束函數(shù)設置接收和發(fā)送時限開始創(chuàng)建套接字創(chuàng)建輸入接口判斷是否有IP選項打印失敗信息結束函數(shù)驗證輸入ValidateArgs()創(chuàng)建一個IP選項接口打印失敗信息結束函數(shù)打印失敗信息結束函數(shù) 獲取主機信息填寫
14、ICMP報文打印失敗信息結束函數(shù) 否 是 否是否 否是否 是 否是 否是 否是未發(fā)送四次完成圖(main)二、程序源代碼主函數(shù)代碼:/主函數(shù)/ 設置產生ICMP報文,增加可以選擇的IP選項首部/ 發(fā)送ICMP回顯請求報文到目的主機,并且為每個/ 報文設置一個生存時間,以防止我們不能接受到/ 回顯應答報文,當收到一個回顯應答報文時檢測代碼 int main(int argc, char *argv)char *icmp_data = NULL;/設置ICMP包數(shù)據為空char *recvbuf = NULL;/創(chuàng)建接受緩存并賦值USHORT seq_no = 0;/設置接收順序編號struct
15、sockaddr_in dest = '0'/設置目的地址為空struct sockaddr_in from= '0'/設置發(fā)送地址為空struct hostent *hp = NULL;/設置首部為空int bread = 0;int ret = 0;int fromlen = sizeof(from);/計算發(fā)送包的長度int timeout = 1000;/設置生存時間unsigned int addr = 0;WSADATA wsaData;/創(chuàng)建一個網絡編程套接字SOCKET sockRaw = INVALID_SOCKET;/設置初始套接字為空IpO
16、ptionHeader ipopt = '0'/設置IP選項首部為空if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)/判斷是否成功創(chuàng)建版本2.2的網絡套接字printf("WSAStartup() failed: %dn", GetLastError();/打印創(chuàng)建錯誤信息return 2;ValidateArgs(argc, argv);/調用驗證IP選項首部函數(shù)sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);/創(chuàng)建發(fā)送套接字if (sockRaw =
17、INVALID_SOCKET)/判斷是否發(fā)送成功printf("WSASocket() failed: %dn", WSAGetLastError();/打印失敗信息return 3;if (bRecordRoute)/判斷是否有記錄IP路由的選項ZeroMemory(&ipopt, sizeof(ipopt);/開辟一個sizeof(ipopt)長度的內存ipopt.code = IP_RECORD_ROUTE; / 設置記錄路由選項值ipopt.ptr = 4; / 指到第一個記錄填寫IP地址的位置ipopt.len = 39; /IP選項首部程度 ret =
18、setsockopt(sockRaw, IPPROTO_IP, IP_OPTIONS,(char *)&ipopt, sizeof(ipopt); /設置套接字選項if (ret = SOCKET_ERROR)/判斷是否成功創(chuàng)建套接字printf("setsockopt(IP_OPTIONS) failed: %dn",/打印失敗信息WSAGetLastError();bread = setsockopt(sockRaw, SOL_SOCKET, SO_RCVTIMEO,(char*)&timeout, sizeof(timeout); /設置一個接收的設置
19、生存周期的套接字if(bread = SOCKET_ERROR)/判斷套接字是否創(chuàng)建成功printf("setsockopt(SO_RCVTIMEO) failed: %dn",WSAGetLastError();/打印錯誤信息return -1;timeout = 1000;bread = setsockopt(sockRaw, SOL_SOCKET, SO_SNDTIMEO,(char*)&timeout, sizeof(timeout); /設置一個發(fā)送時限的套接字if (bread = SOCKET_ERROR)/判斷創(chuàng)建是否成功printf("s
20、etsockopt(SO_SNDTIMEO) failed: %dn",WSAGetLastError();return -1;memset(&dest, 0, sizeof(dest);/創(chuàng)建一個sizeof(dest)的內存空間dest.sin_family = AF_INET;/設置發(fā)送主機系統(tǒng)的發(fā)送套接字if (dest.sin_addr.s_addr = inet_addr(lpdest) = INADDR_NONE)/把當前地址賦值給發(fā)送地址if (hp = gethostbyname(lpdest) != NULL)/gethostbyname返回一個指向hos
21、tent數(shù)據結構的指針:memcpy(&(dest.sin_addr), hp->h_addr, hp->h_length);/創(chuàng)建首部長度的內存存儲發(fā)送地址dest.sin_family = hp->h_addrtype;/設置系統(tǒng)主機系統(tǒng)套接字printf("dest.sin_addr = %sn", inet_ntoa(dest.sin_addr);/打印發(fā)送地址elseprintf("gethostbyname() failed: %dn",WSAGetLastError();/打印失敗信息return -1;/ Cre
22、ate the ICMP packet/datasize += sizeof(IcmpHeader);icmp_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET); /為icmp_data分配內存recvbuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET); /為recvbuf分配內存if (!icmp_data)/判斷分配內存是否成功printf("HeapAlloc() failed: %dn", GetLastErro
23、r();/打印失敗信息return -1;memset(icmp_data,0,MAX_PACKET);/把icmp_data內存清空FillICMPData(icmp_data,datasize);/調用函數(shù)填寫ICMP包數(shù)據while(1)/用循環(huán)控制發(fā)送數(shù)量static int nCount = 0;/設置靜態(tài)變量,記錄發(fā)送報文的數(shù)量int bwrote;if (nCount+ = 4)/判斷是否已經發(fā)送了4個報文,是的話退出整個循環(huán)break;(IcmpHeader*)icmp_data)->i_cksum = 0;/先把ICMP的檢驗和置零(IcmpHeader*)icmp_d
24、ata)->timestamp = GetTickCount();/獲取當前時間(IcmpHeader*)icmp_data)->i_seq = seq_no+;/發(fā)送順序加一(IcmpHeader*)icmp_data)->i_cksum =checksum(USHORT*)icmp_data, datasize); /計算檢驗和bwrote = sendto(sockRaw, icmp_data, datasize, 0,(struct sockaddr*)&dest, sizeof(dest); 創(chuàng)建發(fā)送套接字if (bwrote = SOCKET_ERROR)
25、/判斷錯誤if (WSAGetLastError() = WSAETIMEDOUT)printf("timed outn");/判斷超時錯誤continue;printf("sendto() failed: %dn", WSAGetLastError();/判斷發(fā)送失敗錯誤return -1;if (bwrote < datasize)/比較發(fā)送數(shù)據報的大小printf("Wrote %d bytesn", bwrote);/打印發(fā)送數(shù)據報的大小bread = recvfrom(sockRaw, recvbuf, MAX_PAC
26、KET, 0,(struct sockaddr*)&from, &fromlen); /創(chuàng)建接受套接字if (bread = SOCKET_ERROR)/判斷失敗原因if (WSAGetLastError() = WSAETIMEDOUT)printf("timed outn");/判斷打印超時錯誤continue;printf("recvfrom() failed: %dn", WSAGetLastError();/判斷接收失敗return -1;DecodeICMPHeader(recvbuf, bread, &from);/
27、查看ICMP回顯應答報文 打印相關信息Sleep(1000);/等待1秒重復發(fā)送ICMP回顯請求報文if (sockRaw != INVALID_SOCKET)closesocket(sockRaw);/判斷套接字進程不為空時關閉進程HeapFree(GetProcessHeap(), 0, recvbuf);/釋放存放接收信息的內存HeapFree(GetProcessHeap(), 0, icmp_data);/釋放icmp_data內存WSACleanup();注銷Windows Socketsreturn 0;四、實驗數(shù)據、結果分析當ping或者主機的時候 就會默認循
28、環(huán)次數(shù)4次。然后數(shù)據包大小為32。加上頭文件32總共64個字節(jié)。丟包率為0??梢酝卣构δ苓€可以自定義循環(huán)次數(shù)和數(shù)據大小。五、思考題1. 本題目只要求實現(xiàn)PING的一些簡單功能,在Windows命令行模式下,輸入“Ping”回車,查看PING的所有功能,考慮如何實現(xiàn)這些功能。答:PING的主要功能是用來檢測網絡的連通情況和分析網絡速度。使用Ping檢查連通性有五個步驟: 1. 使用ipconfig /all觀察本地網絡設置是否正確; 2. Ping , 回送地址Ping回送地址是為了檢查本地的TCP/IP協(xié)議有沒有設置好; 3. Ping本機IP地址,這樣是為
29、了檢查本機的IP地址是否設置有誤; 4. Ping本網網關或本網IP地址,這樣的是為了檢查硬件設備是否有問題,也可以檢查本機與本地網絡連接是否正常;(在非局域網中這一步驟可以忽略) 5. Ping遠程IP地址,這主要是檢查本網或本機與外部的連接是否正常。2.如果一臺主機能ping通自己但網絡不通,可能是什么原因?答:DNS設置的不對,代理沒有設置好,IP沒有配置好 ,再或者就是中了病毒,arp病毒, 還有就是有可能有人用了一些網管軟件3.考慮Netstat、Traceroute、ipconfig等網絡測試應用程序的工作原理以及使用。答:netstat命令的功能是顯示網絡連接、路由表和網絡接口信
30、息,可以讓用戶得知目前都有哪些網絡連接正在運作。 該命令的一般格式為: netstat 一般有多個命令。Traceroute最簡單的基本用法是:traceroute hostnameipconfig-當使用IPConfig時不帶任何參數(shù)選項,那么它為每個已經配置了的接口顯示IP地址、子網掩碼和缺省網關值六、心得體會開始接到網絡編程的課程設計一點都不懂,再加上要用C語言編程,更不知該從何下手。由于考慮都時間關系,我們小組4人再分成兩組分別進行,分別開始對兩個設計的工作。我主要負責的就是ping程序的設計。在圖書館查找了資料,在網上搜索了許多相關資料后,才開始對各個函數(shù)的理解。參考了同學的程序,在
31、對每個函數(shù)與其參數(shù)進行了理解,最后才基本上了解了整個過程,并且可以在此基礎上添加一些功能等。廣東工業(yè)大學課程設計任務書題目名稱文件傳輸協(xié)議的簡單設計與實現(xiàn)學生學院自動化學院專業(yè)班級網絡工程3班姓 名學 號一、 實驗目的文件傳送是各種計算機網絡都實現(xiàn)的基本功能,文件傳送協(xié)議是一種最基本的應用層協(xié)議按照客戶/服務器的模式進行工作,提供交互式的訪問,是INTERNET使用最廣泛的協(xié)議之一。本實驗的目的是,學會利用已有網絡環(huán)境設計并實現(xiàn)簡單應用層協(xié)議,掌握TCP/IP 網絡應用程序基本的設計方法和實現(xiàn)技巧。二、 實驗內容和要求1、實驗內容我們的計算機網絡實驗環(huán)境建立在TCP/IP 網絡體系結構之上。各
32、計算機除了安裝TCP/IP 軟件外,還安裝了TCP/IP 開發(fā)系統(tǒng)。實驗室各計算機具備Windows環(huán)境中套接字socket 的編程接口功能,可為用戶提供全網范圍的進程通信功能。本實驗要求學生利用這些功能,設計和實現(xiàn)一個簡單的文件傳送協(xié)議。2、具體要求用socket 編程接口編寫兩個程序,分別為客戶程序(client.c)和服務器程序(server.c),該程序應能實現(xiàn)下述命令功能:get:取遠方的一個文件put:傳給遠方一個文件pwd:顯示遠主當前目錄dir:列出遠方當前目錄cd :改變遠方當前目錄? :顯示你提供的命令quit :退出返回三、 實驗主要儀器設備和材料Pc機一臺(可以與其他機
33、聯(lián)通或者可以上網)操作系統(tǒng)為windows xp軟件為vc6.0Windows 環(huán)境下四、 實驗方法、步驟及結構測試1) 關于端口號(假設用SERV_PORT 來表示)的設定,原則上2000 至5000都可用,為避免沖突,建議取你學號后三位數(shù)加上2000,比如學號為971234,則可定義: #define SERV_PORT 22342) 客戶和服務程序中要有相應的include 文件(參考所給例子程序)3) 有些同學的server 方程序支持多連接,為了不占用更多的系統(tǒng)資源,并發(fā)連接數(shù)限制在3 個以內。4) 最后提交源程序,撰寫實驗報告,在實驗報告中說明設計的思路。五、 課程設計進程安排序號
34、設計(論文)各階段內容地點起止日期1了解實驗內容,查找資料 實驗室,圖書館12.222查找資料,了解各個函數(shù)的內容圖書館宿舍12.233調試,解決各段函數(shù)的錯誤,實現(xiàn)各項功能宿舍12.244小組交流,交換各自意見宿舍12.255答辯實驗室12.266完成設計報告,并加深對設計的了解宿舍12.27六、 應收集的資料及主要參考文獻1程良倫,網絡工程概論,機械工業(yè)出版社,20072張越 等,Visual C+網絡程序設計實例詳解,人民郵電出版社,20063Andrew S Tanenbaum 著 潘愛民 譯 ,計算機網絡(第四版),清華大學出版社,20044謝希仁,計算機網絡(第四版),電子工業(yè)大學
35、,20065 王宏C編程設計方案教程清華大學出版社:2002: 6 夏華香C#編程技巧具體案例解析中國電力出版社:2005:發(fā)出任務書日期:2008年 月 日 指導教師簽名:計劃完成日期: 2008年 月 日基層教學單位責任人簽章:主管院長簽章:一、 文件傳輸協(xié)議(FTP)的實現(xiàn)原理程序實現(xiàn)方法和方案流程圖如下: 服務端 監(jiān)聽進入循環(huán) socket開始Rc<0建立線程分塊多線程NY打印錯誤信息客戶函數(shù)開始YN關閉讀取aa<0NN讀取函數(shù)Return -1Y返回文件長度Case0讀信息其他錯誤,關閉轉為文件類型Case2 傳文件 讀文件打開文件并傳輸發(fā)出請求客戶端:發(fā)送命令服務器監(jiān)聽
36、返回Case 0Return -1讀信息Case 2發(fā)送等待 服務器接收信息開啟下載NY記錄文件斷點續(xù)傳第一次傳輸建立線程下載后自動結束主要函數(shù)說明:服務器端由于要實現(xiàn)多線程,必須把功能獨立出來,且包裝成線程,首先建一個監(jiān)聽線程,主要負責接入客戶,并啟動另一個客戶線程。具體程序如下:(其中包括一些說明)/包含需要用到的頭文件#include "Winsock.h"#include "windows.h"#include "stdio.h"#include "time.h"#include <iostream.
37、h>#define RECV_PORT 2000#define SEND_PORT 3000#pragma comment(lib, "wsock32.lib")SOCKET sock;char filename20;sockaddr_in ServerAddr;char rbuff1024;char sbuff1024;char IIP20;/處理help命令void help() cout<<"*COMMANDS help*"<<endl <<"*命令*作用*"<<endl &
38、lt;<" ?或者'help'.顯示你提供的所有命令 "<<endl <<" dir.顯示遠方當前目錄的文件 "<<endl <<" cd.改變遠方當前目錄和路徑 "<<endl <<" cd的用法(進入下級目錄): 'cd 路徑名' "<<endl <<" cd的用法(進入上級目錄): 'cd .' "<<endl <<&
39、quot; get.下載(接受)文件 "<<endl <<" get的用法: 'get 文件名' "<<endl <<" put.上傳(發(fā)送)文件 "<<endl <<" put的用法:'put 文件名' "<<endl <<" quit.退出 "<<endl <<"*"<<endl;/處理dir命令void list(SO
40、CKET sockfd) int nRead; while(true) nRead=recv(sock,rbuff,1024,0); if(nRead=SOCKET_ERROR) printf("read response error!n"); exit(1); if(nRead=0)/數(shù)據讀取結束 break; /顯示數(shù)據 rbuffnRead='0' printf("%s",rbuff); int SendFile(SOCKET datatcps,FILE* file) printf("sending file data.&
41、quot;); for(;) /從文件中循環(huán)讀取數(shù)據并發(fā)送客戶端 int r=fread(sbuff,1,1024,file); if(send(datatcps,sbuff,r,0)=SOCKET_ERROR) printf("lost thr connection to client!n"); closesocket(datatcps); return 0; if(r<1024)/文件傳送結束 break; closesocket(datatcps); printf("donen"); return 1;/初始化scoketDWORD Star
42、tSock()WSADATA WSAData;char a20;memset(a,0,20);if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)printf("sock init fail!n");return (-1);if(strncmp(IIP,a,20)=0)printf("請輸入連接的主機號:");scanf("%s",&IIP);ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=inet_addr(IIP);Se
43、rverAddr.sin_port=htons(RECV_PORT);return(1);/創(chuàng)建套接字DWORD CreateSocket()sock=socket(AF_INET,SOCK_STREAM,0);if(sock=SOCKET_ERROR)printf("sock create fail! n");WSACleanup();return(-1);return(1);/發(fā)送連接請求DWORD CallServer() CreateSocket();if (connect(sock,(struct sockaddr *)&ServerAddr,sizeof
44、(ServerAddr)=SOCKET_ERROR)printf("Connect fail n");memset(IIP,0,20);return(-1);return(1); /發(fā)送命令DWORD TCPSend(char data) int length;length=send(sock,data,strlen(data),0);if(length<=0)printf("send data error ! n");closesocket(sock);WSACleanup();return(-1);return(1);/主程序int main(
45、)char messge110; char messge220; char order30; order0='0'char buff80;FILE *fd;FILE *fd2;int count;int sin_size=sizeof(ServerAddr);StartSock();if(CallServer()=-1)return main();printf("connect ok! n"); printf("Input order:n");memset(buff,0,80);memset(messge2,0,20);memset(or
46、der,0,30);memset(messge1,0,10);memset(rbuff,0,1024);memset(sbuff,0,1024);scanf("%s",&messge1);if(strncmp(messge1,"get",3)=0)scanf("%s",&messge2);if(strncmp(messge1,"put",3)=0)scanf("%s",&messge2);if(strncmp(messge1,"cd",2)=0) sc
47、anf("%s",&messge2); strcat(order,messge1);strcat(order," ");strcat(order,messge2);sprintf(buff,order);/help和?printf("n");if(strncmp(messge1,"help",4)=0)help();if(strncmp(messge1,"?",1)=0)help();if(strncmp(messge1,"quit",4)=0)closesocket
48、(sock);WSACleanup();return 0;TCPSend(buff); recv(sock,rbuff,1024,0); printf(rbuff);if(strncmp(rbuff,"get",3)=0) fd=fopen(messge2,"wb");/使用二進制方式 if(fd=NULL) printf("open file %s for weite failed!n",messge2); return 0; while(count=recv(sock,rbuff,1024,0)>0) fwrite(rbuf
49、f,sizeof(char),count,fd); fclose(fd);/getif(strncmp(rbuff,"put",3)=0)strcpy(filename,rbuff+9); fd2=fopen(filename,"rb");if(fd2)if(!SendFile(sock,fd2) printf("send failed!");return 0; fclose(fd2);else/打開文件失敗 strcpy(sbuff,"can't open file!n"); if(send(sock,sbuff,1024,0) return 0;/putif(strncmp(rbuff,"dir",3)=0)list(sock);/dirif(strncmp(rbuff,"cd",2)=0)closesocket(sock);WSACleanup();/cdreturn main();/main二、客戶端先連接服務器,接著發(fā)送命令1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《高等數(shù)學基礎知識》課件
- 湖南省名校聯(lián)考聯(lián)合體2024-2025學年高三上學期第四次聯(lián)考歷史試題(含答案)
- 巨大胎兒的健康宣教
- 亞急性皮膚紅斑狼瘡的健康宣教
- 藥物性鼻炎的健康宣教
- 家族性進行性色素沉著的臨床護理
- 家族性黏液血管纖維瘤的臨床護理
- 1.4.2用空間向量研究夾角問題第2課時(教學課件)高二數(shù)學選擇性必修第一冊(人教A版2019)
- JJF(陜) 056-2021 等電位測試儀校準規(guī)范
- 金融行業(yè)品牌推廣策略計劃
- 崗前安全培訓試題及參考答案【奪分金卷】
- 九年級下冊孔乙己課文原文及解讀
- 英漢漢英口譯智慧樹知到答案2024年山東科技大學
- DB63T 2318-2024 辦公用房維修管理規(guī)范
- 2024年人教版小學四年級科學(下冊)期末試卷及答案
- 人教版數(shù)學九年級上冊說課稿22.1.4《二次函數(shù)y=ax2+bx+c的圖象和性質》
- 移動電子商務在流動貨攤零售中的機會
- 操作規(guī)程與保養(yǎng)作業(yè)指導書-注塑機
- 綠化養(yǎng)護服務投標方案(技術標)
- 中職語文基礎模塊上冊-第一次月考卷(1)【知識范圍:1-2單元】解析版
- 國開本科《城市管理學》期末考試題庫及答案
評論
0/150
提交評論