zoukankan      html  css  js  c++  java
  • c++ Socket传输

    服务端-监听接收

    #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
    ");
              }
              if(bind(ssock,(struct sockaddr*)&saddr,sizeof(saddr))==SOCKET_ERROR){
                  printf("socket bind fail
    ");
              }
              len=sizeof(caddr);
          }
    
          void close(){
              closesocket(ssock);
              closesocket(csock);
          }
    
          void beginlisten(){
              if(listen(ssock,10)==SOCKET_ERROR){
                  printf("listen fail
    ");
              }
          }
    
          void maccept(){
              sockaddr a;
              csock=accept(ssock,(struct sockaddr*)&caddr,&len);
              if(csock==INVALID_SOCKET){
                  printf("accept fail : %d
    ",WSAGetLastError());
               
              }
              printf("client from %s connected
    ",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
    ",buf);
              send(csock,buf,4096,0);
              return 1;
          }
       
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        WSADATA wsaData;
          if (WSAStartup(MAKEWORD(2,1),&wsaData)){
               printf("Winsock initializing fail
    ");
               WSACleanup();
               return 0;
          }
          mserver server(12345,10);
          server.beginlisten();
          server.maccept();
          while(server.receive());
          server.close();
          WSACleanup();
          return 0;
    
    }

    客户端发送数据

    #include "winsock2.h"
    #pragma     comment(lib,"WS2_32.LIB")
    
    
    class mclient{
    private:
          SOCKET sock;
          sockaddr_in saddr;
          int len;
          char buf[4096];
    public:
          mclient(){
              sock=socket(AF_INET,SOCK_STREAM,0);
              len=sizeof(saddr);
          }
    
          bool mconnect(char* addr,int port){
              saddr.sin_family=AF_INET;
              saddr.sin_port=htons(port);
              saddr.sin_addr.s_addr=inet_addr(addr);
              if(connect(sock,(struct sockaddr*)&saddr,len)==SOCKET_ERROR){
                  printf("connect fail : %d",WSAGetLastError());
                  return false;
              }
              return true;
          }
    
          void close(){
              closesocket(sock);
          }
    
          void msend(char* mes){
              send(sock,mes,strlen(mes),0);
          }
    
          bool receive(){
              memset(buf,0,4096);
              if(recv(sock,buf,4096,0)==SOCKET_ERROR){
                  return false;
              }
              else{
                  printf("received from server : %s
    ",buf);
                  return true;
              }
          }
    
    };
    
    
    int main()
    {
        while(1){
          WSADATA wsaData;
          if (WSAStartup(MAKEWORD(2,1),&wsaData)){
               printf("Winsock initializing fail
    ");
               WSACleanup();
               return 0;
          }
          mclient a;
          if(!a.mconnect("127.0.0.1",12345)){
              return 0;
          }
          char buf[1024];
          while(scanf("%s",buf)){
              if(strcmp(buf,"quit")==0){
                  break;
              }
              a.msend(buf);
              a.receive();
    
          }
          a.close();
          WSACleanup();
        }
          return 0
    }

     ps:如果不在同一函数中声明client与server,将会报错。我用了全局变量后在用了函数声明赋值。

  • 相关阅读:
    mysql 行号
    java 异常链
    springsecurity密码加密
    java 四舍五入
    ArrayList的使用及原理
    java 匿名内部类
    java 克隆
    logback的配置
    信号量 Semaphore
    障碍器 CyclicBarrier
  • 原文地址:https://www.cnblogs.com/bkycjj/p/3835619.html
Copyright © 2011-2022 走看看