我有一个使用BeginConnect
连接我的本地服务器的unity3d客户端,但无法建立随机连接,特别是在我重新启动统一编辑器之后。一旦连接,即使我多次重启游戏(而不是编辑器),它也会变得很正常。
wireshark显示发生问题时不会发送任何内容。
我有另一个非常相似的客户端,但它可以非常完美地连接到我的另一个类似的本地服务器。
知道导致问题的原因是什么?
提前致谢。
===
PS。
BeginSend
和BeginReceive
)可能仍会随机停止工作。 我有代码关闭OnApplicationQuit()
函数中的套接字:
socket.Shutdown(SocketShutdown.Both);
socket.Close();
答案 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系列。 (测试并适用于我的问题)