Socket A(local_address);

     void enviar(sockaddr_in remote_address, std::atomic<bool>& quit){
        std::string message_text;
        Message message;
        while(!quit){
           std::getline(std::cin, message_text);
           if (message_text != "/quit"){
               memset(message.text, 0, 1024);
               message_text.copy(message.text, sizeof(message.text) - 1, 0);
               A.send_to(message, remote_address);
           }
           else {
               quit = true;
           }
        }
    }

    void recibir(sockaddr_in local_address, std::atomic<bool>& quit){
        Message messager;
        while(!quit){
            A.receive_from(messager, local_address);
        }
    }

    int main(void){
        std::atomic<bool> quit(false);
        sockaddr_in remote_address = make_ip_address("127.0.0.1",6000);

        std::thread hilorec(&recibir,local_address, std::ref(quit));
        std::thread hiloenv(&enviar,remote_address, std::ref(quit));

        hiloenv.join();
        hilorec.join();
    }

你好!我正在尝试使用套接字进行简单的聊天。我希望程序在写“/quit”时完成。我正在尝试使用名为quit的原子bool变量进行此操作。问题是当我写“/quit”时,quit将为“true”,并且hiloenv线程将完成,但是由于recvfrom()函数,接收消息的hilorec将被阻塞,直到我收到消息为止。我该如何解决?

对不起,我的英语,谢谢!

最佳答案

关闭 socket 以进行输入。这将导致recvfrom()返回零,就像对等方已关闭连接一样,这将导致该线程退出。

关于c++ - C++-套接字和多线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34213767/

10-12 00:52