简单的C或C++ TCP服务器和客户端示例通常包括以下几个步骤:
以下是一个简单的C++ TCP服务器和客户端示例:
服务器端:
#include<iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include<thread>
#include<vector>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
void handleClient(SOCKET clientSocket) {
char buf[1024];
int len;
while (true) {
len = recv(clientSocket, buf, 1024, 0);
if (len <= 0) break;
send(clientSocket, buf, len, 0);
}
closesocket(clientSocket);
}
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != NO_ERROR) {
cout << "WSAStartup failed: " << iResult<< endl;
return 1;
}
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSocket == INVALID_SOCKET) {
cout << "socket failed: " << WSAGetLastError()<< endl;
WSACleanup();
return 1;
}
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port = htons(8888);
if (bind(listenSocket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) {
cout << "bind failed: " << WSAGetLastError()<< endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
if (listen(listenSocket, 5) == SOCKET_ERROR) {
cout << "listen failed: " << WSAGetLastError()<< endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
vector<thread> threads;
while (true) {
SOCKET clientSocket = accept(listenSocket, NULL, NULL);
if (clientSocket == INVALID_SOCKET) {
cout << "accept failed: " << WSAGetLastError()<< endl;
break;
}
threads.push_back(thread(handleClient, clientSocket));
}
for (auto& t : threads) {
t.join();
}
closesocket(listenSocket);
WSACleanup();
return 0;
}
客户端:
#include<iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != NO_ERROR) {
cout << "WSAStartup failed: " << iResult<< endl;
return 1;
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (clientSocket == INVALID_SOCKET) {
cout << "socket failed: " << WSAGetLastError()<< endl;
WSACleanup();
return 1;
}
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(8888);
if (connect(clientSocket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) {
cout << "connect failed: " << WSAGetLastError()<< endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
char buf[1024];
int len;
while (true) {
cin.getline(buf, 1024);
if (strcmp(buf, "exit") == 0) break;
len = send(clientSocket, buf, strlen(buf), 0);
if (len <= 0) break;
len = recv(clientSocket, buf, 1024, 0);
if (len <= 0) break;
cout << "Server: "<< buf<< endl;
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
这个示例展示了如何创建一个简单的C++ TCP服务器和客户端,它们可以互相发送和接收消息。请注意,这个示例仅适用于Windows操作系统,并且需要安装Winsock库。
领取专属 10元无门槛券
手把手带您无忧上云