草庐IT

Boost-asio

全部标签

java - Boost Asio io_service,从客户端读取消息

我正在尝试使用BoostASio库在C++中创建一个简单的Tcp服务器。我写了两个类TcpConnection和TcpServer。我需要的行为是Tcp服务器应该能够向所有连接的客户端发送消息,并且客户端应该能够向服务器注册/注销。我能够实现从服务器发送消息。我没有成功阅读来自客户的部分。我的客户端是用java编写的,使用的是apachemina。服务器代码message=message+"\r\n";constintbytesToSend=message.length();boost::system::error_codeerror;boost::asio::write(socket

java - Async Boost 写入 Java Socket - 传入字节数组有时部分为 0?

我有一些C++代码正在写入Java程序正在读取的套接字。C++程序使用boost::async_write传输字节,然后由Java程序读取。async_write调用的前4个字节对应于底层数据段的大小。由于大小由该header明确确定,因此Java代码可以使用BufferedInputStream的“读取”方法填充实际数据大小的字节数组。虽然这似乎几乎每次都能正常工作,但有时InputStream读取的字节数组包含其缓冲区末尾的清零数据。每50000条消息中大约有1条以这种方式“损坏”。缓冲区中清零数据开始的位置各不相同。尽管我可以捕捉到这一点并抛出消息,但我想知道这是否是预期的表现?

c++ - boost asio多线程

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Boost.Asiothreadsafety是boost::asio::ip::tcp::socket线程安全吗?我的意思是,我可以从不同线程调用共享tcp::socket(socket.connect()、read_some()、close())的方法而不用担心竞争条件问题吗?

c++ - Asio 中新连接出现 "Already Open"错误

我正在使用Asio的非Boost版本,并根据http://think-async.com/Asio/asio-1.11.0/doc/asio/tutorial/tutdaytime3.html中的代码创建了一个TCP服务器。我可以很好地建立与服务器的连接,但只是第一次。如果我断开我的客户端然后尝试再次连接,Asio将“已经打开”错误传递给我的接受处理程序。从代码中可以看出,在接受连接之前,会创建一个tcp_connection类的新实例。我不确定为什么会收到此错误,即使它是一个完全独立的实例,其套接字不应已打开。任何帮助将不胜感激。提前致谢。编辑:这是服务器类:http://paste

C++ boost tcp 服务器

我试图用boost库创建一个tcp服务器。我基本上从boost中获取了示例代码(整个代码在1个文件中)并将其拆分为一个类。好像那里出了点问题,我真的不知道缺少了什么。主要错误出现在“tcp_server.cpp”的末尾,我将错误消息放到那里的注释中。看起来他不知道函数session(至少我是这样解释的),我得到了与“tcp_server::session”和“this->session”相同的错误。第二件事是我从“e.what()”(无法解析标识符)中得到的错误。它在示例代码中有效,我没有在异常情况下进行任何更改。提前致谢。tcp_server.h#include#include#in

c++ - Boost::ASIO:使用两个进程的双向通信

我想制作两个具有以下行为的应用程序(两个linux进程):将打开一个TCP服务器(在特定端口上),并且只会读取将由连接的客户端发送的数据。一个将向所有连接的客户端发送数据。如果我使用线程(我只会共享asiotcp::socket对象),这会很容易,但由于某些原因我不能使用线程。如何使用两个不同的应用程序实现这一点?(没有某些形式的IPC)。 最佳答案 您甚至不需要两个进程,您可以将async_writes和async_reads发布到同一个消息循环,它们将得到处理。当然不是严格意义上的并行,但是如果您的环境限制使用线程(为什么?),

c++ - boost::asio 和使用异步的多个客户端连接

我需要与不同的服务器建立最多三个不同的TCP连接。所有三个连接都需要不同的协议(protocol)、不同的握手和不同的心跳。在读http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp,在这里阅读内容并遵循ChrisKohlhoffs的建议,我尝试按如下方式实现它。问题是,对于这种架构,无论我在做什么,在doConnect()中调用shared_from_this()时都会出现bad_weak_pointer异常。重要这些只是未运行代码的片段,其中可能包含错误!

tcp - 发送 TCP 数据而不接收(boost asio)

我正在学习boost的asio教程。我正在调查他们的chatexample.更具体地说,我试图拆分他们的chatclient从一个发送者+接收者,到一个发送者和一个接收者,但我看到了一些我无法解释的行为。设置包括:boost::asio::io_serviceio_service;tcp::resolver::iteratorendpoint=resolver.resolve(...);boost::threadt(boost::bind(&boost::asio::io_service::run,&io_service));boost::asio::async_connect(soc

c++ - 创建指针以 boost asio tcp 套接字

我想做什么我正在开发一个通过TCP连接到硬件的库。该库提供了一些用于在远程硬件上设置参数的函数。为了使这个库易于使用,我希望连接函数创建一个连接状态struct/对象,一个指向该对象的指针将由使用此类的软件调用保存。这样它就可以一次连接到多个目标,并让每个连接的句柄传递给库的其他函数。相关源码如下:#include#includeusingboost::asio::ip::tcp;structconnection_state{boost::asio::io_service*io_service;tcp::socket*socket;boolconnected=false;};__std

c++ - Boost asio async_read_until 在匹配条件下停止阅读

我有一个关于使用boostasio的async_read_until的一般性问题。文档说调用处理程序时缓冲区内可能有更多数据。有没有什么办法可以解决这个问题,并在序列条件匹配后立即阻止缓冲区从套接字中消耗字节? 最佳答案 Q.Isthereanywaytoworkaroundthis不是直接的,因为网络流量的工作方式(它是面向数据包的)。当然,如果发送方主动确保它,您可能在协议(protocol)边界上得到东西,但这对于流协议(protocol)来说是不寻常的。Q.andstopthebufferfromconsumingbytes