草庐IT

ZN5boost

全部标签

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

boost tcp 客户端有时无法检测到与服务器的断开连接

我正在使用boost::asio::tcp::socket连接到服务器,然后调用read_some()从Server接收二进制数据,代码如下:len=sock->read_some(boost::asio::buffer(pBuf),error);if(error==boost::asio::error::eof){break;}elseif(error){break;}但是在Server关闭socket之后,client仍然阻塞在read_some方法中,无法检测到与server的断开并得到错误信息。为什么会出现这个问题? 最佳答案

c++ - boost io_service 初始化 SIGSEGV

我正在编写一个smpp客户端,但遇到一个我无法解决的问题。我写了一个tcp_client类和一个内部io_service类来封装所有的tcp通信过程。之后我意识到我需要继承类中的控件来运行另一个要完成的任务,因此,我修改了tcp_client以在继承类的构造函数中初始化io_service,然后从那里post.tcp_client类:classtcp_client{public:tcp_client(boost::asio::io_service&_io_service,tcp::resolver::iteratorendpoint_iterator):m_io_service(_io

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