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

HoloLens 2与PC端Unity应用TCP连接仅可正常工作一次故障求助

故障根因
  • 服务端(HoloLens 2)侧:单次连接断开后未主动释放当前StreamSocket资源,旧连接的ID上下文残留,导致新连接请求到达时,监听器无法正确分配资源处理新连接,触发你看到的「无对应ID设备连接」的报错。
  • 客户端(PC侧):单次连接断开后,已创建的TcpClient实例失效、监听线程自动退出,没有自动重置和重连逻辑,发起新的操作时直接使用已失效的连接对象,触发「远程主机强制关闭现有连接」报错。
  • 额外问题:当前服务端逻辑同一时间仅支持处理1个客户端连接,没有多连接兼容逻辑,旧连接未释放的情况下无法接收新连接。
修复步骤

一、HoloLens 服务端代码修改

  1. 连接生命周期结束后主动释放Socket资源,修改Listener_ConnectionReceived方法的异常捕获块:
catch (Exception e)
{
    Debug.Log("disconnected!!!!!!!! " + e);
    // 新增:释放当前连接的Socket资源,解除占用
    if (args.Socket != null)
    {
        args.Socket.Dispose();
    }
}
  1. 可选:如果需要支持多客户端同时连接,需要将每个连接的处理逻辑放到独立的异步任务中,避免当前连接的死循环阻塞监听器接收新连接。
  2. 权限检查:确认UWP打包的清单文件Package.appxmanifest中已开启以下权限:
    • Internet(客户端和服务器)
    • 专用网络(客户端和服务器)

二、PC 客户端代码修改

  1. 增加连接失效后的重置逻辑,修改ListenForData方法的异常捕获块:
catch (SocketException socketExcep)
{
    Debug.Log("socket exception:" + socketExcep);
    // 新增:连接失效后释放旧客户端资源
    if (client != null)
    {
        client.Close();
        client.Dispose();
        client = null;
    }
    // 可选:添加自动重连逻辑,或者暴露重连方法给外部调用
}
  1. 增加手动重连入口,示例添加按R键触发重连的逻辑到Update方法:
private void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        SendMessage();
    }
    // 新增:按R键触发重连
    if (Input.GetKeyDown(KeyCode.R) && client == null)
    {
        ConnectToTcpServer();
    }
}
  1. 发送消息前增加连接有效性判断,修改SendMessage方法的前置判断:
private void SendMessage()
{
    // 修改:同时判断客户端存在且连接有效
    if(client == null || !client.Connected)
    {
        Debug.Log("无可用TCP连接,请先重连");
        return;
    }
    // 原有逻辑保持不变
    ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:57:00