VC++ Socket编程 简单的Tcp/ip服务器

 VC++ Socket编程 简单的Tcp/ip服务器


 
#include <windows.h>
#include <iostream.h>
#include <winsock.h>

#define NO_FLAGS_SET 0

#define PORT (u_short) 44965
#define MAXBUFLEN 256

INT main(VOID)
{
  WSADATA Data;
  SOCKADDR_IN serverSockAddr;
  SOCKADDR_IN clientSockAddr;
  SOCKET serverSocket;
  SOCKET clientSocket;
  int addrLen=sizeof(SOCKADDR_IN);
  int status;
  int numrcv;
  char buffer[MAXBUFLEN];

  /* initialize the Windows Socket DLL */
  status=WSAStartup(MAKEWORD(1, 1), &Data);
  if (status != 0)
    cerr << "ERROR: WSAStartup unsuccessful"
      << endl;

  /* zero the sockaddr_in structure */
  memset(&serverSockAddr, 0,
    sizeof(serverSockAddr));
  /* specify the port portion of the address */
  serverSockAddr.sin_port=htons(PORT);
  /* specify the address family as Internet */
  serverSockAddr.sin_family=AF_INET;
  /* specify that the address does not matter */
  serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY);

  /* create a socket */  serverSocket=socket(AF_INET, SOCK_STREAM, 0);
  if (serverSocket == INVALID_SOCKET)
    cerr << "ERROR: socket unsuccessful" << endl;

  /* associate the socket with the address */
  status=bind(serverSocket,
    (LPSOCKADDR) &serverSockAddr,
    sizeof(serverSockAddr));
  if (status == SOCKET_ERROR)
    cerr << "ERROR: bind unsuccessful" << endl;

  /* allow the socket to take connections */
  status=listen(serverSocket, 1);
  if (status == SOCKET_ERROR)
    cerr << "ERROR: listen unsuccessful" << endl;

  /* accept the connection request when one
     is received */
  clientSocket=accept(serverSocket,
    (LPSOCKADDR) &clientSockAddr,
    &addrLen);

  cout << "Got the connection..." << endl;

  while(1)
  {
    numrcv=recv(clientSocket, buffer,
      MAXBUFLEN, NO_FLAGS_SET);
    if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
    {
      cout << "Connection terminated." << endl;
      status=closesocket(clientSocket);
      if (status == SOCKET_ERROR)
        cerr << "ERROR: closesocket unsuccessful"
          << endl;
      status=WSACleanup();
      if (status == SOCKET_ERROR)
        cerr << "ERROR: WSACleanup unsuccessful"
          << endl;
      return(1);
    }
    cout << buffer << endl;
  } /* while */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值