C++ で boost::asio を使用して TCP/IP クライアントを作成しようとしています。サーバーに接続するためのソケットを作成する関数を作成しました
void TCP_IP_Communication::Create_Socket()
{
...
_socket = new tcp::socket(_io); //create socket
_io.run();
boost::system::error_code error= boost::asio::error::host_not_found;
try
{
while (error && endpoint_iterator != end) //if error go to next endpoint
{
_socket->close();
_socket->connect(*endpoint_iterator++, error);
}
//if error throw error
if(error)
throw boost::system::system_error(error);
//else the router is connected
boost::asio::read_until(*_socket,buf,'\n');
}}
次に、別の関数/スレッドを使用してコマンドを送信し、応答を受信します。
try
{
if(p=='i')
_socket->send(boost::asio::buffer(" sspi l1\n\n")); //sending signal presence for input command
else
_socket->send(boost::asio::buffer(" sspo l1\n\n")); //sending signal presence for output command
for(; ;) //loop reading all values from router
{
//wait for reply??
boost::asio::read_until(*_socket,buf,'\n');
std::istream is(&buf);
std::getline(is,this->data);
std::cout<<std::endl<<this->data;
問題は、サーバーに接続するたびに応答が返されることです
? "login"
しかし、コマンドを送信するときにそれを抑制する必要があります。コマンドを送信するたびにサーバーに接続していないため、実際には表示されないはずですが、表示されます。ここで何が間違っていましたか?私はそれを理解することができません。
主な機能は次のとおりです。
int main()
{
TCP_IP_Connection router;
router.Create_Socket();
boost::thread router_thread1,router_thread2;
router_thread1=boost::thread(&TCP_IP_Connection::get_status,&router,'i');
router_thread1.join();
std::string reply="\nend of main()";
std::cout<<reply;
return 0;
}