问题标签 [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++ - SCons、Boost::ASIO、Windows 预编译头文件和链接器错误
当我们为多个平台开发 C++ 时,我正在研究将 SCons 用于我们的构建过程。我在构建配置中已经完成了 99% 的工作,但是我在 Windows 上遇到了一个非常奇怪的错误,与预编译的头文件有关。更奇怪的是,它只发生在一个项目上。
在这个项目的 SConscript 文件中,我有以下在 windows 上编译 PCH:
我还设置了一个编译器标志来强制在项目中的所有文件中包含 MyPCH.h:
一切顺利,编译得非常好。直到最后的 DLL 链接阶段,我才得到链接器错误的页面和页面,如下所示:
和:
这令人费解,因为我收到链接警告的所有类都没有使用 boost::asio,尽管它包含在预编译的头文件中并在某些#includes 中向上链。
更令人费解的是,如果我禁用预编译头文件的编译,但仍然强制它包含,一切编译和链接就好了。它只需要永远吓坏。
有没有人知道可能导致这些链接器错误的原因?
提前致谢。
- - 编辑 - -
这是 SCons 为构建 PCH(减去包含路径)而吐出的命令行:
这是正在编译的文件的命令行(再次减去包含路径):
最后,这是链接命令行:
此外,PCH 标头并未明确包含在每个单独的文件中,但在命令行选项中,我有 /FI 强制将 PCH 包含在项目中编译的每个文件中。
qt4 - 如何在 Qt4 或 GTK 等 GUI 框架中集成 Boost.Asio 主循环
有没有办法将 Boost.Asio 与 Qt4(首选)或 GTK 主循环集成?GTK 提供 poll(2) 之类的 API,所以技术上应该是可行的。Qt 提供了自己的网络层,但我更喜欢使用为 Boost.Asio 编写的现有代码。我想在不使用额外线程的情况下集成它们。
有没有参考如何为 Qt4(首选)或 GTKmm 执行此操作?
谢谢。
编辑
我想澄清几件事以使答案更容易。Qt 和 GTKmm 都提供“选择喜欢”功能:
- http://qt-project.org/doc/qt-5.0/qtcore/qsocketnotifier.html
- http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__MainLoop.html
所以,问题是,如何将现有的“选择器/轮询器”作为反应器集成到 Boost.Asio io_service
。今天,Boost.Asio 可以使用 select、kqueue、epoll、/dev/poll 和 iocp 作为 reactor/proactor 服务。我想将它集成到 GUI 框架的主循环中。
欢迎任何建议和解决方案(更好)。
c++ - Boost::Asio::Ip::Tcp::Iostream 问题
大家好,我是 asio 和 boost 的新手,我一直在尝试实现 TCP 服务器和客户端,以便我可以传输 std::vector - 但到目前为止我失败了。我发现 Asio 的 boost 文档缺乏(至少可以说)并且难以理解(英语不是我的主要语言)。
无论如何,我一直在查看 iostreams 示例,并且一直在尝试实现面向对象的解决方案 - 但我失败了。
我尝试实现的服务器应该能够接受来自多个客户端的连接(我该怎么做?)
服务器应该接收到 std::vector, /* Do something */ 然后将其返回给客户端,以便客户端可以告诉服务器接收到完整的数据。
*.h 文件
*.cpp 文件
客户应该怎么看?如何在两个应用程序“通话”时保持连接?
c++ - Boost asio ip tcp iostream 错误检测
问候。我刚刚开始使用 boost::asio 库,并且遇到了一些与 boost::asio::ip::tcp::iostream 相关的早期困难。
我的问题有两个部分:
1.) 如何仅使用主机和端口号连接 iostream?
我可以使客户端和服务器[boost.org] 示例按照编码正常工作。服务器明确指定端口:
端口 13 是著名的“白天”服务端口。
客户端示例通过指定主机和服务名称进行连接:
对于我自己的应用程序,我想将服务器放在任意端口上并按编号连接,如下所示:
服务器:
客户:
如果在客户端中,我尝试直接指定端口号(而不是按名称指定服务),则流无法连接。有没有办法做到这一点?我不清楚连接的论点可能/应该是什么。
2.) 测试调用 iostream::connect 成功的首选方法是什么?
该函数返回 void,并且没有抛出异常。到目前为止,我设计的唯一方法是测试 stream.fail() 和/或 stream.good()。这是这样做的方法,还是有其他方法。
对其中一项或两项的建议将不胜感激。另外,如果我忽略了相关的文档和/或示例,那就太好了。到目前为止,我还无法通过阅读图书馆文档或搜索“网络”来回答这些问题。
c++ - Boost 链接器错误:未解析的外部符号“class boost::system::error_category const & __cdecl boost::system::get_system_category(void)”
我刚刚开始第一次使用 Boost,详细信息:
- 我正在使用 Visual Studio 2008 SP1
- 我正在做一个 x64 构建
- 我只使用 boost::asio (以及它具有的任何依赖项)
我的代码现在可以编译,我将我的项目指向 boost 库(在构建 x64 库之后)并解决了一些简单的问题,现在我面临一个链接器错误:
有任何想法吗?
我添加了这个定义:#define BOOST_LIB_DIAGNOSTIC
现在在我的输出中,我看到了:
这似乎表明它实际上是在系统库中链接。
c++ - boost asio:0字节写入
我需要一些帮助来理解我在使用 asio 时遇到的一个特殊问题。
我有一个客户端-服务器应用程序,带有一个 c++ 客户端(使用 boost asio)向服务器(用 java 编写)发送 2 字节的心跳(例如,每秒)(并接收大量数据)。
在相当长的几分钟内,服务器正确接收了 2 字节的 HeartBeat,但之后服务器的“读取”抱怨读取了 0 字节,并关闭了连接(我猜这对于阻塞读取是正确的)。然而,客户总是打印出它正在转移正确的金额。
我已经尝试了几乎所有“写”函数系列的变体。它们都是根据“write_some”实现的吗?这是否意味着这种行为是预期的?
我在使用中一定犯了一些错误,基本上我在 asio 中寻找可以保证写入(至少一个字节)的东西。请帮我弄清楚我哪里出错了(如果需要任何进一步的信息。)......任何建议,非常感谢!谢谢!
c++ - boost::asio: 如何使用 async_accept 接受传入连接?
我正在使用 boost::asio,我有这样的代码:
此代码有效,但我想切换到使用 Acceptor::async_accept 以便我可以调用 Acceptor::cancel 来停止接收请求。
所以我的新代码如下所示:
但是这段代码似乎不起作用,我的函数 CServer::HandleAccept 永远不会被调用。有任何想法吗?我查看了示例代码,我的代码和他们的代码之间的主要区别是它们似乎经常创建一个像 tcp_connection 这样的类,它以套接字作为成员,我不明白为什么这是必要的。
- 亚历克斯
c++ - Boost ASIO 中的资源暂时不可用
当我使用方法 receive_from() 时收到错误消息“资源暂时不可用”,它是位于此处的 ip::udp::socket 的成员。
我传递给它: boost::asio::buffer、指向端点对象的指针、标志(设置为零)和 error_code 对象。
我只创建了端点
此错误消息似乎也没有太多可用信息。我已经在几台机器上试过了,总是会出现这个错误。
winsock - Boost Asio dll 在 Windows 2000 上引发 ws2_32.dll 错误
我有一个使用 boost Asio 进行网络的 dll。当我将此 dll 链接到在 Windows 2000 上运行的应用程序时,会引发运行时异常:
“无法在动态链接库 WS2_32.dll 中找到过程入口点 freeaddrinfo”
Microsoft 在http://msdn.microsoft.com/en-us/library/ms737931(VS.85).aspx提供了一种解决方法,但这对我不起作用。
谁能指出我的解决方案?
非常感谢,
——维杰
c++ - 套接字:如何在接收/解析数据时向客户端发送数据而不“等待”它们
我有一个套接字服务器,使用 boost::asio 用 C++ 编写,我正在向客户端发送数据。
服务器以块的形式发送数据,客户端在接收到每个块时对其进行解析。两者现在几乎都是单线程的。
我应该在服务器上使用什么设计来确保服务器尽可能快地写出数据,而不是等待客户端解析它?我想我需要在服务器上做一些异步的事情。
我想也可以在客户端上进行更改以完成此操作,但理想情况下,无论客户端是如何编写的,服务器都不应该等待客户端。
我正在像这样将数据写入套接字:
更新:
我将尝试使用 Boost 的机制来异步写入套接字。见http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html
例如
- 亚历克斯