• windows socket 数据交互


    client

    //ip地址 端口
    SOCKET init(const char *IP, u_short port) {
        WSADATA wd;
        int ret = WSAStartup(MAKEWORD(2, 2), &wd);
        if (ret != 0) {
            cout << "WSAStartup error ..." << endl;
            return INVALID_SOCKET;
        }
        cout << "WSAStartup success ..." << endl;
    
        //创建套接字
        SOCKET skt = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (skt == SOCKET_ERROR) {
            cout << "socket error ..." << endl;
            return INVALID_SOCKET;
        }
        cout << "socket success ..." << endl;
    
        //服务端信息
        sockaddr_in addrServ;
        addrServ.sin_family = AF_INET;//IPV4协议
        addrServ.sin_port = htons(port);//端口
        addrServ.sin_addr.s_addr = inet_addr(IP);//IP地址
    
        //连接服务器
        if (connect(skt, (sockaddr *)&addrServ, sizeof(addrServ)) == SOCKET_ERROR) {
            cout << "connect error ..." << endl;
            return -1;
        }
        cout << "connect success ..." << endl;
    
        return skt;
    }
    
    void destroy(SOCKET skt) {
        closesocket(skt);
        WSACleanup();
    }
    
    void printMenu() {
        printf("*************************
    ");
        printf("*getName                *
    ");
        printf("*getAge                 *
    ");
        printf("*exit                   *
    ");
        printf("*************************
    ");
    }
    
    //socket客户端代码 客户端发送命令 接受服务器发送的消息
    int function06() {
        SOCKET sktCli = init("192.168.3.18", 8080);
        if (sktCli == INVALID_SOCKET) {
            return -1;
        }
    
        while (true) {
            printMenu();
            char szCmd[64] = {0};
            scanf("%s", szCmd);
            if (strcmp(szCmd, "exit") == 0) {
                printf("[client] exit ...
    ");
                break;
            }
            send(sktCli, szCmd, strlen(szCmd)+1, 0);
    
            char szRecv[1024] = {0};
            int ret = recv(sktCli, szRecv, sizeof(szRecv), 0);
            if (ret <= 0) {
                printf("[client] server exit ...
    ");
                break;
            }
            printf("[server] msg:%s
    ", szRecv);
        }
    
        destroy(sktCli);
        return 0;
    }

    server

    //初始化
    SOCKET init(const char *IP, u_short port) {
        WSADATA wd;
        int ret = WSAStartup(MAKEWORD(2, 2), &wd);
        if (ret != 0) {
            cout << "WSAStartup error ..." << endl;
            return -1;
        }
        cout << "WSAStartup success ..." << endl;
    
        //创建套接字
        SOCKET skt = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (skt == INVALID_SOCKET) {
            cout << "socket error ..." << endl;
            return -1;
        }
        cout << "socket success ..." << endl;
        //服务器信息
        sockaddr_in addrServ;
        addrServ.sin_family = AF_INET;
        addrServ.sin_port = htons(port);
        addrServ.sin_addr.s_addr = inet_addr(IP);
    
        //套接字绑定端口和ip
        if (bind(skt, (sockaddr *)&addrServ, sizeof(addrServ)) == SOCKET_ERROR) {
            cout << "bind error ..." << endl;
            return -1;
        }
        cout << "bind success ..." << endl;
    
        //开始监听套接字
        if (listen(skt, SOMAXCONN) == SOCKET_ERROR) {
            cout << "listen error ..." << endl;
            return -1;
        }
        cout << "listen success ..." << endl;
    
        return skt;
    }
    
    void destroy(SOCKET skt) {
        closesocket(skt);
        WSACleanup();
    }
    
    //接受客户端发送的命令 发送消息给客户端
    int function06() {
        SOCKET sktServ = init("0.0.0.0", 8080);
        if (sktServ == INVALID_SOCKET) {
            return -1;
        }
    
        SOCKET sktCli = accept(sktServ, NULL, NULL);
        while (true) {
            char szCmd[64] = {0};
            int ret = recv(sktCli, szCmd, sizeof(szCmd), 0);
            if (ret == SOCKET_ERROR) {
                printf("[server] recv error ...
    ");
                break;
            }
            if (ret == 0) {
                printf("[client] exit ...
    ");
                break;
            }
            printf("[client] %s
    ", szCmd);
            char szMsg[1024];
            if (strcmp(szCmd, "getName") == 0) {
                sprintf(szMsg, "%s", "爱白菜的小昆虫.");
            }
            else if (strcmp(szCmd, "getAge") == 0) {
                sprintf(szMsg, "%s", "1000.");
            }
            else {
                sprintf(szMsg, "%s", "???.");
            }
            send(sktCli, szMsg, strlen(szMsg)+1, 0);
        }
    
        destroy(sktServ);
        return 0;
    }
  • 相关阅读:
    查看IIS进程W3WP.exe对应网站进程池的PID
    【C#】结对项目开发-电梯调度仿真系统(Bata版)(党云龙、黄为)
    对于敏捷开发的理解!~~~~~~~~(黄为)
    【C】二维数组求最大子数组(基于一维数组的拓展)
    【C#】结对项目开发-电梯调度仿真系统(内部开发者版)(党云龙、黄为)
    【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
    【C#】结对项目开发-电梯调度需求分析(党云龙、黄为)
    C语言中求整型数组中的最大值!~~~~(黄为,刘佳琪)
    读入文本,找出出现频率最高的10个单词~~~~
    Emmet HTML/CSS代码快速编写神器
  • 原文地址:https://www.cnblogs.com/xuqiulin/p/11432890.html
Copyright © 2020-2023  润新知