草庐IT

asio_handler_invoke

全部标签

c++ - Boost::asio TCP 服务器——从客户端读取消息

我正在尝试使用boost::asio创建我的第一个TCP服务器。服务器将监听客户端,如果它收到消息“MESSAGE_SEND_A:”,它应该将以下消息发送回客户端:“A|A|A|A|A|A”。如果它收到消息“MESSAGE_SEND_B:”,那么它应该相应地向客户端发送另一条消息:“B|B|B|B|B|B”。现在,我一直在研究BoostTCP服务器教程,它或多或少是清晰的:编辑:代码根据评论重写#include#include#include#include#include#include#includeusingboost::asio::ip::tcp;classtcp_connec

c++ - boost asio tcp 异步读/写

我对boostasio如何处理这个有一个理解问题:当我在客户端查看我的请求响应时,我可以使用以下boost示例Example但我不明白如果服务器每隔X毫秒向客户端发送一些状态信息会发生什么。我是否为此打开了一个serperate套接字,或者我的客户端是否可以区分请求、响应和cycleMessage?客户端发送请求并读取为cycleMessage会发生吗?因为他也在因为这个Message等待async_read?classTcpConnectionServer:publicboost::enable_shared_from_this{public:typedefboost::shared

c++ - 修改 boost::asio::socket::set_option

我需要设置选项boost::asio::ip::tcp::no_delay和boost::asio::socket_base::lingerboost::asio::ip::tcp::socket连接到远程TCP服务器。我使用方法set_option来毫无问题地实现这一目标。问题:一旦io_servicerun()ing并且socket打开,如果我被要求更改它的选项(即:由于程序配置的更改),我可以在打开套接字的情况下进行吗?我需要在更改选项之前关闭它吗?如果我不关闭它,它会在我脸上爆炸吗?这方面的最佳做法是什么?我无法在文档中找到与此相关的任何信息。提前谢谢你。

tcp - 设置 ASIO no_delay 选项

我在asio套接字上设置no_delay选项时遇到问题。以下代码运行良好,除了延迟。我的服务器仅在5000毫秒过期后才接收消息。#include#includeusingnamespaceboost::asio;structClient{io_servicesvc;ip::tcp::socketsock;Client():svc(),sock(svc){ip::tcp::resolverresolver(svc);ip::tcp::resolver::iteratorendpoint=resolver.resolve(boost::asio::ip::tcp::resolver::qu

c++ - 连接后连接丢失 -> 服务器 TCP boost.ASIO

我做了boost教程:异步TCP日间服务器http://think-async.com/Asio/asio-1.1.1/doc/asio/tutorial/tutdaytime3.html当我想测试它时,服务器正在运行,这很好,但如果我执行nc-Clocalhost4242,客户端会收到服务器的消息,但之后客户端会直接断开连接。这里是我的代码:#include"server.h"#include"connection.h"Server::Server(boost::asio::io_service&io_service):accept(io_service,boost::asio::i

c++ - async_resolve 的 boost::asio::ip::tcp::resolver::iterator 的生命周期是多少?

当我调用boost::asio::ip::tcp::resolver::async_resolve时,我的处理程序收到一个ip::tcp::resolver::iterator迭代一个或多个ip::tcp::resolver::entries。他们的生命周期是多少,让他们活着的把柄是什么?例如,如果我得到第一个entry并向它启动一个tcp::async_connect,那么在async_connect处理程序中,可以我迭代到下一个entry并启动另一个async_connect到下一个条目(只要我将iterator传递给async_connect处理程序,当然)?什么时候清理reso

c++ - BOOST-ASIO 阻塞服务器不响应阻塞客户端?

我最近有这个question解决了有问题的服务器,但事实证明服务器似乎没有回复客户端,也没有收到任何发送的数据。这就是我在客户端所做的。C:\blocking_tcp_echo_client\bin\Debug>blocking_tcp_echo_client127.0.0.14001Entermessage:helloException:read:Endoffile这是服务器端。我确实在启动客户端之前启动了服务器。我还用原来的code测试了客户端并且效果很好。C:\boost_server_class\bin\Debug>boost_server_classTCPIP_server:

c++ - 持久的 ASIO 连接

我正在做一个项目,我需要能够使用一些持久性来长时间与不同的服务器通信。该服务器将具有相当高的吞吐量。我无法找到正确设置持久连接的方法。我能想到的最好的方法是创建一个持久连接类。理想情况下,我会连接到服务器一次,并在收到信息时执行async_writes。并阅读返回给我的信息。不过,我认为我的类(class)结构不正确。这是我现在构建的:persistent_connection::persistent_connection(std::stringip,std::stringport):io_service_(),socket_(io_service_),strand_(io_servi

c++ - boost::asio 在 async_read 中复制输入数据

最近从libevent转成boost::asio,一周后发现一个奇怪的现象:当我从客户端读取数据时,有些数据好像是重复的,好像库没有'不必将其标记为已读(或类似的东西)。我的“读取”方法如下所示:voidclient::doRead(){deletereadBuffer;//gettingridofolddatareadBuffer=newSerializedBuffer((uint)READ_BUFFER_SIZE);readBuffer->position(0);asio::async_read(socket,asio::buffer(readBuffer->bytes(),REA

c++ - boost::asio 和递归服务器调用

boost::asio是否正确处理递归服务器连接?我有一个TCP/IP异步服务器,它从async_read处理程序中连接到它自己并且似乎死锁:下一个async_accept正在工作但async_read阻塞。服务器基于带有线程池的httpasio示例。它实现了客户端正在使用的特定API,并且还可以将某些功能委托(delegate)给另一台服务器(充当代理或云节点)。问题是,当另一台服务器是本地主机(例如它自己)时,死锁发生在asio库中的某处。有什么建议吗? 最佳答案 我实际上发现问题出在SSL套接字上-当服务器调用自身时,握手函数