Copy
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
std::cout << "WSAStartup failed: " << iResult << std::endl;
return 1;
}
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSocket == INVALID_SOCKET) {
std::cout << "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);
iResult = bind(listenSocket, (SOCKADDR*)&service, sizeof(service));
if (iResult == SOCKET_ERROR) {
std::cout << "bind failed: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
if (listen(listenSocket, SOMAXCONN) == SOCKET_ERROR) {
std::cout << "listen failed: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
SOCKET clientSocket = accept(listenSocket, NULL, NULL);
if (clientSocket == INVALID_SOCKET) {
std::cout << "accept failed: " << WSAGetLastError() << std::endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
char recvbuf[512];
int recvbuflen = 512;
iResult = recv(clientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
std::cout << "Bytes received: " << iResult << std::endl;
std::cout << "Received message: " << recvbuf << std::endl;
} else if (iResult == 0) {
std::cout << "Connection closing..." << std::endl;
} else {
std::cout << "recv failed: " << WSAGetLastError() << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
iResult = shutdown(clientSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
std::cout << "shutdown failed: " << WSAGetLastError() << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
TCP客户端程序:
c++
Copy
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
std::cout << "WSAStartup failed: " << iResult << std::endl;
return 1;
}
SOCKET connectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (connectSocket == INVALID_SOCKET) {
std::cout << "socket failed: " << WSAGetLastError() << std::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(27015);
iResult = connect(connectSocket, (SOCKADDR*)&service, sizeof(service));
if (iResult == SOCKET_ERROR) {
std::cout << "connect failed: " << WSAGetLastError() << std::endl;
closesocket(connectSocket);
WSACleanup();
return 1;
}
const char* sendbuf = "Hello, TCP server!";
int sendbuflen = (int)strlen(sendbuf);
iResult = send(connectSocket, sendbuf, sendbuflen, 0);
if (iResult == SOCKET_ERROR) {
std::cout << "send failed: " << WSAGetLastError() << std::endl;
closesocket(connectSocket);
WSACleanup();
return 1;
}
std::cout << "Bytes sent: " << iResult << std::endl;
iResult = shutdown(connectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
std::cout << "shutdown failed: " << WSAGetLastError() << std::endl;
closesocket(connectSocket);
WSACleanup();
return 1;
}
char recvbuf[512];
int recvbuflen = 512;
iResult = recv(connectSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
std::cout << "Bytes received: " << iResult << std::endl;
std::cout << "Received message: " << recvbuf << std::endl;
} else if (iResult == 0) {
std::cout << "Connection closed." << std::endl;
} else {
std::cout << "recv failed: " << WSAGetLastError() << std::endl;
closesocket(connectSocket);
WSACleanup();
return 1;
}
closesocket(connectSocket);
WSACleanup();
return 0;
}