網路編程~C++實現區域網路通訊

來源:互聯網
上載者:User

標籤:區域網路   網路編程   c++   控制台   

  最近在學網路編程,學習了UDP的通訊原理。寫了基於UDP的服務端和用戶端,可以實現區域網路直接的通訊,可以實現一個服務端,對多個用戶端,實驗過兩個用戶端的,兩個用戶端可以接收到服務端的訊息,兩個用戶端的Message Service端也可以收到,兩個用戶端之間無法通訊。在接收方面,可能會出現接收混亂,因為是接收一句,發送一句。

 下面是服務端的代碼,是在控制台上實現的.

#include <iostream>#include <winsock2.h>using namespace std;#pragma comment(lib, "ws2_32.lib")//串連庫int main(){//建立通訊端,相當於控制代碼WORD Version;WSADATA wData;Version = MAKEWORD(2, 2);int n = WSAStartup(Version, &wData);if(n != 0)//檢查是否出錯,不過一般不會出錯的{cout << "Error!" << endl;return -1;}SOCKET soc = socket(AF_INET, SOCK_DGRAM, 0);if(INVALID_SOCKET == soc){cout << "Error!" << endl;return -1;}//建立連接埠sockaddr_in addSer;addSer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addSer.sin_family = AF_INET;addSer.sin_port = htons(8008);   //連接埠隨便,連接埠號碼的有效範圍是從0到65535。n = bind(soc, (sockaddr*)&addSer, sizeof(addSer));   //一般來說,大於49151的連接埠號碼都代表動態連接埠。綁定通訊端if(n == SOCKET_ERROR)    //出錯檢查,出錯,可能連接埠被佔用了,需要換一個{cout << "Error!" << endl;return -1;}char Send[256];        //發送字串char Rev[256];         //接收字串sockaddr_in addClient;  //接收方的地址資訊結構體int len = sizeof(sockaddr);while(1){int i = recvfrom(soc, Rev, 256, 0, (sockaddr*)&addClient, &len); //接受,阻塞在這,直到接收到資訊Rev[i] = '\0';if(Rev[0] == 'Q'){cout << "Char end!" << endl;break;}cout << inet_ntoa(addClient.sin_addr) << " say :" << Rev << endl;  //輸出發送方的IP,和資訊cout << "Please say something : ";gets(Send);sendto(soc, Send, strlen(Send), 0, (sockaddr *)&addClient, len);    //發送訊息}closesocket(soc);      //關閉通訊端WSACleanup();return 0;}

下面的是用戶端的代碼:

#include <iostream>#include <winsock2.h>using namespace std;#pragma comment(lib, "ws2_32.lib")int main(){//建立通訊端,跟服務端的差不多WORD Version;WSADATA wData;Version = MAKEWORD(2, 2);int n = WSAStartup(Version, &wData);if(n != 0){cout << "Error!" << endl;return -1;}SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);if(INVALID_SOCKET == sockClient){cout << "Error!" << endl;return -1;}sockaddr_in addser;//不同在這裡,需要服務端的IP,連接埠addser.sin_addr.S_un.S_addr = inet_addr("192.168.1.100");addser.sin_family = AF_INET;addser.sin_port = htons(8008);char Send[256];    //發送的訊息char Rev[256];     //接收的訊息int len = sizeof(sockaddr);while(1){cout << "Please say something : ";gets(Send);sendto(sockClient, Send, strlen(Send), 0, (sockaddr*)&addser, len);   //發送int i = recvfrom(sockClient, Rev, 256, 0, (sockaddr*)&addser, &len);  //結束,阻塞在這Rev[i] = '\0';//直到接收到if(i == -1)cout << "服務端未開啟!" << endl;else{if(Rev[0] == 'Q'){cout << "Char end!" << endl;break;}cout << inet_ntoa(addser.sin_addr) << " say : " << Rev << endl;       //輸出發送方的IP和訊息}}closesocket(sockClient);   //關閉通訊端WSACleanup();return 0;}

測試的執行個體就不貼出來了,區域網路的其他人說話不是很好!~~~

網路編程~C++實現區域網路通訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.