

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢 業(yè) 設 計</b></p><p><b> 摘要</b></p><p> Socket通信機制提供了兩種通訊方式:有聯(lián)接和無聯(lián)接方式,分別面向不同的應用需求。使用有聯(lián)接方式時,通信鏈路提供了可靠的,全雙工的字節(jié)流服務。在該方式下,通信雙方必須創(chuàng)建一個聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡通信操作完全在這一
2、對進程之間進行,通信完畢關閉此聯(lián)接過程。使用無聯(lián)接方式時其系統(tǒng)開銷比無聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報服務,不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路,網(wǎng)絡通信操作在不同的主機和進程之間轉發(fā)進行。</p><p><b> 關鍵字</b></p><p> WinSock TCP VC++ 雙機通
3、信</p><p><b> 目 錄</b></p><p> 一、設計題目………………………………………………………3</p><p> 二、目的與要求 ……………………………………………………3</p><p> 三、開發(fā)環(huán)境介紹…………………………………………………3</p>&l
4、t;p> 四、WinSocket簡介……………………………………………3</p><p> 五、TCP/IP簡介……………………………………………………5</p><p> 六、總體設計……………………………………………………6</p><p> 七、詳細設計……………………………………………………7</p><p> 八、系
5、統(tǒng)實現(xiàn)……………………………………………………9</p><p> 九、實驗結果分析………………………………………………11</p><p> 十、主要程序代碼………………………………………………12</p><p> 十一、參考文獻…………………………………………………12</p><p><b> 一、設計題目</
6、b></p><p> 利用Socket實現(xiàn)雙機通信</p><p><b> 二、目的與要求</b></p><p> 利用WinSock來實現(xiàn)雙機通信,理解TCP狀態(tài)機圖。要求使用WinSock編程,采用其中的TCP面向連接方式,實現(xiàn)文本數(shù)據(jù)的交換。</p><p><b> 三、開發(fā)環(huán)境介紹
7、</b></p><p> Microsoft Visual C++,(簡稱Visual C++、MSVC、VC++或VC)微軟公司的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++/CLI等編程語言。VC++集成了便利的除錯工具,特別是集成了Windows API、三維動畫DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual
8、 C++ 2010。</p><p> Visual C++以擁有“語法高亮”,IntelliSense(自動編譯功能)以及高級除錯功能而著稱。比如,它允許用戶進行遠程調試,單步執(zhí)行等。還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試的程序。其編譯及建置系統(tǒng)以預編譯頭文件、最小重建功能及累加鏈接著稱。這些特征明顯縮短程序編輯、編譯及鏈接的時間花費,在大型軟件計劃上尤其顯著。</p>
9、<p> 四、WinSocket簡介</p><p> 1、WinSocket簡介</p><p> Socket接口是網(wǎng)絡編程(通常是TCP/IP協(xié)議,也可以是其他協(xié)議)的API。最早的Socket接口是Berkeley接口,在Unxi操作系統(tǒng)中實現(xiàn)。WinSock也是一個基于Socket模型的API,在Microsoft Windows操作系統(tǒng)類中使用。它在Berk
10、eley接口函數(shù)的基礎之上,還增加了基于消息驅動機制的Windows擴展函數(shù)。Winscok1.1只支持TCP/IP網(wǎng)絡,WinSock2.0增加了對更多協(xié)議的支持</p><p> Windows Socket簡稱Winsock,是在Windows環(huán)境下使用的一套網(wǎng)絡編程規(guī)范,基于4.3BSD的BSD Socket API制定。</p><p> 套接字數(shù)據(jù)傳輸是一種特殊的I/O,套
11、接字也是一種文件描述符。Socket具有一個類似于打開文件的函數(shù)調用----socket(),該函數(shù)返回一個整型的Socket描述符,隨后的建立連接、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實現(xiàn)的。</p><p> Socket是面向客戶/服務器模型設計的,網(wǎng)絡上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket??蛻舫绦蚩梢韵騍ocket寫請求,服務器將處理此請求,然后通過S
12、ocket將結果返回給用戶。</p><p> Socket通信機制提供了兩種通訊方式:有聯(lián)接和無聯(lián)接方式,分別面向不同的應用需求。使用有聯(lián)接方式時,通信鏈路提供了可靠的,全雙工的字節(jié)流服務。在該方式下,通信雙方必須創(chuàng)建一個聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡通信操作完全在這一對進程之間進行,通信完畢關閉此聯(lián)接過程。使用無聯(lián)接方式時其系統(tǒng)開銷比無聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報服務,不能保證信源所傳
13、輸?shù)臄?shù)據(jù)一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路,網(wǎng)絡通信操作在不同的主機和進程之間轉發(fā)進行。</p><p> 2、WinSocket通信原理</p><p> Socket實際上在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有Socket接口的計算機通信。應用程序在網(wǎng)絡上傳輸/接收的信息都通過這個Socket接口來實現(xiàn)的。在應用開發(fā)中
14、可以像使用文件句柄一樣來對Socket句柄進行讀/寫操作。目前可以使用兩種套接口,即流式套接字(SOCK_STREAM)和數(shù)據(jù)報套接字(SOCK_DGRAM)。流式套接字提供了一個面向連接的、可靠的、數(shù)據(jù)無錯的、無重復發(fā)送的及按發(fā)送順序接收數(shù)據(jù)的服務;數(shù)據(jù)報套接字提供不可靠的、無連接的數(shù)據(jù)報傳輸服務。</p><p> 套接字可分為阻塞套接字和非阻塞套接字。阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡調用時,直到成功才返回
15、,否則一直阻塞在此網(wǎng)絡調用上;而非阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡調用時,不管是否執(zhí)行成功,都立即返回。實際上非阻塞套接字是用得最多的。</p><p> C/S模型,即客戶機/服務器模型,是一種非對稱式編程模式。對于這種模式而言,其中一部分需要作為服務端,用來響應并為客戶提供固定的服務;另一部分則作為客戶端用來向服務端提出請求或要求某種服務。在實際應用中,程序可以同時包含客戶端和服務端。</p>
16、<p> 面向連接協(xié)議的通信過程如下:服務端和客戶端都必須建立通信套接字,而服務端套接字應先進入監(jiān)聽狀態(tài),然后客戶端套接字發(fā)出連接請求,服務端套接字收到連接請求后,建立一個新套接字與客戶端套接字進行通信,原來負責監(jiān)聽的套接字仍進行監(jiān)聽,如果再收到其它客戶端套接字的連接請求,則再建立一個新套接字與之通信。通信完畢后斷開連接,關閉相應套接字。</p><p> socket有三種主要類型:stream
17、 sockets, datagram sockets 和raw sockets 。 Stream socket提供面向連接、可靠的數(shù)據(jù)傳輸服務,數(shù)據(jù)無差錯、無重復地發(fā)送且按發(fā)送順序接收。內設置流量控制,避免數(shù)據(jù)流淹沒接受數(shù)據(jù)慢的接收方。數(shù)據(jù)被看作是字節(jié)流,無長度限制。Datagram socket提供無連接服務。數(shù)據(jù)包以獨立數(shù)據(jù)包的形式被發(fā)送,不提供無差錯保證,數(shù)據(jù)可能丟失或重復,順序發(fā)送,可能亂序接收。Raw socket可以對較低層
18、次協(xié)議,如IP、ICMP直接訪問。</p><p> 五、TCP/IP簡介</p><p> 1、TCP/IP簡介</p><p> TCP/IP(Transmission Control Protocol/Internet Protocol)的簡寫,中文譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又叫網(wǎng)絡通訊協(xié)議,這個協(xié)議是Internet最基本的協(xié)議、Intern
19、et國際互聯(lián)網(wǎng)絡的基礎,簡單地說,就是由網(wǎng)絡層的IP協(xié)議和傳輸層的TCP協(xié)議組成的。</p><p> TCP(Transmission Control Protocol)中文稱為“傳輸控制協(xié)議”。TCP是一種面向連接的、可靠的、基于字節(jié)流的運輸層(Transport layer)通信協(xié)議。在簡化的計算機網(wǎng)絡OSI模型中,它完成第四層傳輸層所指定的功能,UDP是同一層內另一個重要的傳輸協(xié)議。</p>
20、<p> IP是英文Internet Protocol的縮寫,中文稱為“網(wǎng)際協(xié)議”,是為計算機網(wǎng)絡相互連接進行通信而設計的協(xié)議。在因特網(wǎng)中,它是能使連接到網(wǎng)上的所有計算機網(wǎng)絡實現(xiàn)相互通信的一套規(guī)則,規(guī)定了計算機在因特網(wǎng)上進行通信時應當遵守的規(guī)則。任何廠家生產(chǎn)的計算機系統(tǒng),只要遵守 IP協(xié)議就可以與因特網(wǎng)互連互通。</p><p><b> 2、TCP的作用</b></
21、p><p> 在因特網(wǎng)協(xié)議族中,TCP層是位于IP層之上,應用層之下的中間層。提供可靠的、像管道一樣的連接。</p><p> 應用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)?、?位字節(jié)表示的數(shù)據(jù)流,然后TCP把數(shù)據(jù)流分割成適當長度的報文段(通常受該計算機連接的網(wǎng)絡的數(shù)據(jù)鏈路層的最大傳送單元(MTU)的限制)。之后TCP把結果包傳給IP層,由它來通過網(wǎng)絡將包傳送給接收端實體的TCP層。TCP為了保證不
22、發(fā)生丟包,就給每個字節(jié)一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的字節(jié)發(fā)回一個相應的確認(ACK);如果發(fā)送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數(shù)據(jù)(假設丟失了)將會被重傳。TCP用一個校驗和函數(shù)來檢驗數(shù)據(jù)是否有錯誤;在發(fā)送和接收時都要計算校驗和。</p><p> 首先,TCP建立連接之后,通信雙方都同時可以進行數(shù)據(jù)的傳輸,其次,TCP通信是全雙工
23、的;在保證可靠性上,采用超時重傳和捎帶確認機制。</p><p> 在流量控制上,采用滑動窗口協(xié)議,協(xié)議中規(guī)定,對于窗口內未經(jīng)確認的分組需要重傳。</p><p> 在擁塞控制上,采用慢啟動算法。</p><p> TCP所提供服務的主要特點有:1、面向連接的傳輸;2、端到端的通信;3、高可靠性,確保傳輸數(shù)據(jù)的正確性,不出現(xiàn)丟失或亂序;4、全雙工方式傳輸;5、
24、采用字節(jié)流方式,即以字節(jié)為單位傳輸字節(jié)序列;6、緊急數(shù)據(jù)傳送功能。</p><p><b> 六、總體設計</b></p><p> 開發(fā)環(huán)境為VC++,使用WinSock實現(xiàn)Windows下網(wǎng)絡通信,使用C/S結構。</p><p> 程序分為服務器程序和客戶端程序,服務器程序接受客戶端程序發(fā)起的連接并接受客戶端的發(fā)出的信息。</
25、p><p><b> 服務器建立的步驟:</b></p><p> 創(chuàng)建TCP協(xié)議的監(jiān)聽套接字。</p><p> 將創(chuàng)建的套接字綁定到設置好的參數(shù)名字上,使用bind函數(shù)來實現(xiàn),參數(shù)由程序運行時傳入。</p><p> 將套接字設置為監(jiān)聽模式,使用listen函數(shù)實現(xiàn)。</p><p>
26、若有客戶端試圖建立連接,服務端使用accept函數(shù)調用來接受連接。</p><p><b> 客戶端建立的步驟:</b></p><p> 創(chuàng)建TCP協(xié)議的監(jiān)聽套接字。</p><p> 將創(chuàng)建好的套接字綁定到設置好的參數(shù)上,使用bind函數(shù)來實現(xiàn),參數(shù)由程序運行時傳入。</p><p> 是用套接字向服務器發(fā)起
27、連接。</p><p><b> 如下圖所示</b></p><p><b> 連接</b></p><p><b> 七、詳細設計</b></p><p><b> 客戶端程序流程圖:</b></p><p><b&
28、gt; 錯誤</b></p><p><b> 正確</b></p><p><b> 循環(huán)發(fā)送信息</b></p><p><b> 服務端程序流程圖</b></p><p><b> 錯誤</b></p><p
29、><b> 正確</b></p><p> 收到客戶端的連接請求</p><p><b> 八、系統(tǒng)實現(xiàn)</b></p><p> 程序中使用的主要變量</p><p> #define MAX_SEND_NUM 4096 //發(fā)送的最大字節(jié)數(shù)</p><p>
30、; unsigned int serverPort; //服務器端口地址</p><p> unsigned int clientPort; //客戶端端口地址</p><p> char serverIp[30]; //用于存儲服務器IP地址</p><p> SOCKET clientSocket; //套接字結構體</p><p&g
31、t; char sendBuf[MAX_SEND_NUM]; //發(fā)送緩存</p><p> int retn;//存儲返回值信息</p><p> struct sockaddr_in serverInfo; //存放服務器信息</p><p> struct sockaddr_in localInfo; //存放本機信息</p><p
32、> struct hostent *host = NULL;</p><p> unsigned int listen_port;//接收端口</p><p> 程序中使用的主要函數(shù)介紹</p><p> 1、使用Winsock API編制的網(wǎng)絡應用程序中,在調用任何一個Winsock函數(shù)之前都必須檢查協(xié)議棧安裝情況,使用函數(shù)WSAStartup()完
33、成操作。</p><p> WSAStartup(MAKEWORD(2,2), &wsadata)</p><p> int WSAStartup(</p><p> WORD wVersionRequested,</p><p> LPWSADATA lpWSAData);</p><p> wVe
34、rsionRequested是一個WORD型(雙字型)數(shù)值,指定使用的版本號,對Winsock2.2而言,此參數(shù)的值為0x0202,也可以用宏MAKEWORD(2,2)來獲得</p><p> lpWSAData是一個指向WSADATA結構的指針,它返回關于Winsock實現(xiàn)的詳細信息</p><p> 2、應用程序在使用套接字通信前,必須要擁有一個套接字,使用socket()函數(shù)來給
35、應用程序創(chuàng)建一個套接字。</p><p> socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)</p><p> SOCKET socket(</p><p> int af,//地址族</p><p> int type,//類型</p><p> int protocol/
36、/協(xié)議);</p><p> 3、當socket()創(chuàng)建了一個套接字后,需要將該套接字與該主機上提供服務的IP地址和端口聯(lián)系在一起,bind()函數(shù)用于完成這樣的綁定。</p><p> bind(clientSocket, (struct sockaddr *)&localInfo, sizeof(localInfo)</p><p><b>
37、; int bind(</b></p><p><b> SOCKET s,</b></p><p> const struct sockaddr FAR * name,</p><p> int namelen);</p><p> 4、在一個服務器端用socket()調用成功創(chuàng)建了一個套接字,并
38、用bind()函數(shù)和一個指定的地址關聯(lián)后,就需要指示該套接字進入監(jiān)聽狀態(tài),這需要通過listen()函數(shù)來實現(xiàn)</p><p> int listen(</p><p> SOCKET s,// 一個已綁定了地址,但還未建立連接的套接字</p><p> int backlog);// 指定正在等待連接的最大隊列長度</p><p>
39、 5、當服務器端建立好套接字并與一個本地地址綁定后,就進入監(jiān)聽狀態(tài),等待客戶發(fā)出連接請求。在客戶端套接字建立好之后,就調用connect()函數(shù)來與服務器建立連接。</p><p> int connect(</p><p><b> SOCKET s,</b></p><p> const struct sockaddr FAR * n
40、ame,</p><p> int namelen);</p><p> 6、在服務器端調用accept()函數(shù)可以接收來自客戶端由connect()發(fā)出的連接請求,雙方進入連接狀態(tài)。</p><p> SOCKET accept(</p><p><b> SOCKET s,</b></p>&l
41、t;p> struct sockaddr FAR * addr,</p><p> int FAR * addrlen);</p><p> 7、使用send()函數(shù)在已經(jīng)建立連接的套接字上發(fā)送數(shù)據(jù)。</p><p><b> int send(</b></p><p><b> SOCKET
42、s,</b></p><p> const char FAR * buf,</p><p><b> int len,</b></p><p> int flags);</p><p> 8、從套接字上接收數(shù)據(jù),使用recv()函數(shù)。</p><p><b> in
43、t recv(</b></p><p><b> SOCKET s,</b></p><p> char FAR * buf,</p><p><b> int len,</b></p><p> int flags);</p><p> 當連接結束的時
44、候,可以使用closesocket()函數(shù)和WSACleanup()函數(shù)進行清理工作。</p><p> 用于格式轉換的函數(shù)有:</p><p> htons(), htonl(),</p><p><b> 九、實驗結果分析</b></p><p> 首先啟動服務器程序,輸入監(jiān)聽端口等參數(shù),程序開始監(jiān)聽,運行界
45、面如下:</p><p> 啟動服務器程序,輸入監(jiān)聽端口等參數(shù),程序連接上服務器,輸入發(fā)送信息,運行界面如下:</p><p> 此時,服務端收到客戶端發(fā)送的數(shù)據(jù),顯示如下:</p><p> 自此,連接建立成功,兩個程序通信也成功。</p><p><b> 十、主要程序代碼</b></p>&l
46、t;p> server.cpp</p><p> int ClientFunc(SOCKET clientSocket){</p><p> char recvBuff[MAX_RECV_NUM];</p><p><b> int retn;</b></p><p> struct sockaddr_i
47、n peerInfo;</p><p> int len=sizeof(peerInfo);</p><p> getpeername(clientSocket,(struct sockaddr*)&peerInfo,&len); // 獲得客戶端IP地址信息</p><p><b> while(1)</b></p
48、><p><b> {</b></p><p> retn = recv(clientSocket, recvBuff, MAX_RECV_NUM, 0);</p><p> if (retn == 0) // 沒有接收到任何數(shù)據(jù)</p><p><b> {</b></p>&l
49、t;p><b> break;</b></p><p><b> }</b></p><p> else if (retn == SOCKET_ERROR)</p><p><b> {</b></p><p> printf("接收數(shù)據(jù)失敗\n&qu
50、ot;);</p><p><b> break;</b></p><p><b> }</b></p><p> recvBuff[retn] = '\0';</p><p> printf("接收到客戶端信息: %s\n", recvBuff); //
51、 輸出客戶端發(fā)送的消息</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> int main(int argc, char **argv)</p><p&
52、gt;<b> {</b></p><p> WSADATA wsd;</p><p> SOCKET listenSocket;</p><p> SOCKET clientSocket;</p><p> int addrSize;</p><p> struct soc
53、kaddr_in localInfo;</p><p> struct sockaddr_in clientInfo;</p><p> CheckInput(argc, argv);</p><p> if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)</p><p><b> {&
54、lt;/b></p><p> printf("加¨®載?Winsock失º¡ì敗㨹!\n");</p><p><b> return 0;</b></p><p><b> }</b></p>
55、<p> // 創(chuàng)建監(jiān)聽的socket</p><p> listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); </p><p> if (listenSocket == SOCKET_ERROR)</p><p><b> {</b></p>&l
56、t;p> printf("創(chuàng)ä¡ä建¡§監(jiān)¨¤聽¬y的Ì?socket失º¡ì敗㨹\n");</p><p><b> return 0;</b></p><p><b>
57、}</b></p><p> localInfo.sin_addr.s_addr = htonl(INADDR_ANY);</p><p> localInfo.sin_family = AF_INET;</p><p> localInfo.sin_port = htons(listen_port);</p><p>&l
58、t;b> // 進行地址綁定</b></p><p> if (bind(listenSocket, (struct sockaddr *)&localInfo, sizeof(localInfo)) == SOCKET_ERROR)</p><p><b> {</b></p><p> printf(&qu
59、ot;綁定socket失敗\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p> // 開始監(jiān)聽,最大同時連接數(shù)設置為</p><p> listen(listenSocket, 64);</p>&l
60、t;p> printf("服務器在端口%d開始監(jiān)聽\n",listen_port);</p><p> // 接受客戶端的信息</p><p><b> while (1)</b></p><p><b> {</b></p><p> addrSize = si
61、zeof(clientInfo);</p><p> // 接受客戶的連接</p><p> clientSocket = accept(listenSocket, (struct sockaddr *)&clientInfo, &addrSize);</p><p> if (clientSocket == INVALID_SOCKET)&l
62、t;/p><p><b> { </b></p><p> printf("接受連接失敗\n");</p><p><b> break;</b></p><p><b> }</b></p><p> Clien
63、tFunc(clientSocket);</p><p><b> }</b></p><p> closesocket(listenSocket);</p><p> WSACleanup();</p><p><b> return 1;</b></p><p>
64、<b> }</b></p><p> Client.cpp</p><p> int main(int argc, char *argv[])</p><p><b> {</b></p><p> if (WSAStartup(MAKEWORD(2,2), &wsadata)
65、!= 0){</p><p> printf("加載Winsock失敗!\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p> clientSocket = socket(AF_INET, SOCK_STR
66、EAM, IPPROTO_TCP);</p><p> if (clientSocket == INVALID_SOCKET) {</p><p> printf("創(chuàng)建客戶端socket失敗: %d\n", WSAGetLastError());</p><p><b> return 0;</b></p>
67、;<p><b> }</b></p><p> // 設置服務器參數(shù)</p><p> serverInfo.sin_family = AF_INET;</p><p> serverInfo.sin_port = htons(serverPort);</p><p> serverInfo.s
68、in_addr.s_addr = inet_addr(serverIp);</p><p><b> //設置本機參數(shù)</b></p><p> localInfo.sin_addr.s_addr = htonl(INADDR_ANY);</p><p> localInfo.sin_family = AF_INET;</p>
69、<p> localInfo.sin_port = htons(clientPort);</p><p> if (bind(clientSocket, (struct sockaddr *)&localInfo, sizeof(localInfo)) == SOCKET_ERROR){</p><p> printf("綁定客戶端端口失敗\n&quo
70、t;);</p><p><b> return 0;</b></p><p><b> }</b></p><p> // 客戶端發(fā)起連接</p><p> if (connect(clientSocket, (struct sockaddr *)&serverInfo, size
71、of(serverInfo)) == SOCKET_ERROR){</p><p> printf("連接服務器失敗\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p> printf("成功連接
72、上服務器 %s\n",serverIp);</p><p> // 向服務器發(fā)送信息</p><p><b> while(1){</b></p><p> printf("請輸入要發(fā)送的信息:");</p><p> gets(sendBuf);</p><p&
73、gt; retn = send(clientSocket, sendBuf, strlen(sendBuf),0);</p><p> if(retn == 0){</p><p><b> break;</b></p><p><b> }</b></p><p> else if (r
74、etn == SOCKET_ERROR){</p><p> printf("發(fā)送數(shù)據(jù)失敗\n");</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>&
75、lt;p> closesocket(clientSocket);</p><p> WSACleanup();</p><p><b> return 1;</b></p><p><b> }</b></p><p><b> 十一、參考文獻</b></
76、p><p> 計算機網(wǎng)絡(第五版) 謝希仁 清華大學出版社 2009</p><p> Visual C++ 開發(fā)入門與編程實踐 屈磊 李媛媛 電子工業(yè)出版社 2007</p><p> 網(wǎng)絡安全技術實踐與代碼詳解 牛冠杰 筍大偉 等 機械工業(yè)出版社 2007</p><p> WINDOWS網(wǎng)絡編程技術 Anthony Jones 機械
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 利用socket實現(xiàn)雙機通信(計算機網(wǎng)絡課程設計)
- 畢業(yè)設計--計算機網(wǎng)絡安全
- 計算機網(wǎng)絡技術畢業(yè)設計
- 計算機網(wǎng)絡專業(yè)畢業(yè)設計(論文)
- 計算機網(wǎng)絡實驗報告-雙機互聯(lián)
- 計算機網(wǎng)絡習題+計算機網(wǎng)絡習題
- eklhbm有關計算機網(wǎng)絡畢業(yè)的論文計算機網(wǎng)絡畢業(yè)論文淺析計算機網(wǎng)絡安全
- 計算機網(wǎng)絡畢業(yè)論文--- 計算機網(wǎng)絡管理軟件
- 計算機網(wǎng)絡安全畢業(yè)設計論文
- 計算機網(wǎng)絡企業(yè)網(wǎng)絡規(guī)劃畢業(yè)設計
- 計算機網(wǎng)絡專業(yè)畢業(yè)設計--網(wǎng)絡設計與規(guī)劃
- 計算機網(wǎng)絡
- 畢業(yè)論文---計算機網(wǎng)絡設計
- 計算機網(wǎng)絡畢業(yè)設計論文(企業(yè)網(wǎng)絡規(guī)劃)
- 畢業(yè)設計---《計算機網(wǎng)絡》課程開發(fā)系統(tǒng)的設計與實現(xiàn)
- 計算機網(wǎng)絡與通信試題
- 計算機網(wǎng)絡安全畢業(yè)論文---淺談計算機網(wǎng)絡安全
- 計算機網(wǎng)絡畢業(yè)論文---淺談計算機網(wǎng)絡安全及建設
- 計算機網(wǎng)絡畢業(yè)論文
- 計算機網(wǎng)絡畢業(yè)論文
評論
0/150
提交評論