【问题标题】:How to create a simple server/client application using boost.asio?如何使用 boost.asio 创建一个简单的服务器/客户端应用程序?
【发布时间】:2010-05-03 15:16:54
【问题描述】:

我正在查看 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 但这只会让客户端等待并且根本不做任何事情。

【问题讨论】:

    标签: boost client client-server boost-asio


    【解决方案1】:

    最终我发现问题出在服务器中的这段代码中:

    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.
    

    【讨论】:

      【解决方案2】:

      echo 客户端/服务器就是一个简单的例子。你在哪些方面有问题?客户端应该相当简单,因为它使用阻塞 API。服务器稍微复杂一些,因为它使用带有回调的异步 API。当您将其归结为核心概念(会话、服务器、io_service)时,就很容易理解了。

      【讨论】:

      • 我想在服务器上打印从客户端发送的字符串,然后返回一个确认,该确认将打印在客户端上。你能告诉我它是怎么做的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多