我正在查看 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,但这只会让客户端等待而不执行任何操作。
最佳答案
最后我发现问题出在服务器的这段代码上:
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.
关于boost - 如何使用 boost.asio 创建一个简单的服务器/客户端应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759062/