#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32")
using namespace std;
int main(int argc, char* argv[])
{
//init socket
WSADATA stData = { 0 };
WORD dVer = MAKEWORD(2, 2);
if(WSAStartup(dVer, &stData))
{
cout << "init fail" << endl;
return -1;
}
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET)
{
cout << "socket fail" << endl;
return -1;
}
sockaddr_in stAddr = { 0 };
stAddr.sin_family = AF_INET;
stAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
stAddr.sin_port = htons(9999);
if (bind(sock, (sockaddr*)&stAddr, sizeof(sockaddr_in))==SOCKET_ERROR)
{
cout << "bind fail" << endl;
return -1;
}
if (listen(sock, SOMAXCONN) == SOCKET_ERROR)
{
cout << "listen fail" << endl;
return -1;
}
sockaddr_in stClient = { 0 };
int nLen = sizeof(sockaddr_in);
SOCKET sClient = accept(sock, (sockaddr*)&stClient, &nLen);
if (sClient == SOCKET_ERROR)
{
cout << "accept fail" << endl;
return -1;
}
cout << "client address:"
<< inet_ntoa(stClient.sin_addr)
<< endl;
cout << "client port:"
<< ntohs(stClient.sin_port)
<< endl;
int nRecv = NULL;
char szBuf[1024] = { 0 };
while (1)
{
nRecv = recv(sClient, szBuf, 1024, NULL);
if (!nRecv || nRecv == SOCKET_ERROR)
break;
cout << "recv buf: " << szBuf << endl;
}
//clear socket
closesocket(sClient);
closesocket(sock);
WSACleanup();
system("pause");
return 0;
}
客户连接服务器:
客户发送消息到服务器:
客户关闭与服务器的连接: