首先要链接库文件: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;
}