0

一位同事和我在运行几乎相同的 Windows 7 安装的相同硬件上具有相同的代码。我们都使用 Unity3d 中的 C#,以及unity3d-tuio包的最新 SVN 检查。TUIO 是一种基于开放声音控制的 UDP 协议,用于发送有关触摸屏交互的数据。在我的机器上,该应用程序在我第一次运行时运行良好(尽管启动时有一个奇怪的约 5 秒延迟),但任何后续启动该应用程序时,它都会引发以下异常:

SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.

System.Net.Sockets.Socket.Bind (System.Net.EndPoint local_end)
System.Net.Sockets.UdpClient.InitSocket (System.Net.EndPoint localEP)
System.Net.Sockets.UdpClient..ctor (System.Net.IPEndPoint localEP)
Tuio.TuioTracking.Start () (at Assets/Plugins/MindstormTuio/Scripts/TuioReceiver/TuioTracking.cs:70)
UnityEngine.Debug:LogException(Exception)

对于我的同事来说,启动时没有奇怪的延迟,并且应用程序可以根据需要重新启动多次而不会产生不良影响。

如果我netstat -a -n -o在我的机器上运行,我会看到一个 UDP 连接 -- UDP 0.0.0.0:3333 *:* 6088-- 即使在应用程序和 Unity 编辑器退出后也是打开的。我tasklist /F "PID EQ 6088"在第一次运行应用程序时确定了 PID(在本例中为 6088)是 Unity.exe(Unity 编辑器)。似乎第一次执行该应用程序时,Unity.exe 会抓取端口 3333 并且不会释放它。即使在退出 Unity 编辑器后,该UDP 0.0.0.0:3333 *:* 6088条目也会出现在 netstat 中。

似乎是我的开发机器特有的配置问题,因为我同事的机器没有显示它。

任何想法哪些配置问题可能导致此问题?

4

1 回答 1

0

我不太确定为什么这是解决方案,但在任务管理器中,我注意到adb.exeAndroid Debug Bridge 在我第一次启动 Unity 应用程序时正在运行。在我停止播放或退出 Unity 后它不会关闭——如果我强制退出 adb.exe,端口将被释放,并且 ADB 在应用程序的后续运行期间不再启动。当我开始在 Unity 中玩我的应用程序(它不是 Android 版本)时,我不确定为什么要启动 ADB,所以我很困惑。如果有人了解为什么会解决问题,请告诉我?

于 2013-08-29T19:25:40.087 回答