You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Boost 1.67 beast::websocket连接报resolve: Host not found错误求助

问题根因与解决方案

核心错误1:域名与路径参数混淆

Host not found报错的根本原因是你将完整URL(包含路径、查询参数)直接传入了域名解析接口:

  • tcp::resolver::resolve仅接受纯域名作为参数,不能携带/开头的路径、?开头的查询参数
  • 路径、查询参数需要传入ws.handshake的第二个参数,原示例中该参数写死为/,适配自定义服务时需要修改

核心错误2:Shell特殊字符未转义

Unix Shell中&是后台运行标识符,你直接在命令行中传递带&的URL时,Shell会自动截断&后的内容,导致实际传入程序的参数不完整。所有带特殊字符的参数需要用单引号包裹。

核心错误3:协议与端口不匹配

  • 非加密ws协议默认使用80端口,加密wss协议默认使用443端口
  • 目前绝大多数公共WebSocket服务、云服务都只开放加密wss端口,用80端口请求会被服务端直接断开连接

具体修改步骤

1. 代码修改

以SSL版本的客户端代码为例,调整参数逻辑:

// 原参数检查修改为接收4个参数:host、port、path、text
if(argc != 5)
{
    std::cerr <<
        "Usage: wsstest <host> <port> <path> <text>\n" <<
        "Example:\n" <<
        "    wsstest 'demo.piesocket.com' '443' '/v3/channel_1?api_key=xxx&notify_self' 'Hello, world!'\n";
    return EXIT_FAILURE;
}
auto const host = argv[1];
auto const port = argv[2];
auto const path = argv[3];
auto const text = argv[4];

// 握手环节修改为传入path变量
ws.handshake(host, path);

2. 编译调整

编译时确保链接了所有必要的依赖库,树莓派环境下建议增加-std=c++17参数兼容Boost 1.67的语法:

g++ -std=c++17 websocket_client_sync_ssl.cpp -o wsstest -lpthread -lboost_system -lcrypto -lssl

3. 运行命令

所有带特殊字符的参数用单引号包裹,示例:

PieSocket测试命令

./wsstest 'demo.piesocket.com' '443' '/v3/channel_1?api_key=oCdCMcMPQpbvNjUIzqtvF1d2X2okWpDQj4AwARJuAgtjhzKxVEjQU6IdCjwm&notify_self' 'Hello, world!'

Azure WebPubSub测试命令

将你的Azure地址拆分后填写对应参数即可:

  • host:lupo.webpubsub.azure.com
  • port:443
  • path:/client/hubs/Hub?access_token=你的有效access_token

其他注意事项
  • Yahoo的行情WebSocket服务仅推送指定主题的行情数据,不会响应自定义文本消息,握手后主动断开是服务端的正常逻辑,不属于代码错误
  • Azure WebPubSub的access_token有有效期,运行前需要确认token未过期
  • 树莓派环境需要提前配置正确的DNS服务器,避免出现真·域名解析失败的问题

内容的提问来源于stack exchange,提问作者mqmarathon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:18:03