• 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,将会报错。我用了全局变量后在用了函数声明赋值。

  • 相关阅读:
    软件项目技术点(2)——Canvas之坐标系转换
    软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale
    用html5的canvas和JavaScript创建一个绘图程序
    javascript学习之BOM
    HTML5 之拖放(drag与drop)
    fluent-ffmpeg 常用函数
    ffmpeg用法及如何使用fluent-ffmpeg
    解决js动态改变dom元素属性后页面及时渲染问题
    软件项目技术点(8)—— canvas调用drawImage绘制图片
    Oracle数据库rownum用法集锦
  • 原文地址:https://www.cnblogs.com/bkycjj/p/3835619.html
Copyright © 2020-2023  润新知