这是我使用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,它会显示出完美的结果,但我不想修复,因为我从来不知道它发送的大小。