2015-03-31 189 views
0

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

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

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

任何想法是什么导致了这个问题?

在此先感谢。

===

PS。即使重试机制

  1. 客户端可以连接到服务器succssfully但后来的异步操作(BeginSend & BeginReceive)仍可能会随机停止工作。
  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。但它无法解释为什么我的另一个客户(统一版本)工作。

回答

0

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

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

另外,请确保您在停止游戏时与服务器断开连接。

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

+0

但是另一个类似的客户端呢,它工作得很好。 – crazybie 2015-03-31 09:54:24

+0

只要你认真处理我上面提到的Unity编辑器特定的事情,它就应该可以工作。也许你的代码有一个bug或什么的。你尝试建立和运行? – 2015-03-31 10:22:48

+0

我使用socket.BeginConnect和AsyncCallback来处理结果。即使经过很长时间,回调也永远不会被调用。即使当我运行客户端而不运行本地服务器时,它也没有响应。从MSDN开始,运行时将使用后台线程来处理请求,那么请求是否可能被运行时间所拒绝? – crazybie 2015-04-01 06:03:46

相关问题