BOOST ASIO - 异步套接字

发布于 2024-12-09 12:45:50 字数 1250 浏览 0 评论 0原文

我正在尝试使用 BOOST ASIO 库异步套接字。 我的平台是Linux。 我的客户端发送数据,我可以在服务器端读取这些数据。 第二次发送数据时,客户端必须重新连接。 有没有一种方法可以使用异步套接字并保持连接处于活动状态直到显式断开连接。

我的代码详细信息:-

服务器端我使用了 async_accept() ,如下所示

_acceptor.async_accept(_connection->socket(),
    boost::bind(&Server::handleAccept,
                     this,
                     boost::asio::placeholders::error));

handleAccept() looks like this
{
    _connection->start();
    _connection.reset(new Connection(_ioService));
    _acceptor.async_accept(_connection->socket(),
                           boost::bind(&Server::handleAccept,
                           this,
                           boost::asio::placeholders::error));
}

start() function looks like this:-
  _socket.async_read_some(boost::asio::buffer(_buffer),
                          _strand.wrap(
                            boost::bind(
                              &Handler::handleRead,
                              shared_from_this(),
                              boost::asio::placeholders::error,
                              boost::asio::placeholders::bytes_transferred
                              )
                          )

在我的 handleRead() 函数中,我将数据转储到屏幕上。

I am trying to use BOOST ASIO library asynchronous sockets.
My platform is Linux.
My client sends data, which I am able to read at server side.
For sending data second time, client has to connect again.
Is there a way I can use asynchronous sockets and keep the connection alive till explicit disconnection.

Details of my code:-

Server side I have used async_accept() which looks like this

_acceptor.async_accept(_connection->socket(),
    boost::bind(&Server::handleAccept,
                     this,
                     boost::asio::placeholders::error));

handleAccept() looks like this
{
    _connection->start();
    _connection.reset(new Connection(_ioService));
    _acceptor.async_accept(_connection->socket(),
                           boost::bind(&Server::handleAccept,
                           this,
                           boost::asio::placeholders::error));
}

start() function looks like this:-
  _socket.async_read_some(boost::asio::buffer(_buffer),
                          _strand.wrap(
                            boost::bind(
                              &Handler::handleRead,
                              shared_from_this(),
                              boost::asio::placeholders::error,
                              boost::asio::placeholders::bytes_transferred
                              )
                          )

In my handleRead() function, I dump the data on screen.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在深巷 2024-12-16 12:45:50

Handler::handleRead() 中,您必须再次安排 async_read_some()

well in Handler::handleRead() you got to schedule the async_read_some() again

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文