0

我试图在 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;
}
4

0 回答 0