草庐IT

asio_handler_invoke

全部标签

c++ - 使用 boost asio 原始套接字创建第 2 层/以太网套接字(在 C++ 中)

使用boost::asio库创建IP、TCP或UDP套接字相当容易。但是,当涉及到以太网套接字时,您需要实现boost/asio/basic_raw_socket.hpp由于Internet上没有此类示例,而且我花了很长时间才找到答案,所以我将解决方法放在这里。我找到的最有用的资源是:AF_NETLINK(netlink)socketsusingboost::asio 最佳答案 可以使用generic::raw_protocol东西打开原始套接字:std::stringifname("eth1");typedefboost::asi

c++ - boost asio 超时

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Howtosetatimeoutonblockingsocketsinboostasio?我之前读过一些关于超时的条目,但我不明白。我想要一个定义的连接超时。连接代码如下所示:try{boost::asio::ip::tcp::resolverresolver(m_ioService);boost::asio::ip::tcp::resolver::queryquery(link.get_host(),link.get_scheme());boost::asio::ip::tcp::resolver::ite

c++ - 有没有办法让 Asio 在没有 Boost 的情况下工作?

我知道有一个版本的ASIO不包含在Boost命名空间中,但即便如此,ASIO仍然依赖于Boost,但我想知道是否有一种方法可以让ASIO在不依赖于Boost的情况下工作(因为我由于太多原因,不能将Boost包含到项目中)。 最佳答案 不,我不这么认为。自从我听说ASIO以来,它一直在使用boost。我认为它们之间的联系非常紧密。但是您可能对工具感兴趣,bcp,它允许您提取要使用的库所需的最小boost子集。 关于c++-有没有办法让Asio在没有Boost的情况下工作?,我们在Stack

c++ - 使用 Boost Asio 从串行端口读取

我想使用boost.asio检查串行端口上的传入数据包。每个数据包都以一个字节长的报头开头,并指定所发送消息的类型。每种不同类型的消息都有自己的长度。我要编写的函数应该不断地监听新传入的消息,当它找到一个消息时应该读取它,并调用其他函数来解析它。我目前的代码如下:voidcheck_for_incoming_messages(){boost::asio::streambufresponse;boost::system::error_codeerror;std::strings1,s2;if(boost::asio::read(port,response,boost::asio::tra

c++ - 使用指定 ip 和端口的 boost asio 创建 iostream

我有一个关于boostasio库的问题。我成功地尝试在客户端和服务器之间创建套接字,这涉及创建解析器以指定服务器的ip和端口(服务器只需要端口)和其他对象,但最重要的是,有必要使用write和read_some作为从/在套接字中读取和写入的函数。我真的很感激使用流,这在boostasio中是可能的,但这很奇怪......在几乎所有使用流的示例中,要创建服务器就必须提供端口,好吧,让我们谈谈客户端...客户端,需要使用iostream构造函数指定用于连接流的坐标,这是代码:tcp::iostream()s(argv[1],"daytime");好吧,我真的不明白第一个参数传递的是什么,也

c++ - undefined reference `pthread_create' 使用 ASIO 和 std::thread 制作 C++11 应用程序时出错

我设置了Eclipse(实际上是XilinxSDK,但基于Eclipse)和g++4.9.2来编译一个使用独立ASIO的项目,我在属性->C/C++中使用了-std=c++11Build->Settings->ToolSettings->Otherflags以便它可以使用所有C++11特性进行编译。我还在C/C++GeneralSymbols中设置了ASIO_HAS_STD_THREAD,ASIO_STANDALONE等等,我希望ASIO头文件会使用std::thread而不是线程。但是,我仍然看到来自make的错误:undefinedreferencetopthread_create

c++ - 更好地提升 asio deadline_timer 示例

我正在寻找一个更好的boost::asio::deadline_timer示例给出的例子总会超时,调用close方法。我尝试在计时器上调用cancel(),但这会导致立即调用传递给async_wait的函数。在异步tcp客户端中使用计时器的正确方法是什么? 最佳答案 您提到在计时器上调用cancel()会导致立即调用传递给async_wait的函数。这是预期的行为,但请记住,您可以检查传递给计时器处理程序的错误以确定计时器是否已取消。如果定时器被取消,则operation_aborted被传递。例如:voidhandleTimer(

c++ - boost::asio async_read 保证读取所有字节

我有一个服务器从客户端接收压缩字符串(用zlib压缩),我使用的是async_receive来自boost::asio库来接收这个字符串,但事实证明不能保证所有字节都将被接收,所以我现在必须将它更改为async_read.我面临的问题是接收到的字节大小是可变的,所以我不确定如何使用async_read不知道要接收的字节数。随着async_receive我只有一个boost::array,然而这是一个不一定完全填满的缓冲区。我想知道是否有人可以建议一个解决方案,即使我不知道要提前接收的字节数,我也可以使用async_read?voidtcp_connection::start(boost

c++ - 如何检查套接字是否在 Boost.Asio 中关闭?

检查远程连接端的套接字是否关闭的最简单方法是什么?socket::is_open()返回true,即使它在远程端关闭(我正在使用boost::asio::ip::tcp::socket).我可以尝试从流中读取并查看它是否成功,但我必须更改我的程序逻辑以使其以这种方式工作(我不希望此时从流中提取数据支票)。 最佳答案 只需在您的async_receive处理程序中检查boost::asio::error::eof错误。这意味着连接已关闭。这是唯一正确的方法。 关于c++-如何检查套接字是否

C#中 Invoke和BeginInvoke的区别详解

一、Invoke和BeginInvoke方法,主要用于子线程操作主线程UI的控件,修改控件属性等。(1)Invoke同步运行,会等待代码运行完之后返回,线程会阻塞。(2)BeginInvoke异步运行,调用之后立即返回,不会等待修改控件代码执行完。不会阻塞。故由上述可知,Invoke和BeginInvoke方法由ISynchronizeInvoke接口提供,且都需要一个委托对象作为参数。委托类似于回调函数的地址,调用者可通过这两个方法将需要调用的函数地址封送到界面线程。如果这些封送给界面线程的方法包含了更改界面控件的代码,由于最终执行这个方法是在界面控件线程中,从而避免了线程之间的竞争。(3)