// socket_client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <WinSock.h>
#pragma comment(lib, "wsock32.lib")
using namespace std;
#define NO_FLAGS_SET 0
#define PORT (u_short)44965
#define MAXBUFLEN 256
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA Data;
SOCKADDR_IN serverSockAddr;
SOCKADDR_IN clientSockAddr;
SOCKET serverSocket;
SOCKET clientSocket;
int addrLen = sizeof(SOCKADDR_IN);
int status;
int numrcv;
char buffer[MAXBUFLEN];
status = WSAStartup(MAKEWORD(1, 1), &Data);
if (status == SOCKET_ERROR)
{
cerr << "WSAStartup unsuccessful" << endl;
}
memset(&serverSockAddr, 0, sizeof(serverSockAddr));
serverSockAddr.sin_port = htons(PORT);
serverSockAddr.sin_family = AF_INET;
serverSockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET)
{
cerr << "socket unsuccessful" << endl;
}
status = bind(serverSocket, (LPSOCKADDR)&serverSockAddr, sizeof(serverSockAddr));
if (status == SOCKET_ERROR)
{
cerr << "bind unsuccessful" << endl;
}
status = listen(serverSocket, 1);
if (status == SOCKET_ERROR)
{
cerr << "listen unsuccessful" << endl;
}
clientSocket = accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen);
if(INVALID_SOCKET == clientSocket)
return 1;
cout << "Got the connection" << endl;
while(1)
{
numrcv = recv(clientSocket, buffer, MAXBUFLEN, 0);
if (numrcv == 0 || numrcv == SOCKET_ERROR)
{
cerr << "connection terminated" << endl;
closesocket(clientSocket);
if (status == SOCKET_ERROR)
{
cerr << "closesocket unsuccessful" << endl;
}
status = WSACleanup();
if (status == SOCKET_ERROR)
{
cerr << "WSACleanup unsuccessful" << endl;
}
return 1;
}
cout << buffer << endl;
}
return 0;
}