C++ 簡單的 Tcp 實現[socket] 用戶端與用戶端通訊__C++

來源:互聯網
上載者:User

 

開發環境  Vs 2008  建立一個 win32 console  project

//  伺服器端代碼

// Server.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "winsock2.h" #pragma comment(lib, "ws2_32.lib") #include <iostream> using namespace std; int _tmain(int argc, char* argv[]) { const int BUF_SIZE = 64; WSADATA wsd; //WSADATA變數 SOCKET sServer; //伺服器通訊端 SOCKET sClient; //用戶端通訊端 SOCKADDR_IN addrServ;; //伺服器位址 char buf[BUF_SIZE]; //接收資料緩衝區 char sendBuf[BUF_SIZE];//返回給用戶端得資料 int retVal; //傳回值 //初始化套結字動態庫 if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) { cout << "WSAStartup failed!" << endl; return 1; } //建立通訊端 sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET == sServer) { cout << "socket failed!" << endl; WSACleanup();//釋放通訊端資源; return -1; } //伺服器通訊端地址 addrServ.sin_family = AF_INET; addrServ.sin_port = htons(4999); addrServ.sin_addr.s_addr = INADDR_ANY; //綁定通訊端 retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN)); if(SOCKET_ERROR == retVal) { cout << "bind failed!" << endl; closesocket(sServer); //關閉通訊端 WSACleanup(); //釋放通訊端資源; return -1; } //開始監聽 retVal = listen(sServer, 1); if(SOCKET_ERROR == retVal) { cout << "listen failed!" << endl; closesocket(sServer); //關閉通訊端 WSACleanup(); //釋放通訊端資源; return -1; } //接受用戶端請求 sockaddr_in addrClient; int addrClientlen = sizeof(addrClient); sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen); if(INVALID_SOCKET == sClient) { cout << "accept failed!" << endl; closesocket(sServer); //關閉通訊端 WSACleanup(); //釋放通訊端資源; return -1; } while(true){ //接收用戶端資料 ZeroMemory(buf, BUF_SIZE); retVal = recv(sClient, buf, BUF_SIZE, 0); if (SOCKET_ERROR == retVal) { cout << "recv failed!" << endl; closesocket(sServer); //關閉通訊端 closesocket(sClient); //關閉通訊端 WSACleanup(); //釋放通訊端資源; return -1; } if(buf[0] == '0') break; cout << "用戶端發送的資料: " << buf <<endl; cout << "向用戶端發送資料: " ; cin >> sendBuf; send(sClient, sendBuf, strlen(sendBuf), 0); } //退出 closesocket(sServer); //關閉通訊端 closesocket(sClient); //關閉通訊端 WSACleanup(); //釋放通訊端資源; return 0; } 

 

//  用戶端代碼

// Client.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "winsock2.h" #include <iostream> #pragma comment(lib, "ws2_32.lib") using namespace std; BOOL RecvLine(SOCKET s, char* buf); //讀取一行資料 int main(int argc, char* argv[]) { const int BUF_SIZE = 64; WSADATA wsd; //WSADATA變數 SOCKET sHost; //伺服器通訊端 SOCKADDR_IN servAddr; //伺服器位址 char buf[BUF_SIZE]; //接收資料緩衝區 char bufRecv[BUF_SIZE]; int retVal; //傳回值 //初始化套結字動態庫 if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) { cout << "WSAStartup failed!" << endl; return -1; } //建立通訊端 sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET == sHost) { cout << "socket failed!" << endl; WSACleanup();//釋放通訊端資源 return -1; } //設定伺服器位址 servAddr.sin_family =AF_INET; servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); servAddr.sin_port = htons((short)4999); int nServAddlen = sizeof(servAddr); //串連伺服器 retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr)); if(SOCKET_ERROR == retVal) { cout << "connect failed!" << endl; closesocket(sHost); //關閉通訊端 WSACleanup(); //釋放通訊端資源 return -1; } while(true){ //向伺服器發送資料 ZeroMemory(buf, BUF_SIZE); cout << " 向伺服器發送資料: "; cin >> buf; retVal = send(sHost, buf, strlen(buf), 0); if (SOCKET_ERROR == retVal) { cout << "send failed!" << endl; closesocket(sHost); //關閉通訊端 WSACleanup(); //釋放通訊端資源 return -1; } //RecvLine(sHost, bufRecv); recv(sHost, bufRecv,5 , 0); // 接收伺服器端的資料, 只接收5個字元 cout << endl <<"從伺服器接收資料:" << bufRecv; } //退出 closesocket(sHost); //關閉通訊端 WSACleanup(); //釋放通訊端資源 return 0; } 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.