提升库服务器/客户端

时间:2016-01-02 02:29:16

标签: c++ boost tcp server boost-asio

这是我使用boost库的服务器端代码。

private:
  void handle_read(const boost::system::error_code& error,
      size_t bytes_transferred)
  {
    if (!error)
    {
    std::string input= data_;


    if(input=="ls"){
        path p = current_path();
          directory_iterator it{p};

          while (it != directory_iterator{})
            {
              input.append(it->path().string());
              //const directory_entry& entry = *it++;

              it++;

          }
          std::cout <<input << std::endl;
          std::cout <<input.length() << std::endl;

        }

    else if(input=="cp")
 {
        input="pc";
  }
    else if(input=="rm")
   {
        input="mr";
    }
    else
        {
            input= "llo";
        }
      boost::asio::async_write(socket_,
          boost::asio::buffer(input, (input.length())),
          boost::bind(&session::handle_write, this,
            boost::asio::placeholders::error));
     memset(data_, 0, max_length);
    }
    else
    {
      delete this;
    }
  }

  void handle_write(const boost::system::error_code& error)
  {
    if (!error)
    {
      socket_.async_read_some(boost::asio::buffer(data_, max_length),
          boost::bind(&session::handle_read, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));

    }

这是客户端网站代码

    while(1)
    {
    std::cout << "Enter message: ";
    char request[max_length];
    std::cin.getline(request, max_length);
    size_t request_length = std::strlen(request);
    boost::asio::async_write(s,
        boost::asio::buffer(request, request_length),
        boost::bind(&handle_write,
          boost::asio::placeholders::error));

    char reply[2048];
   boost::asio::read(s,
      boost::asio::buffer(reply, 163));

    std::cout << "Reply is: ";
    std::cout<<reply<<std::endl;
    std::cout << "\n";

    }
  }

我的代码在做什么? 客户端向服务器发送请求,服务器处理它并将其发回。 例如,如果客户端发送ls,则服务器代码将首先进入,然后在服务器上执行ls命令并将输出发送回客户端。

当我发回时,input.lenght存在问题。 服务器代码在这里

boost::asio::async_write(socket_,
          boost::asio::buffer(input, (input.length())),
          boost::bind(&session::handle_write, this,
            boost::asio::placeholders::error));
     memset(data_, 0, max_length);

如果我把精确的长度设为163,它会显示出完美的结果,但我不想修复,因为我从来不知道它发送的大小。

0 个答案:

没有答案