網(wǎng)絡(luò)實(shí)踐課程設(shè)計(jì)報(bào)告_第1頁(yè)
網(wǎng)絡(luò)實(shí)踐課程設(shè)計(jì)報(bào)告_第2頁(yè)
網(wǎng)絡(luò)實(shí)踐課程設(shè)計(jì)報(bào)告_第3頁(yè)
網(wǎng)絡(luò)實(shí)踐課程設(shè)計(jì)報(bào)告_第4頁(yè)
網(wǎng)絡(luò)實(shí)踐課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)網(wǎng)絡(luò)實(shí)踐設(shè)計(jì)報(bào)告學(xué)院: 計(jì)算機(jī) 班級(jí): 成教2012業(yè)余 教師: 李領(lǐng)治 學(xué)號(hào): 姓名: 成績(jī): 實(shí)驗(yàn)?zāi)康模赫莆誛insock2.0套接字編程技術(shù)的基本方法。實(shí)驗(yàn)要求:運(yùn)用TCP/IP Winsock2.0套接字編程技術(shù),使用VC編寫(xiě)一個(gè)面向連接通信的服務(wù)端程序與客戶(hù)端程序,服務(wù)器先與端口3000綁定,然后等待客戶(hù)連接,連接成功后就可與客戶(hù)端互相收、發(fā)信息。交互中,通信任一方只要發(fā)送 bye, 通信過(guò)程便自動(dòng)結(jié)束。實(shí)驗(yàn)源程序:服務(wù)器程序:#pragma comment (lib, "Ws2_32.lib") /Winsock 2 函數(shù)庫(kù)/-#include <c

2、onio.h>#include <stdio.h>#include <winsock2.h> /Winsock 2 函數(shù)頭文件/-bool InitSocket(); int main(int, char*)struct sockaddr addr;int len;bool over;char msg255;SOCKET sock, sersock;if( !InitSocket() ) return 0; /加載初始化 Winsock 2 動(dòng)態(tài)鏈接庫(kù) Ws2_32.dllsock = socket( AF_INET,SOCK_STREAM,0 ); /創(chuàng)建監(jiān)聽(tīng)的

3、流套接口 if( sock=INVALID_SOCKET ) /不能創(chuàng)建,返回printf("不能創(chuàng)建Socket!n");getch();WSACleanup( ); /卸載Winsock 2動(dòng)態(tài)鏈接庫(kù)Ws2_32.dllreturn 0;/設(shè)置本服務(wù)器IP地址和端口號(hào)(sockaddr_in*)&addr)->sin_family = AF_INET; /AF_INET:使用Internet 協(xié)議(sockaddr_in*)&addr)->sin_port = htons(3000); /服務(wù)器端口號(hào)3000(sockaddr_in*)&am

