问题标签 [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.
c++ - 关于一般网络编程中的写缓冲区
我正在使用 boost.asio 编写服务器。我为每个连接都有读写缓冲区,并使用异步读/写函数(async_write_some
/ async_read_some
)。
使用读取缓冲区和async_read_some
,没有问题。只需调用async_read_some
函数就可以了,因为读取缓冲区仅在读取处理程序中读取(通常意味着在同一线程中)。
但是,写入缓冲区需要从多个线程访问,因此需要锁定以进行修改。
第一个问题!
有什么办法可以避免写缓冲区的LOCK?
我将自己的数据包写入堆栈缓冲区并将其复制到写入缓冲区。然后,调用async_write_some
函数发送数据包。这样,如果我串行发送两个数据包,是否可以async_write_some
两次调用函数?
第二个问题!
套接字编程中异步写入的常用方法是什么?
谢谢阅读。
c++ - 有没有一种优雅的方式来桥接 Asio 中的两个设备/流?
给定Asio中的两个面向流的 I/O 对象,将数据从一个设备双向转发到另一个设备的最简单方法是什么?这可以用boost::iostreams::combination或boost::iostreams:copy来完成吗?还是手动方法更好——在每一端等待数据,然后将其写入另一个流?换句话说,如何利用Boost和Asio来生成最少的代码?
示例应用程序将按照此问题的要求在串行端口和 TCP 套接字之间进行流式传输。
boost - Boost.Asio 同步通信
我在使用 asio 时遇到问题。我的客户端/服务器应用程序只需要同步通信。因此,使用 boost 主页上的同步示例,我设置了两个程序来发送和接收数据。他们的代码如下:
这些过程只是从 boost 示例中提取的代码行的包装器。
在我的测试应用程序中,客户端调用
和服务器调用
只是为了测试功能。问题是两个应用程序在第一次信息交换后冻结,如下图所示。客户端上的vReceive()过程似乎没有完成,而vSend()在服务器端完成。那么,有没有人有任何想法,可能是什么问题?
以防万一有人想复制问题,我将完整的源代码上传到同一台服务器,图片位于 asio_problem.rar 文件中(作为新成员,我可以在每个帖子中拥有一个超链接)。
提前谢谢大家,丹尼尔。
boost-asio - boost.asio,如何使用 asio 读取完整的 IP 数据包
我想使用一个在套接字端口上读取的函数,并在收到 IP 数据包时返回控制权。
boost::asio::ip::udp::socket 有一个函数receive(或async_receive),它返回读取了多少字节。文档状态:在连接的套接字上接收一些数据。
现在我不清楚是什么决定了“某些”数据。我不明白系统如何决定是返回还是继续等待并读取传入的数据,这让我想到了我的问题:
如何使用 asio 读取完整的 IP 数据包?
在 java 中,您可以调用函数 DatagramSocket.receive(...) ,这正是我想要做的。
最好的,dd
c++ - boost asio 示例在 mac osx 上崩溃
我正在尝试从 MacOSX 10.5 上的 Boost asio 示例运行 blocking_udp_echo_server.cpp。
但它崩溃了:
从回溯:
任何人有任何想法?
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 个参数的函数
以及一大堆警告。我究竟做错了什么?我已经尝试了我能想到的一切,谢谢。
c++ - Boost.Asio iostream 刷新不起作用?
任何想法为什么stream.flush();
行不通?
只有在删除循环并
boost::this_thread::sleep(boost::posix_time::seconds(1));
执行该行(很久以后)时才会刷新它。
谢谢
更新:我做了更多的调试,问题实际上不是flush命令。如果我让我的代码连接到 netcat 服务器,一切正常。我认为问题在于客户端和服务器都在同一个进程中(我创建了两个威胁,一个充当服务器,一个充当客户端)。当我将它们放在单独的进程中时,一切正常,但是当两者都在同一个进程中时,传输会停止,直到调用 sleep ......(这只是出于测试原因,稍后两者都将在不同的服务器上运行)。
平台是WindowsXP。
任何想法为什么会发生这种情况?
c++ - 提升线程和定时器,C++
我有一个自定义类“sau_timer”的代码:
我想要这样当我创建一个 sau_timer 对象时,计时器将启动,但允许程序继续执行。例如,这是 main():
我的意图是创建 timer_test,在调用 sau_prompt("Hello!") 之前启动一个等待三秒的计时器,但将首先调用 sau_prompt("First!")。此时,在 First 之前的提示符中显示 Hello,表示计时器正在暂停整个程序三秒钟,然后才允许它继续。我希望计时器在后台运行。
我究竟做错了什么?代码编译...
谢谢你。
c++ - 在 async_resolve 处理程序中收到“找不到服务”错误
我的代码如下所示:
当我运行此代码时,使用我知道正在运行的服务器的适当门和端口,我在日志文件中得到以下文本:错误:找不到服务
谁能提供一些有关此错误实际含义的见解?