Windows TCP服务器程序设计涉及多个基础概念和技术要点。以下是对该问题的全面解答:
以下是一个简单的Windows TCP服务器程序示例:
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0) {
std::cerr << "WSAStartup failed: " << result << std::endl;
return 1;
}
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSocket == INVALID_SOCKET) {
std::cerr << "socket failed: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port = htons(27015);
result = bind(listenSocket, (SOCKADDR*)&service, sizeof(service));
if (result == SOCKET_ERROR) {
std::cerr << "bind failed: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
result = listen(listenSocket, SOMAXCONN);
if (result == SOCKET_ERROR) {
std::cerr << "listen failed: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
std::cout << "Server listening on port 27015..." << std::endl;
while (true) {
SOCKET clientSocket = accept(listenSocket, NULL, NULL);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "accept failed: " << WSAGetLastError() << std::endl;
continue;
}
char recvbuf[512];
int recvbuflen = 512;
result = recv(clientSocket, recvbuf, recvbuflen, 0);
if (result > 0) {
std::cout << "Bytes received: " << result << std::endl;
send(clientSocket, recvbuf, result, 0); // Echo back
} else if (result == 0) {
std::cout << "Connection closing..." << std::endl;
} else {
std::cerr << "recv failed: " << WSAGetLastError() << std::endl;
}
closesocket(clientSocket);
}
closesocket(listenSocket);
WSACleanup();
return 0;
}
netstat
命令检查端口状态。通过以上内容,您可以全面了解Windows TCP服务器程序设计的基础概念、优势、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云