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

Swift Socket.IO客户端无法连接本地Node.js Socket.IO服务器问题

解决Swift macOS应用连接本地Socket.IO服务器的主机找不到问题

问题分析

日志显示A server with the specified hostname could not be found,但浏览器可正常连接,说明问题出在Swift客户端的URL配置、Socket.IO参数设置或ATS的证书信任环节。

解决方案

1. 修正SocketManager的URL与配置参数

避免重复指定安全协议配置,确保URL格式完整且参数匹配:

let manager = SocketManager(socketURL: URL(string: "https://localhost:3000")!, config: [.log(true), .compress])
let socket: SocketIOClient

init() {
    socket = manager.defaultSocket
    addHandlers()
    socket.connect()
}
  • 无需额外设置.secure(true),因为URL已使用https://协议,Socket.IO客户端会自动识别
  • 确保URL末尾不要带多余的/,避免路径解析异常

2. 确认HTTPS证书的系统信任

虽然ATS默认允许localhost的HTTPS连接,但需确保证书有效且被macOS信任:

  • 将Node.js服务器使用的CA证书导入到macOS钥匙串,设置为“始终信任”
  • 检查证书的Subject Alternative Name是否包含localhost,避免域名不匹配

3. 排查应用网络权限与服务器连通性

  • 在Xcode的项目“签名与能力”中,确认应用已开启“网络”权限(勾选“Outgoing Connections (Client)”)
  • 用终端命令测试服务器连通性,验证证书与服务是否正常:
curl -v https://localhost:3000/socket.io/?transport=polling&EIO=4

额外说明

不要省略URL中的https://协议前缀,SocketManager的socketURL参数必须接收完整的URL,否则会导致路径解析错误(如出现https:/socket.io这类无效地址)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:01:10