我正在查看boost.asio的示例,我想知道为什么没有一个简单的服务器/客户端示例的示例在服务器上打印字符串然后将响应返回给客户端。
我试图修改回声服务器,但我无法弄清楚我在做什么。
任何人都可以找到我的客户端模板和服务器模板吗?
我想最终创建一个服务器/客户端应用程序,它接收二进制数据,然后向客户端返回一个确认,即收到数据。
编辑:
void handle_read(const boost::system::error_code& error,
size_t bytes_transferred) // from the server
{
if (!error)
{
boost::asio::async_write(socket_,
boost::asio::buffer("ACK", bytes_transferred),
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
}
else
{
delete this;
}
}
这只返回给客户'A'
同样在data_中,我在响应本身后得到了很多奇怪的符号
那是我的问题
编辑2:
好的主要问题是客户端。
size_t reply_length = boost::asio::read(s,
boost::asio::buffer(reply, request_length));
由于它是一个回声服务器,只有当请求长度超过3个字符时,才会出现'ACK' 我该如何克服这个问题? 我尝试将request_length更改为4,但这只会让客户端等待而不会做任何事情。
答案 0 :(得分:2)
最终我发现问题在于服务器中的这段代码:
void handle_read(const boost::system::error_code& error,
size_t bytes_transferred) // from the server
{
if (!error)
{
boost::asio::async_write(socket_,
boost::asio::buffer("ACK", 4), // replaced bytes_transferred with the length of my message
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
}
else
{
delete this;
}
}
在客户端:
size_t reply_length = boost::asio::read(s,
boost::asio::buffer(reply, 4)); // replaced request_length with the length of the custom message.
答案 1 :(得分:1)
echo客户端/服务器就是一个简单的例子。你遇到什么问题?客户端应该相当简单,因为它使用阻塞API。服务器稍微复杂一些,因为它使用带回调的异步API。当你把它归结为核心概念(session,server,io_service)时,它很容易理解。