boost - 如何使用 boost.asio 创建一个简单的服务器/客户端应用程序?

标签 boost client client-server boost-asio

我正在查看 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/

相关文章:

c++ - 类 A 的 boost ptr_map 作为键和指针 vector 作为值 B 的内存消耗

node.js - socket.io 客户端库在哪里?

c++ - boost::posix_time::time_duration::total_seconds 有什么问题?

c++ - Boost Mountain Lion 链接

mysql - 如何自动化地将密码安全地传递给 MySQL 客户端

c# - 如何从 .NET 客户端应用程序加载 URL

java - 我应该如何正确地将 mp3 转换为字节数组,然后将其转换回 mp3

Java简单的客户端服务器程序

java - 与客户端连接时如何浏览服务器机器的文件系统(java)

c++ - 在 std::thread 中 boost asio 阻塞操作而不是使用异步方法?