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/