使用 boost::asio 和 std::wstring 解析网络节点
resolving network node using boost::asio and an std::wstring
我正在使用Boost::Asio进行网络通信。 以下代码失败,并出现以下编译错误。
法典:
std::wstring hostName(L"myserver");
std::wstring portName(L"myport");
auto query = boost::asio::ip::udp::resolver::query(boost::asio::ip::udp::v4(), hostName, portName);
编译错误:
Error 1 error C2665: 'boost::asio::ip::basic_resolver_query<InternetProtocol>::basic_resolver_query' :
none of the 5 overloads could convert all the argument types
我的问题:
- Boost::
- Asio 是否只期望 ANSI 字符串 (std::string)?
- 这是否意味着不支持具有非 ANSI 字符的主机名?
- 还是我必须先将宽字符串转换为 UTF8?
- 在后一种情况下,Boost::Asio 是否提供了标准方法来执行此操作,或者我可以使用自己的 ANSI/Unicode 转换例程?
目前在Windows上运行,使用Visual Studio 2013。
提前谢谢。
Boost::
Asio 是否只期望 ANSI 字符串 (std::string)? 它期望 std::string,但不一定是 ANSI,因为 std::string 可以存储 UTF-8。
这是否意味着不支持具有非 ANSI 字符的主机名? 我没有亲自尝试过,但由于这本质上是底层操作系统网络代码之上的包装器,我找不到任何不支持使用 UTF-8 的理由。
还是我必须先将宽字符串转换为 UTF8? 最有可能的是,是的,因为宽字符串格式仅由核心Windows API使用,而UTF-8则被包括Boost在内的其他所有人使用。
在后一种情况下,Boost::Asio 是否提供了标准方法来执行此操作,或者我可以使用自己的 ANSI/Unicode 转换例程? Boost 似乎不支持宽字符。只要使用特定于 Windows 的字符编码,就可以使用 Windows 提供的 COM 接口进行转换(MultiByteToWideChar、WideCharToMultiByte),也可以使用自己的例程。 如果已知你自己的例程是可靠/正确的,并且你尚未使用 COM,则可能需要坚持使用自己的例程,而不是向项目添加对 COM 的依赖关系。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- Ctypes wstring通过引用传递
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 通过网络、跨平台传递std::变体是否安全
- 如何在MNIST上提高网络运行的准确性
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- 在C++中将变量 wstring 分配给 Char 数组
- 神经网络不学习.卡在50%
- 如何绑定 C++ gRPC 客户端的网络接口
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 在不知道套接字的情况下关闭网络连接
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 在没有管理员权限的情况下连接到同一网络中的命名管道
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 像 POCO 这样的C++图书馆如何访问网络?
- 将日语 wstring 转换为 std::string
- 使用 boost::asio 和 std::wstring 解析网络节点