我有一个客户端程序通过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连接; stream运算符重载了以下代码:
int status = ::send ( m_sock, s.c_str(), s.size(), MSG_NOSIGNAL );
if ( status == -1 )
{
return false;
}
else
{
return true;
}
TCP连接本身工作正常,所以我不会把更多的内容弄得乱七八糟。问题是其中一个可用命令涉及在所述客户端仍在等待cin输入时将输入发送到客户端实例。这意味着当我在cin中键入内容时,只能读取和写入服务器消息。我试图避免使用多线程,所以有没有办法让cin在没有它的情况下被中断?
答案 0 :(得分:0)
好吧,如果你真的想要,你可以使用一个循环和函数kbhit()
来检查用户输入。但是,线程在我看来是一个更好的解决方案。
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
while(1)
{
if(kbhit())
{
char x = getch();
// ...
}
// check messages asynchronously here
}
}