草庐IT

asio-acceptor

全部标签

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

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