首先要链接库文件:Property->Linker->Input->Additional Dependencies中加入ws2_32.lib
或者代码里加入:#pragma comment(lib, "Ws2_32.lib")
先运行服务器端后运行客户端
// 服务器端 #include<iostream> #include<WinSock2.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { return 0; } SOCKET sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN addrServer; addrServer.sin_family = AF_INET; addrServer.sin_port = htons(6000); addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); bind(sockServer, (const sockaddr*)&addrServer, sizeof(addrServer)); listen(sockServer, 5); SOCKADDR_IN addrAccept; int nAddrLen = sizeof(addrAccept); SOCKET sockAccept = accept(sockServer, (sockaddr*)&addrAccept, &nAddrLen); //最后一个参数容易出错 // 接受客户端数据 char szRecvBuf[124] = {0}; recv(sockAccept, szRecvBuf, 124, 0); cout << szRecvBuf << endl; // 将数据发往客户端 char szSendBuf[] = "hello, client!"; int nCount = sizeof(szSendBuf); send(sockAccept, szSendBuf, nCount + 1, 0); closesocket(sockAccept); closesocket(sockServer); WSACleanup(); cin.get(); return 0; }
// 客户端 #include <iostream> #include <WinSock2.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { return 0; } SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN addrConnect; addrConnect.sin_family = AF_INET; addrConnect.sin_port = htons(6000); addrConnect.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); connect(sockClient, (const sockaddr*)&addrConnect, sizeof(addrConnect)); // 发送数据到服务器端 char szSendBuf[] = "hello, server!"; int nCount = sizeof(szSendBuf); send(sockClient, szSendBuf, nCount + 1, 0); // 接受服务器端发送过来的数据 char szRecvBuf[124] = {0}; recv(sockClient, szRecvBuf, 124, 0); cout << szRecvBuf << endl; closesocket(sockClient); WSACleanup(); cin.get(); return 0; }