服务端:
为服务器创建套接字socket()
绑定套接字bind()
侦听套接字listen()
接受连接accept()
在服务器上接收和发送数据send()/recv()
断开服务器连接closesocket()
#include <WinSock2.h>
#include <Ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
int wsaResult = 0;
WORD wsaVersion = MAKEWORD(2, 2);
wsaResult = WSAStartup(wsaVersion, &wsaData);
if (wsaResult != NO_ERROR) {
wprintf(L"Error at WSAStartup()\n");
return -1;
}
SOCKET listenSocket = INVALID_SOCKET;
listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSocket == INVALID_SOCKET) {
wprintf(L"socket() failed with error:%u\n", WSAGetLastError());
WSACleanup();
return -1;
}
const char* ip = "127.0.0.1";
int port = 27015;
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
inet_pton(AF_INET, ip, &serverAddr.sin_addr);
serverAddr.sin_port = htons(port);
wsaResult = bind(listenSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (wsaResult == SOCKET_ERROR) {
wprintf(L"bind() faild with error:%u\n", WSAGetLastError());
closesocket(listenSocket);
WSACleanup();
return -1;
}
if (listen(listenSocket, 1) == SOCKET_ERROR) {
wprintf(L"listen failed with error: %u\n", WSAGetLastError());
closesocket(listenSocket);
WSACleanup();
return 1;
}
wprintf(L"The server is running at %hs:%d\n", ip, port);
sockaddr_in clientAddrAddr;
int clientAddrSize = sizeof(clientAddrAddr);
SOCKET clientAddrSocket = accept(listenSocket, (struct sockaddr*)&clientAddrAddr, &clientAddrSize);
if (clientAddrSocket != INVALID_SOCKET) {
char buff[512]{};
while (true) {
sprintf_s(buff, "");
if ((int)recv(clientAddrSocket, buff, sizeof(buff), 0) != SOCKET_ERROR) {
wprintf(L"GetMessage:%hs\n", buff);
if ((int)send(clientAddrSocket, buff, strlen(buff), 0) != SOCKET_ERROR) {
wprintf(L"Send:%hs\n", buff);
}
}
else {
break;
}
}
closesocket(clientAddrSocket);
}
closesocket(listenSocket);
WSACleanup();
return 0;
}
客户端:
为客户端创建套接字 socket()
连接到套接字 connect ()
在客户端上发送和接收数据send()/recv()
断开客户端的连接closesocket()
#include <WinSock2.h>
#include <Ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
int wsaResult = 0;
SOCKET listenSocket = INVALID_SOCKET;
wsaResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (wsaResult != NO_ERROR) {
wprintf(L"Error at WSAStartup()\n");
return -1;
}
listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSocket == INVALID_SOCKET) {
wprintf(L"socket() failed with error:%u\n", WSAGetLastError());
WSACleanup();
return -1;
}
sockaddr_in clientAddr;
clientAddr.sin_family = AF_INET;
const char* ip = "127.0.0.1";
int port = 27015;
inet_pton(AF_INET, ip, &clientAddr.sin_addr);
clientAddr.sin_port = htons(port);
wsaResult = connect(listenSocket, (SOCKADDR*)&clientAddr, sizeof(clientAddr));
if (wsaResult == SOCKET_ERROR) {
wprintf(L"connect() failed with error: %u\n", WSAGetLastError());
wsaResult = closesocket(listenSocket);
if (wsaResult == SOCKET_ERROR) {
wprintf(L"closesocket() failed with error: %u\n", WSAGetLastError());
}
closesocket(listenSocket);
WSACleanup();
return -1;
}
wprintf(L"Connected to server %hs:%d\n", ip, port);
char buff[512]{ "hello hello" };
while (true) {
if (send(listenSocket, buff, strlen(buff), 0) != SOCKET_ERROR) {
wprintf(L"Send:%hs\n", buff);
}
wsaResult = recv(listenSocket, buff, sizeof(buff), 0);
if (wsaResult != SOCKET_ERROR) {
wprintf(L"GetMessage:%hs\n", buff);
}
}
closesocket(listenSocket);
WSACleanup();
return 0;
}