// Server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "winsock2.h"
#include "ws2tcpip.h"
#include "iphlpapi.h"
#pragma comment(lib, "ws2_32.lib")
#define DEFAULT_PORT "27015"
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData ;
int iResult ;
SOCKET ListenSocket = INVALID_SOCKET ;
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData) ;
if (iResult != 0)
{
printf(_T("WSAStartup failed: %d\n"), iResult) ;
return 1 ;
}
struct addrinfo * result = NULL, * ptr = NULL, hints ;
char * ip = "127.0.0.1" ;
ZeroMemory(&hints, sizeof(hints)) ;
hints.ai_flags = AI_PASSIVE | AI_CANONNAME ;
hints.ai_family = AF_INET ;
hints.ai_socktype = SOCK_STREAM ;
hints.ai_protocol = IPPROTO_TCP ;
iResult = getaddrinfo(ip, DEFAULT_PORT, &hints, &result) ;
if (iResult != 0)
{
printf(_T("getaddrinfo failed: %d\n"), iResult) ;
WSACleanup() ;
return 1 ;
}
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol) ;
if (ListenSocket == INVALID_SOCKET)
{
printf(_T("Error at socket(): %d\n"), WSAGetLastError()) ;
freeaddrinfo(result) ;
WSACleanup() ;
return 1 ;
}
iResult = bind(ListenSocket, result->ai_addr, (int) result->ai_addrlen) ;
if (iResult == SOCKET_ERROR)
{
printf(_T("bind failed: %d\n"), WSAGetLastError()) ;
freeaddrinfo(result) ;
closesocket(ListenSocket) ;
WSACleanup() ;
return 1 ;
}
if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR)
{
printf(_T("Error at bind(): %d\n"), WSAGetLastError()) ;
closesocket(ListenSocket) ;
WSACleanup() ;
return 1 ;
}
SOCKET ClientSocket = INVALID_SOCKET ;
ClientSocket = accept(ListenSocket, NULL, NULL) ;
if (ClientSocket == INVALID_SOCKET)
{
printf(_T("accept failed: %d\n"), WSAGetLastError()) ;
closesocket(ListenSocket) ;
WSACleanup() ;
return 1 ;
}
#define DEFAULT_BUFLEN 512
char recvbuf[DEFAULT_BUFLEN] ;
int iResult, iSendResult ;
int recvbuflen = DEFAULT_BUFLEN ;
do
{
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0) ;
} while (iResult > 0);
return 0;
}