Boost ::asioLibsを使用してTCPクライアントを構築しています。私のプログラムには、サーバーにコマンドを送信するwrite()スレッドがあります
write(*_socket,boost::asio::buffer("sspi l1\n\n",sizeof("sspi l1\n\n")));
次に、他のクライアントが原因でサーバーからメッセージがブロードキャストされる可能性があるため、常にバッファーから読み取る読み取りスレッドが開始されます。
void TCP_IP_Connection::readTCP()
{
size_t l=0;
this->len=0;
boost::system::error_code error;
try
{//loop reading all values from router
while(1)
{
//wait for reply??
l=_socket->read_some(boost::asio::buffer(this->reply,sizeof(this->reply)),error);
if(error)
throw boost::system::system_error(error);
if(l>0)
{
this->dataProcess(l);
}
else
boost::this_thread::sleep(boost::posix_time::milliseconds(5000));
_io.run();
if(error==boost::asio::error::eof) //connection closed by router
std::cout<<"connection closed by router";
_io.reset();
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
}
このスレッドはwhile(1)ループで常に実行され、受信したデータの長さがゼロ未満になるとスリープすることになっています。すべてのデータを読み取り、データパーサー関数を呼び出します。その後、書き込みスレッドを使用して別のコマンドを送信し、読み取りスレッドを実行します。しかし、必要な応答の代わりに、サーバーは送り返します
? ""
ERROR: Unknown command
Wiresharkを使ってみました。コマンドが正しく送信されているのがわかります。私がここでやっている間違いは何ですか?