2015-03-31 226 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

相關問題