【发布时间】:2017-05-23 00:13:25
【问题描述】:
我有一个通过 TCP 套接字连接到服务器的客户端程序,如下所示:
int main ( )
{
std::cout << "HunterChat client starting up" << std::endl;
std::string cmd;
std::string reply;
bool cont = true;
ClientSocket client_socket ( "localhost", PORT );
try {
while(cont) {
try {
std::cout << ">> ";
// std::getline(std::cin,cmd);
gets(cmd);
if(cmd.compare("logout") == 0) {
cont = false;
break;
}
client_socket << cmd;
client_socket >> reply;
std::cout << reply << std::endl;
}
catch ( SocketException& e) {
std::cout << "Exception was caught:" << e.description() << "\n";
}
}
}
catch ( SocketException& e ) {
std::cout << "Exception was caught:" << e.description() << "\n";
}
return 0;
}
ClientSocket 是一个自定义类,可以让我设置和使用 TCP 连接;流操作符被重载,代码如下:
int status = ::send ( m_sock, s.c_str(), s.size(), MSG_NOSIGNAL );
if ( status == -1 )
{
return false;
}
else
{
return true;
}
TCP 连接本身工作正常,所以我不会在帖子中添加更多内容。问题是可用命令之一涉及将输入发送到客户端实例,而所述客户端仍在等待 cin 输入。这意味着只有当我在 cin 中输入内容时,服务器消息才会被读取和写入。我试图避免使用多线程,那么有没有办法让 cin 在没有它的情况下被中断?
【问题讨论】:
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该在edit 您的问题中包含一个重现您的问题的Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
标签: c++ multithreading sockets tcp