写一个C++ TCPIP通讯程序
时间: 2023-12-27 08:54:36 浏览: 36
以下是一个简单的 C++ TCP/IP 通讯程序,使用了 Winsock 库:
```
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
// 初始化 Winsock 库
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "WSAStartup failed with error: " << WSAGetLastError() << std::endl;
return 1;
}
// 创建套接字
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (serverSocket == INVALID_SOCKET) {
std::cerr << "socket failed with error: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
// 绑定套接字到本地 IP 和端口
sockaddr_in serverAddress = {0};
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddress.sin_port = htons(12345);
if (bind(serverSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {
std::cerr << "bind failed with error: " << WSAGetLastError() << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
// 监听客户端连接请求
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR) {
std::cerr << "listen failed with error: " << WSAGetLastError() << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
// 等待客户端连接
std::cout << "Waiting for client connection..." << std::endl;
SOCKET clientSocket = accept(serverSocket, NULL, NULL);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "accept failed with error: " << WSAGetLastError() << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
std::cout << "Client connected." << std::endl;
// 接收客户端数据
char buffer[1024];
int recvSize = recv(clientSocket, buffer, sizeof(buffer), 0);
if (recvSize > 0) {
std::cout << "Received data from client: " << buffer << std::endl;
} else if (recvSize == 0) {
std::cout << "Client disconnected." << std::endl;
} else {
std::cerr << "recv failed with error: " << WSAGetLastError() << std::endl;
}
// 发送数据到客户端
const char* sendData = "Hello, client!";
int sendSize = send(clientSocket, sendData, strlen(sendData), 0);
if (sendSize == SOCKET_ERROR) {
std::cerr << "send failed with error: " << WSAGetLastError() << std::endl;
}
// 关闭套接字
closesocket(clientSocket);
closesocket(serverSocket);
// 清理 Winsock 库
WSACleanup();
return 0;
}
```
该程序创建了一个 TCP/IP 服务器,等待客户端连接,然后接收客户端发送的数据,并向客户端发送一个简单的字符串。请注意,该程序仅作为示例,实际应用程序需要进行更多错误检查和处理。