tcp客户端无法以统一方式随机连接本地服务器

时间:2015-03-31 08:36:11

标签: c# tcp unity3d client

我有一个使用BeginConnect连接我的本地服务器的unity3d客户端,但无法建立随机连接,特别是在我重新启动统一编辑器之后。一旦连接,即使我多次重启游戏(而不是编辑器),它也会变得很正常。

wireshark显示发生问题时不会发送任何内容。

我有另一个非常相似的客户端,但它可以非常完美地连接到我的另一个类似的本地服务器。

知道导致问题的原因是什么?

提前致谢。

===

PS。

  1. 即使使用重试机制,客户端也可以连接到服务器,但后来的异步操作(BeginSendBeginReceive)可能仍会随机停止工作。
  2. 即使我在不​​运行服务器的情况下运行客户端,连接也可能没有响应。
  3. 我有代码关闭OnApplicationQuit()函数中的套接字:

    socket.Shutdown(SocketShutdown.Both);
    socket.Close();
    
  4. 另一个类似的客户端具有几乎相同的代码库,但效果非常好。
  5. 我发现了另一个类似的问题:http://answers.unity3d.com/questions/925955/socketbeginwrite-no-response-in-463f1.html?sort=oldest。但它无法解释为什么我的另一个客户(同一版本的Unity)有效。

2 个答案:

答案 0 :(得分:0)

我们的大多数TCP相关问题都与未能关闭侦听器线程或无法与服务器断开连接有关。

在编辑器环境中创建线程时,只要编辑器运行,线程就会继续存在,即使您停止游戏。如果以多线程方式使用TCP,则必须在某些OnDestroy或OnDisable方法中手动停止线程。

还要确保在停止游戏时断开与服务器的连接。

如果这些不足以解决您的问题,那么如果您可以分享一些导致此问题的示例代码,我可以提供帮助。

答案 1 :(得分:0)

根据这个http://answers.unity3d.com/questions/925955/socketbeginwrite-no-response-in-463f1.html?sort=oldest,似乎在unity3d v4.6.3f1中,单声道运行时在BeginXXX系列函数的实现中存在一些错误。

团结团队可能会在较新版本(未经测试)中修复这些错误,但我仍需要保留在v4.6.3f1上,因此解决方法是将BeginXXX替换为XXXAsync系列。 (测试并适用于我的问题)