#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;
}

客户连接服务器:简单的TCP服务器代码

客户发送消息到服务器:

简单的TCP服务器代码

客户关闭与服务器的连接:

简单的TCP服务器代码

 

相关文章: