问题标签 [boost-asio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1782 浏览

c++ - 关于一般网络编程中的写缓冲区

我正在使用 boost.asio 编写服务器。我为每个连接都有读写缓冲区,并使用异步读/写函数(async_write_some/ async_read_some)。

使用读取缓冲区和async_read_some,没有问题。只需调用async_read_some函数就可以了,因为读取缓冲区仅在读取处理程序中读取(通常意味着在同一线程中)。

但是,写入缓冲区需要从多个线程访问,因此需要锁定以进行修改。

第一个问题!

有什么办法可以避免写缓冲区的LOCK?

我将自己的数据包写入堆栈缓冲区并将其复制到写入缓冲区。然后,调用async_write_some函数发送数据包。这样,如果我串行发送两个数据包,是否可以async_write_some两次调用函数?

第二个问题!

套接字编程中异步写入的常用方法是什么?

谢谢阅读。

0 投票
1 回答
534 浏览

c++ - 有没有一种优雅的方式来桥接 Asio 中的两个设备/流?

给定Asio中的两个面向流的 I/O 对象,将数据从一个设备双向转发到另一个设备的最简单方法是什么?这可以用boost::iostreams::combinationboost::iostreams:copy来完成吗?还是手动方法更好——在每一端等待数据,然后将其写入另一个流?换句话说,如何利用BoostAsio来生成最少的代码?

示例应用程序将按照此问题的要求在串行端口和 TCP 套接字之间进行流式传输。

0 投票
1 回答
1211 浏览

boost - Boost.Asio 同步通信

我在使用 asio 时遇到问题。我的客户端/服务器应用程序只需要同步通信。因此,使用 boost 主页上的同步示例,我设置了两个程序来发送和接收数据。他们的代码如下:

这些过程只是从 boost 示例中提取的代码行的包装器。

在我的测试应用程序中,客户端调用

和服务器调用

只是为了测试功能。问题是两个应用程序在第一次信息交换后冻结,如下所示。客户端上的vReceive()过程似乎没有完成,而vSend()在服务器端完成。那么,有没有人有任何想法,可能是什么问题?

以防万一有人想复制问题,我将完整的源代码上传到同一台服务器,图片位于 asio_problem.rar 文件中(作为新成员,我可以在每个帖子中拥有一个超链接)。

提前谢谢大家,丹尼尔。

0 投票
1 回答
977 浏览

boost-asio - boost.asio,如何使用 asio 读取完整的 IP 数据包

我想使用一个在套接字端口上读取的函数,并在收到 IP 数据包时返回控制权。

boost::asio::ip::udp::socket 有一个函数receive(或async_receive),它返回读取了多少字节。文档状态:在连接的套接字上接收一些数据。

现在我不清楚是什么决定了“某些”数据。我不明白系统如何决定是返回还是继续等待并读取传入的数据,这让我想到了我的问题:

如何使用 asio 读取完整的 IP 数据包?

在 java 中,您可以调用函数 DatagramSocket.receive(...) ,这正是我想要做的。

最好的,dd

0 投票
1 回答
1619 浏览

c++ - boost asio 示例在 mac osx 上崩溃

我正在尝试从 MacOSX 10.5 上的 Boost asio 示例运行 blocking_udp_echo_server.cpp。

但它崩溃了:

从回溯:

任何人有任何想法?

0 投票
3 回答
3148 浏览

c++ - boost::bind、boost::asio、boost::thread 和类

这是我在类 'sau_timer' 的构造函数中的代码(希望在单独的线程中运行一个计时器,然后调用另一个函数)。

不幸的是,当我尝试编译时,atm 出现以下错误:

1>c:\program files\boost\boost_1_39\boost\bind\bind.hpp(246) : 错误 C2064: 术语不计算为带 1 个参数的函数

以及一大堆警告。我究竟做错了什么?我已经尝试了我能想到的一切,谢谢。

0 投票
1 回答
1764 浏览

c++ - Boost.Asio iostream 刷新不起作用?

任何想法为什么stream.flush();行不通?

只有在删除循环并
boost::this_thread::sleep(boost::posix_time::seconds(1));
执行该行(很久以后)时才会刷新它。

谢谢

更新:我做了更多的调试,问题实际上不是flush命令。如果我让我的代码连接到 netcat 服务器,一切正常。我认为问题在于客户端和服务器都在同一个进程中(我创建了两个威胁,一个充当服务器,一个充当客户端)。当我将它们放在单独的进程中时,一切正常,但是当两者都在同一个进程中时,传输会停止,直到调用 sleep ......(这只是出于测试原因,稍后两者都将在不同的服务器上运行)。

平台是WindowsXP。

任何想法为什么会发生这种情况?

0 投票
2 回答
12024 浏览

c++ - 提升线程和定时器,C++

我有一个自定义类“sau_timer”的代码:

我想要这样当我创建一个 sau_timer 对象时,计时器将启动,但允许程序继续执行。例如,这是 main():

我的意图是创建 timer_test,在调用 sau_prompt("Hello!") 之前启动一个等待三秒的计时器,但将首先调用 sau_prompt("First!")。此时,在 First 之前的提示符中显示 Hello,表示计时器正在暂停整个程序三秒钟,然后才允许它继续。我希望计时器在后台运行。

我究竟做错了什么?代码编译...

谢谢你。

0 投票
1 回答
1287 浏览

c++ - 在 async_resolve 处理程序中收到“找不到服务”错误

我的代码如下所示:

当我运行此代码时,使用我知道正在运行的服务器的适当门和端口,我在日志文件中得到以下文本:错误:找不到服务

谁能提供一些有关此错误实际含义的见解?

0 投票
3 回答
44296 浏览

linux - 在 Linux 中链接 Boost 库

我正在尝试使用 Boost 的 Asio 构建一个项目,但遇到了一些麻烦。最初,我尝试在没有任何其他库的情况下构建项目,因为所有内容都应该在头文件中。

我正在尝试构建的程序如下所示:

它可以Boost 的网站上找到。

所以,最初我只有:

这导致了以下错误:

看来我需要系统库。因此,我按照此处找到的入门指南中的说明进行操作,它给了我一堆位于/usr/include/boost_1_40_0/stage/lib的库。其中包括libboost_system.a。因此,我尝试编译:

但是,我得到了这个:

我不知道为什么,但它似乎无法识别图书馆或我尝试的任何其他图书馆。我可能做错了什么?提前致谢!