-2
我有通過TCP套接字連接到服務器,下面一個客戶端程序:讀/打印插座輸出中(W/O多線程)
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在沒有它的情況下被中斷?
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,你應該[編輯]你的問題,以包含一個[Minimal,Complete,and Verifiable](http://stackoverflow.com/help/mcve)例子來重現你的問題,以及你在調試器中所做的觀察。 –