vc++ 简单阻塞式TCP/IP服务器

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值