Windows網(wǎng)絡(luò)編程(一)-WinSock編程_第1頁
Windows網(wǎng)絡(luò)編程(一)-WinSock編程_第2頁
Windows網(wǎng)絡(luò)編程(一)-WinSock編程_第3頁
Windows網(wǎng)絡(luò)編程(一)-WinSock編程_第4頁
Windows網(wǎng)絡(luò)編程(一)-WinSock編程_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)用標(biāo)準(zhǔn)文案WinSock 編程實(shí)驗(yàn)報(bào)告班級:10網(wǎng)工三班 學(xué)生姓名:謝昊天 學(xué)號:1215134046實(shí)驗(yàn)?zāi)康暮鸵螅簩?shí)驗(yàn)?zāi)康?、了解WinsockAPI2、深刻領(lǐng)會 Winsock 編程原理3、學(xué)會使用 Winsock 創(chuàng)建簡單的 TCP服務(wù)器以及客戶機(jī)實(shí)驗(yàn)要求整個(gè)通信過程參照TCP/IP通信方式;實(shí)現(xiàn)整個(gè)TCP/IP通信的基本模型;完成基本的界面設(shè)計(jì)和事件響應(yīng);服務(wù)器可以同時(shí)和多個(gè)用戶對話,可以同時(shí)恢復(fù)多個(gè)用戶;保證信息傳輸?shù)臅惩?;服?wù)器可以依次和多個(gè)用戶對話。實(shí)驗(yàn)內(nèi)容與分析設(shè)計(jì):編寫一個(gè)基于某種 I/O方法的TCP服務(wù)器和 TCP客戶機(jī):能夠?qū)崿F(xiàn)模擬 C/S模型的通信方式,服務(wù)器端負(fù)責(zé)信息的接收, 并能夠返回給客戶端相應(yīng)的消息; 客戶機(jī)負(fù)責(zé)向服務(wù)器發(fā)送精彩文檔實(shí)用標(biāo)準(zhǔn)文案信息。注:可以模擬教材 95頁面向連接的 TCPSocket 應(yīng)用程序編程實(shí)例。實(shí)驗(yàn)步驟與調(diào)試過程:1.打開Visualc++6.0編程環(huán)境;2.點(diǎn)擊文件->新建、選擇建立新的工程;選擇Win32ConsoleApplication選項(xiàng)建立工程名為“服務(wù)器”的一個(gè)空工程;3.繼續(xù)點(diǎn)擊文件->新建、選擇建立新的文件; 選擇C++SourceFile 選項(xiàng)建立在“服務(wù)器”工程下的名為“服務(wù)器”的文件;4.編輯源程序->調(diào)試;(1)定義頭文件和常量,聲明兩個(gè) SOCKET對象,初始化 SOCKET環(huán)境;(2)創(chuàng)建用于監(jiān)聽的SOCKET環(huán)境;(3)設(shè)置服務(wù)器 SOCKET的地址,并綁定 socketserver 到本地地址,在socketserver 上進(jìn)行監(jiān)聽,而后調(diào)用 accept()函數(shù)等待來自客戶端的連接請求; (4)在服務(wù)器與客戶機(jī)之間發(fā)送和接收數(shù)據(jù); (5)當(dāng)服務(wù)器程序接收到來自客戶端的“ quit”字符串后,將退出循環(huán)并釋放占用的資源;5.在組建選項(xiàng)中點(diǎn)擊執(zhí)行【服務(wù)器 .exe】(或者Ctrl+F5)執(zhí)行程序;6.運(yùn)行服務(wù)器查看服務(wù)器是否處于監(jiān)聽狀態(tài)。7.再次打開Visualc++6.0編程環(huán)境;8.點(diǎn)擊文件->新建、選擇建立新的工程;選擇Win32ConsoleApplication選項(xiàng)建立工程名為“客戶端”的一個(gè)空工程;精彩文檔實(shí)用標(biāo)準(zhǔn)文案9.繼續(xù)點(diǎn)擊文件->新建、選擇建立新的文件; 選擇C++SourceFile 選項(xiàng)建立在“客戶端”工程下的名為“客戶端”的文件;10.編輯源程序->調(diào)試;(1)在主程序中定義頭文件和常量并聲明變量,初始化 socket 環(huán)境并創(chuàng)建用于通信的 socket;(2)設(shè)置socket 地址并連接到服務(wù)器;(3)在服務(wù)器與客戶機(jī)之間發(fā)送和接收數(shù)據(jù); (4)當(dāng)程序退出 while 循環(huán)時(shí)將釋放占用的資源;在組建選項(xiàng)中點(diǎn)擊執(zhí)行【服務(wù)器.exe】(或者Ctrl+F5)執(zhí)行程序;12. 運(yùn)行服務(wù)器程序后再次運(yùn)行客戶端程序在客戶端的命令窗口中執(zhí)行 netstat-nao. 查看客戶端程序的狀態(tài)。實(shí)驗(yàn)結(jié)果:1.實(shí)現(xiàn)了在服務(wù)器與客戶端之間發(fā)送和接受數(shù)據(jù)。2.運(yùn)行服務(wù)器后,服務(wù)器處于監(jiān)聽狀態(tài)實(shí)現(xiàn)了接受來自客戶端的請求。4.實(shí)現(xiàn)模擬 C/S模型的通信方式,服務(wù)器端負(fù)責(zé)信息的接收, 并能夠返回給客戶端相應(yīng)的消息;客戶機(jī)負(fù)責(zé)向服務(wù)器發(fā)送信息。疑難小結(jié):通過本次試驗(yàn),了解了 socketb 編程的一些基礎(chǔ)知識,學(xué)習(xí)到了用 socket 編寫 服務(wù)器應(yīng)精彩文檔實(shí)用標(biāo)準(zhǔn)文案用程序。學(xué)習(xí)到了設(shè)置服務(wù)器 socket 地址,用socket 編寫客戶端應(yīng)用程序,以及如何接受來自客戶端的請求。從而使我對 TCPSocket 服務(wù)器應(yīng)用程序有了進(jìn)一步的了解,通過動手實(shí)現(xiàn)其 TCPSocket 服務(wù)器在TCP端口9990上進(jìn)行監(jiān)聽,實(shí)現(xiàn) CPSocket 客戶端自動連接到指定服務(wù)器的 TCP端口9990,然后提示用戶輸入向服務(wù)器發(fā)送的字符串, 更加深刻的理解了 TCPSocket 服務(wù)器與客戶端的特點(diǎn)。同時(shí),在實(shí)驗(yàn)過程中,回顧書本上的理論知識,鞏固了我的知識。主要算法和程序清單:服務(wù)器:#include<WINSOCK.H>#include<iostream>#pragmacomment(lib,"WS2_32.lib")#defineBUF_SIZE64intmain(intargc,TCHAR*argv[]){WSADATAwsd;SOCKETsServer;SOCKETsClient;intretVal;charbuf[BUF_SIZE];if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)精彩文檔實(shí)用標(biāo)準(zhǔn)文案{printf("WSAStartupfailed!\n");return1;}sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET==sServer){printf("socketfailed!\n");WSACleanup();return-1;}SOCKADDR_INaddrServ;addrServ.sin_family=AF_INET;addrServ.sin_port=htons(9990);retVal = bind(sServer,(const structsockaddr*)&addrServ,sizeof(SOCKADDR_IN));if(SOCKET_ERROR==retVal){printf("bindfailed!\n");closesocket(sServer);WSACleanup();精彩文檔實(shí)用標(biāo)準(zhǔn)文案return-1;}retVal=listen(sServer,1);if(SOCKET_ERROR==retVal){printf("listenfailed!\n");closesocket(sServer);WSACleanup();return-1;}printf("TCPServerstart...\n");sockaddr_inaddrClient;intaddrClientlen=sizeof(addrClient);sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);if(INVALID_SOCKET==sClient){printf("acceptfailed!\n");closesocket(sServer);WSACleanup();return-1;}while(true)精彩文檔實(shí)用標(biāo)準(zhǔn)文案{ZeroMemory(buf,BUF_SIZE);retVal=recv(sClient,buf,BUFSIZ,0);if(SOCKET_ERROR==retVal){printf("recvfailed!\n");closesocket(sServer);closesocket(sClient);WSACleanup();return-1;}SYSTEMTIMEst;GetLocalTime(&st);charsDateTime[30];sprintf(sDateTime,"%4d-%2d-%2d%2d%:2d:%2d",st.wYear,st.wMonth,st.wHour,st.wMinute,st.wSecond);printf("%s,Recv From Client[%s:%d]:%s\n",sDateTime,inet_ntoa(addrClient.sin_addr),addrClient.sin_port,buf);if(strcmp(buf,"quit")==0){retVal=send(sClient,"quit",strlen("quit"),0);精彩文檔實(shí)用標(biāo)準(zhǔn)文案break;}else{charmsg[BUF_SIZE];sprintf(msg,"Messagereceived-%s",buf);retVal=send(sClient,msg,strlen(msg),0);if(SOCKET_ERROR==retVal){printf("sendfailed!\n");closesocket(sServer);closesocket(sClient);WSACleanup();return-1;}}}closesocket(sServer);closesocket(sClient);WSACleanup();system("pause");return0;精彩文檔實(shí)用標(biāo)準(zhǔn)文案}客戶端:#include<WinSOCK2.H>#include<string>#include<iostream>#pragmacomment(lib,"WS2_32.lib")#defineBUF_SIZE64intmain(intargc,TCHAR*argv[]){WSADATAwsd;SOCKETsHost;SOCKADDR_INservAddr;charbuf[BUF_SIZE];intretVal;if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){printf("WSAStartupfailed!\n");return1;}sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);精彩文檔實(shí)用標(biāo)準(zhǔn)文案if(INVALID_SOCKET==sHost){printf("socketfailed!\n");WSACleanup();return-1;servAddr.sin_family=AF_INET;servAddr.sin_port=htons(9990);intsServerAddlen=sizeof(servAddr);}retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));if(SOCKET_ERROR==retVal){printf("connectfailed!\n");closesocket(sHost);WSACleanup();return-1;}while(true){printf("Pleaseinputastringtosend:");std::stringstr;精彩文檔實(shí)用標(biāo)準(zhǔn)文案std::getline(std::cin,str);ZeroMemory(buf,BUF_SIZE);strcpy(buf,str.c_str());retVal=send(sHost,buf,strlen(buf),0);if(SOCKET_ERROR==retVal){printf("sendfailed!\n");c

溫馨提示

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

評論

0/150

提交評論