一个简单的Windows TCP服务器实现
初始化
WSADATA wsaData;
SOCKET serverSocket, clientSocket;
struct sockaddr_in serverAddr = { 0x00 };
struct sockaddr_in clientAddr = { 0x00 };
int clientAddrLen = sizeof(clientAddr);
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed.\n");
}
创建socket
if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
printf("Socket failed.\n");
WSACleanup();
}
IP及端口号配置
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(9988);
if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
printf("Bind failed.\n")
closesocket(serverSocket);
WSACleanup();
}
监听客户端连接
if (listen(serverSocket, 5) == SOCKET_ERROR) {
printf("Listen failed.\n");
closesocket(serverSocket);
WSACleanup();
}
接受客户端连接
if ((clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen)) == INVALID_SOCKET) {
printf("Accept failed.\n");
closesocket(serverSocket);
WSACleanup();
}
接收
int bytesReceived = recv(clientSocket, (char*)(_sRxBuffer + _sRxLenght), BUFFER_SIZE, 0);
发送
int txPacketlenght = send(socket, (const char*)_sTxBuffer, txPacketlenght, 0);
回收socket资源
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();