Windows網(wǎng)絡編程(一)——WinSock編程.doc_第1頁
Windows網(wǎng)絡編程(一)——WinSock編程.doc_第2頁
Windows網(wǎng)絡編程(一)——WinSock編程.doc_第3頁
Windows網(wǎng)絡編程(一)——WinSock編程.doc_第4頁
Windows網(wǎng)絡編程(一)——WinSock編程.doc_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

WinSock編程實驗報告班 級:10網(wǎng)工三班 學生姓名:謝昊天 學號:1215134046實驗目的和要求:實驗目的1、了解WinsockAPI2、深刻領會Winsock編程原理3、學會使用Winsock創(chuàng)建簡單的TCP服務器以及客戶機實驗要求1. 整個通信過程參照TCP/IP通信方式;2. 實現(xiàn)整個TCP/IP通信的基本模型;3. 完成基本的界面設計和事件響應;4. 服務器可以同時和多個用戶對話,可以同時恢復多個用戶;5. 保證信息傳輸?shù)臅惩ǎ?. 服務器可以依次和多個用戶對話。實驗內容與分析設計:編寫一個基于某種I/O方法的TCP服務器和TCP客戶機:能夠實現(xiàn)模擬C/S模型的通信方式,服務器端負責信息的接收,并能夠返回給客戶端相應的消息;客戶機負責向服務器發(fā)送信息。注:可以模擬教材95頁面向連接的TCP Socket應用程序編程實例。實驗步驟與調試過程:1.打開Visual c+ 6.0編程環(huán)境;2.點擊文件-新建、選擇建立新的工程;選擇Win32 Console Application選項建立工程名為“服務器”的一個空工程;3. 繼續(xù)點擊文件-新建、選擇建立新的文件;選擇C+ Source File選項建立在“服務器”工程下的名為“服務器”的文件;4.編輯源程序-調試;(1)定義頭文件和常量,聲明兩個SOCKET對象,初始化SOCKET環(huán)境;(2)創(chuàng)建用于監(jiān)聽的SOCKET環(huán)境;(3)設置服務器SOCKET的地址,并綁定socket server 到本地地址,在socket server 上進行監(jiān)聽,而后調用accept()函數(shù)等待來自客戶端的連接請求;(4)在服務器與客戶機之間發(fā)送和接收數(shù)據(jù);(5)當服務器程序接收到來自客戶端的“quit”字符串后,將退出循環(huán)并釋放占用的資源;5.在組建選項中點擊執(zhí)行【服務器.exe】(或者Ctrl+F5)執(zhí)行程序;6.運行服務器查看服務器是否處于監(jiān)聽狀態(tài)。7.再次打開Visual c+ 6.0編程環(huán)境;8.點擊文件-新建、選擇建立新的工程;選擇Win32 Console Application選項建立工程名為“客戶端”的一個空工程;9. 繼續(xù)點擊文件-新建、選擇建立新的文件;選擇C+ Source File選項建立在“客戶端”工程下的名為“客戶端”的文件;10.編輯源程序-調試;(1)在主程序中定義頭文件和常量并聲明變量,初始化socket 環(huán)境并創(chuàng)建用于通信的socket;(2)設置socket地址并連接到服務器;(3)在服務器與客戶機之間發(fā)送和接收數(shù)據(jù);(4)當程序退出while循環(huán)時將釋放占用的資源;11.在組建選項中點擊執(zhí)行【服務器.exe】(或者Ctrl+F5)執(zhí)行程序;12. 運行服務器程序后再次運行客戶端程序在客戶端的命令窗口中執(zhí)行netstat-nao.查看客戶端程序的狀態(tài)。實驗結果:1.實現(xiàn)了在服務器與客戶端之間發(fā)送和接受數(shù)據(jù)。2.運行服務器后,服務器處于監(jiān)聽狀態(tài)3. 實現(xiàn)了接受來自客戶端的請求。4.實現(xiàn)模擬C/S模型的通信方式,服務器端負責信息的接收,并能夠返回給客戶端相應的消息;客戶機負責向服務器發(fā)送信息。疑難小結:通過本次試驗,了解了socketb編程的一些基礎知識,學習到了用socket 編寫 服務器應用程序。學習到了設置服務器socket 地址,用socket 編寫客戶端應用程序,以及如何接受來自客戶端的請求。從而使我對TCP Socket服務器應用程序有了進一步的了解,通過動手實現(xiàn)其TCP Socket服務器在TCP端口9990上進行監(jiān)聽,實現(xiàn)CP Socket客戶端自動連接到指定服務器的TCP端口9990,然后提示用戶輸入向服務器發(fā)送的字符串,更加深刻的理解了TCP Socket服務器與客戶端的特點。同時,在實驗過程中,回顧書本上的理論知識,鞏固了我的知識。主要算法和程序清單:服務器:#include #include #pragma comment(lib,WS2_32.lib)#define BUF_SIZE 64int main(int argc, TCHAR* argv)WSADATA wsd;SOCKET sServer;SOCKET sClient;int retVal;char bufBUF_SIZE;if(WSAStartup(MAKEWORD(2,2),&wsd) !=0)printf(WSAStartup failed !n);return 1;sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET =sServer)printf(socket failed !n);WSACleanup();return -1;SOCKADDR_IN addrServ;addrServ.sin_family = AF_INET; addrServ.sin_port = htons(9990);addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);retVal = bind(sServer,(const struct sockaddr*)&addrServ,sizeof(SOCKADDR_IN);if(SOCKET_ERROR = retVal)printf(bind failed !n);closesocket(sServer);WSACleanup();return -1;retVal = listen(sServer,1);if(SOCKET_ERROR = retVal)printf(listen failed !n);closesocket(sServer);WSACleanup();return -1;printf(TCP Server start.n);sockaddr_in addrClient;int addrClientlen = sizeof(addrClient);sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);if(INVALID_SOCKET = sClient)printf(accept failed !n);closesocket(sServer);WSACleanup();return -1;while(true)ZeroMemory(buf,BUF_SIZE);retVal = recv(sClient,buf,BUFSIZ,0);if(SOCKET_ERROR = retVal)printf(recv failed !n);closesocket(sServer);closesocket(sClient);WSACleanup();return -1;SYSTEMTIME st;GetLocalTime(&st);char sDateTime30;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 :%sn,sDateTime,inet_ntoa(addrClient.sin_addr),addrClient.sin_port, buf);if(strcmp(buf,quit) = 0)retVal = send(sClient,quit,strlen(quit),0);break;elsechar msgBUF_SIZE;sprintf(msg,Message received - %s, buf);retVal = send(sClient, msg, strlen(msg),0);if(SOCKET_ERROR = retVal)printf(send failed !n);closesocket(sServer);closesocket(sClient);WSACleanup ();return -1;closesocket(sServer);closesocket(sClient);WSACleanup();system(pause);return 0;客戶端:#include #include #include #pragma comment(lib,WS2_32.lib)#define BUF_SIZE 64int main(int argc, TCHAR* argv)WSADATA wsd;SOCKET sHost;SOCKADDR_IN servAddr;char bufBUF_SIZE;int retVal;if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)printf (WSAStartup failed !n);return 1;sHost = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET = sHost)printf(socket failed !n);WSACleanup();return -1;servAddr.sin_family = AF_INET;servAddr.sin_addr.S_un.S_addr = inet_addr(192.168.5.205);servAddr.sin_port = htons(9990);int sServerAddlen = sizeof(servAddr);retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr);if(SOCKET_ERROR = retVal)printf(connect failed !n);closesocket(sHost);WSACleanup();return -1;while(true)printf(Please input a string to send: );std:string str;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(send

溫馨提示

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

評論

0/150

提交評論