4、p;addr)->sin_addr.s_addr = inet_addr("127.1.1.1"); /主機(jī)地址/把套接口與地址綁定bind(sock,&addr,sizeof(addr);/服務(wù)進(jìn)程準(zhǔn)備接收套接口上的連接請(qǐng)求listen(sock,1); /監(jiān)聽(tīng)方式,準(zhǔn)備接收連接請(qǐng)求:1-允許等待隊(duì)列中的連接請(qǐng)求1個(gè)/接受網(wǎng)絡(luò)連接,生成新的套接口sersock標(biāo)識(shí)這一連接printf("等待客戶(hù)連接!n");len = sizeof(addr);sersock = accept( sock,&addr,&len );/從等

5、待隊(duì)列中檢取連接請(qǐng)求,如隊(duì)列空則進(jìn)程阻塞等待;/如不空,則接受客戶(hù)連接,使用返回連接套接口sersock與該客戶(hù)連接。/原套接口sock可繼續(xù)監(jiān)聽(tīng)其它客戶(hù)請(qǐng)求。if(sersock=INVALID_SOCKET) /若套接口sersock 出錯(cuò)DWORD err = WSAGetLastError();char txt100;sprintf(txt,"error when accept!-errno:%d",err);printf(txt);getch();closesocket(sock); /關(guān)閉監(jiān)聽(tīng)套接口sockWSACleanup( ); /卸載Winsock 2動(dòng)

6、態(tài)鏈接庫(kù)Ws2_32.dllreturn 0;printf("有客戶(hù)連接!n輸入bye通信結(jié)束n");over = false; /狀態(tài)設(shè)置為未結(jié)束/與客戶(hù)交互會(huì)話,直至任一方打入bye后退出循環(huán)doprintf("n等待對(duì)方用戶(hù)輸入信息.");len = recv ( sersock,msg,200,0 ); /接收對(duì)方信息printf("n對(duì)方輸入:%s",msg); /顯示對(duì)方信息if( strcmp(msg,"bye")=0 ) /若對(duì)方信息為bye就結(jié)束通信break;printf("n本方回答

7、:");gets(msg); /鍵入本方信息if( strcmp(msg,"bye")=0 ) over = true; /若本方發(fā)出bye就結(jié)束通信send ( sersock,msg,strlen(msg)+1,0 ); /將本方鍵入信息發(fā)給對(duì)方 while( !over );closesocket(sersock); /關(guān)閉連接套接口closesocket(sock); /關(guān)閉監(jiān)聽(tīng)套接口printf("nn會(huì)話結(jié)束,按任一鍵返回n");getch();WSACleanup( ); /卸載 Winsock 2 動(dòng)態(tài)鏈接庫(kù)Ws2_32.dll

8、return 0;/-/下述函數(shù)加載初始化Winsock 2 動(dòng)態(tài)鏈接庫(kù) Ws2_32.dllbool InitSocket() WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 0 ); /Wiinsock2.0版err = WSAStartup( wVersionRequested, &wsaData ); /加載if ( err != 0 ) /沒(méi)有Winsock 2 動(dòng)態(tài)鏈接庫(kù) Ws2_32.dllprintf("沒(méi)有Windows Socket動(dòng)態(tài)庫(kù)!n&q

9、uot;);getch();return false;if ( LOBYTE( wsaData.wVersion ) != 2 | /不是Winsock 2.0HIBYTE( wsaData.wVersion ) != 0 ) printf("需要Windows Socket 2!n");getch();WSACleanup( ); /卸載 Winsock 動(dòng)態(tài)鏈接庫(kù)return false;return true;客戶(hù)端程序:#pragma comment (lib, "Ws2_32.lib") /Winsock 2 函數(shù)庫(kù)/-#include <

10、;conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <winsock2.h> /Winsock 2 函數(shù)頭文件/-bool InitSocket(); int main(int , char*)int type;SOCKET sock; struct sockaddr addr; int len,portno;int err;char msg255;bool over;if( !InitSocket() ) return 0; /加載初始化 Wi

11、nsock 2 動(dòng)態(tài)鏈接庫(kù) Ws2_32.dlltype = SOCK_STREAM; sock = socket( AF_INET,type,0 ); /創(chuàng)建客戶(hù)端流套接口if( sock=INVALID_SOCKET ) /不能創(chuàng)建,返回printf("不能創(chuàng)建Socket!");getch();WSACleanup( ); /卸載Winsock 2動(dòng)態(tài)鏈接庫(kù)Ws2_32.dllreturn 0; / 以下輸入對(duì)方服務(wù)器IP地址(sockaddr_in*)&addr)->sin_family = AF_INET; / Internet 協(xié)議printf(&

12、quot;輸入服務(wù)器地址(x.x.x.x):"); gets(msg);(sockaddr_in*)&addr)->sin_addr.s_addr = inet_addr(msg); / inet_addr()將點(diǎn)分十進(jìn)制IP地址串轉(zhuǎn)換為u_long類(lèi)型/ 以下輸入對(duì)方服務(wù)器端口號(hào)printf("輸入對(duì)方服務(wù)器端口號(hào)(3000):");gets(msg);if(msg0=0x00) portno=3000; /如果直接回車(chē),就采用默認(rèn)端口號(hào)3000else portno=atoi(msg);(sockaddr_in*)&addr)->s

13、in_port = htons( portno ); / htons():從短整數(shù)的主機(jī)字節(jié)順序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序/ 以下與對(duì)方服務(wù)器連接/ 在使用面向連接協(xié)議 (TCP)時(shí),必須與服務(wù)器連接成功后,/ 才可通信;另外,若使用無(wú)連接的協(xié)議(UDP) ,則可以直/ 接向?qū)Ψ桨l(fā)數(shù)據(jù)、無(wú)需連接, 但面向連接收、發(fā)數(shù)據(jù)時(shí)用/ 的send()和recv()要換成無(wú)連接用的函數(shù) sendto()和recvfrom() printf("與服務(wù)器連接.!");len = sizeof(addr);err = connect( sock,(sockaddr*)&addr,len );

14、 /連接if( err=SOCKET_ERROR ) /若連接失敗printf("連接失敗!");getch();WSACleanup( ); /卸載Winsock 2動(dòng)態(tài)鏈接庫(kù)Ws2_32.dllreturn 0;printf("成功連接到服務(wù)器!n若輸入bye則通信結(jié)束n");over = false; /狀態(tài)設(shè)置為未結(jié)束/ 以下為客戶(hù)與服務(wù)器會(huì)話交互,直至輸入或收到bye,則/ 退出循環(huán),結(jié)束doprintf("nn本方輸入:");gets(msg);if( strcmp(msg,"bye")=0 ) ove

15、r = true; /輸入"bye"則結(jié)束通信send ( sock,msg,strlen(msg)+1,0); /發(fā)送信息if(over) break; printf("等待服務(wù)器響應(yīng).n");len = recv ( sock,msg,200,0 ); /接收信息,接收緩沖區(qū)長(zhǎng)200 msglen=0; /在接收串變量尾添結(jié)束符0 if( strcmp(msg,"bye")=0 ) over = true; /收到"bye"則結(jié)束通信printf("對(duì)方回答:");printf(msg);

16、/顯示接收信息while( !over );/以下關(guān)閉套接口,卸載Winsock 2動(dòng)態(tài)鏈接庫(kù)closesocket(sock); /關(guān)閉客戶(hù)套接口printf("n會(huì)話結(jié)束,按任一鍵返回n");getch();WSACleanup( ); /卸載Winsock 2動(dòng)態(tài)鏈接庫(kù)Ws2_32.dllreturn 0;/-/下述函數(shù)加載初始化Winsock 2 動(dòng)態(tài)鏈接庫(kù) Ws2_32.dllbool InitSocket() WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 0 ); /Wiinsock2.0版err = WSAStartup( wVersionRequested, &wsaData ); /加載if ( err != 0 ) /沒(méi)有Winsock 2 動(dòng)態(tài)鏈接庫(kù) Ws2_32.dllprintf("

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論