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

Swift UDP连接发送正常,receiveMessage抛出连接拒绝错误求解决

UDP连接receiveMessage报错排查建议

问题代码

func send(_ payload: Data) {
    connection!.send(content: payload, completion: .contentProcessed({ sendError in
        if let error = sendError {
            NSLog("Unable to process and send the data: \(error)")
        } else {
            NSLog("Data has been sent")
            connection!.receiveMessage { (data, context, isComplete, error) in
                if(isComplete){
                    guard let myData = data else { return }
                    NSLog("Received message: " + String(decoding: myData, as: UTF8.self))
                }else{
                    NSLog("XYITA")
                }
            }
        }
    }))
}

问题现象

UDP连接状态正常,connection.send可正常执行,但调用connection.receiveMessage时抛出底层错误:

[connection] nw_socket_get_input_frames [C1:1] recvmsg(fd 17, 9216 bytes) [61: Connection refused]

排查及解决建议

  • 验证服务端响应能力
    用nc -u <服务端IP> <端口>手动发送测试数据,确认是否能收到服务端回复。如果手动也收不到,说明问题在服务端:可能是服务端未绑定目标端口、防火墙拦截了响应数据包、服务端逻辑未处理UDP请求并返回数据。

  • 检查本地端口与连接状态
    用lsof -i :<本地端口>查看端口占用情况,确保本地用于接收的端口未被其他进程占用;同时在调用receiveMessage前,确认connection的状态确实为ready,避免在连接未完全就绪时触发接收逻辑。

  • 补全错误处理逻辑
    当前代码未处理receiveMessage回调的error参数,建议先捕获并打印该错误,获取更具象的错误信息:

    connection!.receiveMessage { (data, context, isComplete, error) in
        if let error = error {
            NSLog("Receive detailed error: \(error)")
            return
        }
        // 原有接收逻辑
    }
    
  • 核对NWConnection配置
    确认初始化connection时的NWParameters配置正确:UDP模式下是否开启了必要的选项(如广播/多播权限,若涉及这类场景),是否指定了正确的服务端地址与端口。

  • 检查App网络权限
    确认Info.plist中已配置必要的网络权限:如涉及本地局域网通信,需添加NSLocalNetworkUsageDescription;若访问非HTTPS服务,需配置NSAppTransportSecurity的例外规则。

  • 考虑UDP协议特性
    虽然报错是"Connection refused"(偏向目标端主动拒绝),但UDP本身无连接、不保证交付,也需排查服务端是否因请求格式错误、超时等原因未生成响应,或响应数据包在网络传输中丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:39:08