草庐IT

asio_handler_invoke

全部标签

c++ - 断开连接后重新连接 boost beast (asio) websocket 和 http 连接时出错

我正在创建一个使用sslWebsocket连接和sslHttp(保持事件)连接连接到服务器的客户端应用程序,我正在使用boost::beast包来执行相同的操作.为了检测死连接,我实现了一个简单的乒乓机制。这些都很好,但是在处理ping-pong故障时出现了问题。问题如下:为了测试我的代码,我连接到远程服务器,发送了一些消息,然后关闭了我的wifi。正如预期的那样,在一段时间后它检测到它没有收到来自服务器的任何消息,它尝试为http连接执行async_shutdown并为websocket连接执行async_close.我注意到的第一件事是,在wifi恢复之前,这两个调用都会阻塞它们各

sockets - 错误的文件描述符 Boost asio

我尝试用boostasio和boostbeast做一个简单的tcp/http服务器。但是,当我尝试读取套接字消息时,我得到了错误的文件描述符。我真的不明白哪里出了问题。我使用std::move将套接字从服务器类传输到detect_session类以获得相同的“套接字”服务器tcp_server::tcp_server(boost::asio::io_context&ioc,tcp::endpointendpoint,std::shared_ptrconst&doc_root):acceptor(ioc,endpoint),doc_root(doc_root){wait_for_conn

c++ - tcp 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据

我想打印客户端发送的消息。但是在我的函数handleRead中,当从缓冲区获取数据并打印时,没有打印任何内容。我不知道该怎么做。voidNetwork::start(){boost::asio::async_write(m_socket,boost::asio::buffer(m_message),boost::bind(&Network::handleWrite,shared_from_this(),boost::asio::placeholders::error));}voidNetwork::handleWrite(constboost::system::error_code&e

c++ - 如何找出通过 Boost ASIO TCP 套接字连接发送了多少数据?

我有一些指向boost::asio::io_service、boost::asio::ip::tcp::endpoint、boost的共享指针::asio::ip::tcp::acceptor和boost::asio::ip::tcp::socket。我接受用户连接并将套接字的shared_ptr传递给我的某个类。它完成它的工作。现在我想要的很简单-计算我的流量。我想获取有关在该连接期间发送和接收了多少数据的信息。如何从已接受的BoostASIOTCP套接字中获取此类信息? 最佳答案 假设您使用异步方法,为async_read提供的

c++ - 使用 Boost::asio 的 TCP/IP 客户端

我正在尝试使用boost库制作一个TCP/IP客户端。这就是我设计程序的方式->读取线程从服务器读取->写线程发送命令->解析从服务器读取数据的函数intmain(){TCP_IP_Connectionrouter;router.Create_Socket();boost::thread_groupt;t.create_thread(boost::bind(&TCP_IP_Connection::get_status,&router,'i'));t.create_thread(boost::bind(&TCP_IP_Connection::readTCP,&router));std::

c++ - 我如何将 boost::asio 用于 TCP 协议(protocol)而没有 header 告诉我消息的大小?

提升chatserverexample演示如何处理一个简单的TCP消息协议(protocol),其中每条消息前面都有一个固定大小的header,它告诉您后面的消息的大小。这意味着您总是知道在下次调用async_read()时要读取多少字节;您可以交替读取大小始终相同的header和header中给出大小的消息。这适用于Boosti/o服务模型,该模型promise在从套接字接收到准确的预期字节数时调用处理程序。如何使用Boost来运行不使用此类header的TCP协议(protocol)?我的客户端有一个协议(protocol),它使用特殊的字节序列来表示每条消息的开始和结束,所以我不

c++ - 如何通过 boost asio 支持 TCP 服务器中的多个连接

我有以下TCP服务器代码:#include#include#include#include#include#include#includeusingboost::asio::ip::tcp;classtcp_connection:publicboost::enable_shared_from_this{public:typedefboost::shared_ptrpointer;staticpointercreate(boost::asio::io_service&io_service){returnpointer(newtcp_connection(io_service));}tcp

c++ - 如何将 boost asio 接受器限制为本地主机和/或本地网络?

我正在尝试弄清楚如何将tcp套接字限制为本地主机。我终于找到了可以编译的代码,但它不接受任何连接。代码接受与endpoint_all的连接,但不接受使用tcp::endpoint(ip::address::from_string("127.0.0.1"),port2)设置的“endpoint_local”变量的连接;boost::asio::io_serviceio_service;shortport=9000;tcp::endpointendpoint_all=boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),port

c++ - 在 async_read 处理程序在服务器中返回错误后调用 boost::asio::tcp::socket 方法

对于日志输出,我正在调用tcp::socket::remote_endpoint()来自shared_ptrSessionSession时的对象创建和销毁的时间。如果async_read被调用并且客户端在服务器发送回复之前发送了一个FIN,然后在服务器发送回复之后发送了一个RST数据包(write不返回任何错误),async_read函数返回错误代码system::54(not_connected-带有“连接由对等方重置”的消息),然后当我再次调用remote_endpoint方法时(在Session对象析构函数中)它抛出异常:libc++abi.dylib:terminatingwi

c++ - boost asio tcp 线程化。等待新 sample ?

我有一个使用boostasio将结构作为序列化数据发送的应用程序。一切正常,但我认为我运行效率低下。我发送的实际数据仅每30毫秒左右更新一次,但在发送和接收功能上,我正在运行一个不到1毫秒的循环。这意味着我多次发送相同的数据。我的问题是:我怎样才能使这种方法更有效?我可以轻松地在发送函数中添加一个condition_wait来等待新样本,但是是否可以让接收方等待新的已发送样本?发送函数是:voidConnection(){staticautoconstflags=boost::archive::no_header|boost::archive::no_tracking;while(tr