sotest.cpp

来自「windows S/C socket example.」· C++ 代码 · 共 81 行

CPP
81
字号
#include "afxmt.h"
#include "winsock2.h"
#pragma     comment(lib,"WS2_32.LIB")

int bufi;

class mserver{

private:
      SOCKET ssock,csock;
      sockaddr_in saddr,caddr;
      int len;
      char buf[4096];

public:
      mserver(){

      }
      mserver(int port,int maxclient){
          saddr.sin_family=AF_INET;
          saddr.sin_port=htons(port);
          saddr.sin_addr.s_addr=INADDR_ANY;
          ssock=socket(AF_INET,SOCK_STREAM,0);
          if(ssock==INVALID_SOCKET){
              printf("build socket error\n");
          }
          if(bind(ssock,(struct sockaddr*)&saddr,sizeof(saddr))==SOCKET_ERROR){
              printf("socket bind fail\n");
          }
          len=sizeof(caddr);
      }

      void close(){
          closesocket(ssock);
          closesocket(csock);
      }

      void beginlisten(){
          if(listen(ssock,10)==SOCKET_ERROR){
              printf("listen fail\n");
          }
      }

      void maccept(){
          sockaddr a;
          csock=accept(ssock,(struct sockaddr*)&caddr,&len);
          if(csock==INVALID_SOCKET){
              printf("accept fail : %d\n",WSAGetLastError());
            
          }
          printf("client from %s connected\n",inet_ntoa(caddr.sin_addr));
      }

      int receive(){
          memset(buf,0,4096);
          if(recv(csock,buf,4096,0)==SOCKET_ERROR){
              return 0;
          }
          printf("message received : %s\n",buf);
          send(csock,buf,4096,0);
          return 1;
      }
    
};

int main()
{
      WSADATA wsaData;
      if (WSAStartup(MAKEWORD(2,1),&wsaData)){
           printf("Winsock initializing fail\n");
           WSACleanup();
           return 0;
      }
      mserver s(12345,10);
      s.beginlisten();
      s.maccept();
      while(s.receive());
      s.close();
      WSACleanup();
      return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?