2014-08-30 80 views
1

我正在製作一個應用程序,哪兩個設備應該通過TCP套接字進行通信。一個設備是我的三星手機,另一個是仿真器。我將模擬器設置爲客戶端,將手機設置爲服務器。客戶端連接到電話並工作正常(發送和接收),但幾分鐘後它停止接收,但發送沒有問題。網絡部分有數百行代碼,其中有許多函數使得閱讀變得複雜,所以我決定不在這裏寫,但我懷疑問題來自模擬器本身。這意味着如果我使用真實設備而不是仿真器,這不會發生。網絡代碼的很多部分與服務器和客戶端類似,並且服務器正常運行。只有模擬器中的客戶端套接字停止接收。它可以發送(所以連接是活着的),我檢查線程。他們也活着。你是否同意這可能是模擬器的問題?套接字發送但在仿真器中沒有收到

回答

0

我覺得這是你的應用程序,而不是在模擬器中的一個問題,這是因爲:

  • Android模擬器是非常低的水平,這是它模擬一個硬件,然後運行在頂部的正常軟件它。因此它不知道像TCP這樣的高級協議,它只模擬網卡。
  • TCP是一種協議,所有消息都由對等方確認。如果仿真器在接收消息時遇到問題,它可能也不會收到您發送的數據包的確認。但是這會使你的應用程序內部進一步發送失敗,這與你發送作品的聲明相反。
  • 如果在模擬器內部會出現這樣的問題,其他人也會注意到。
+0

謝謝但是您確定「未收到確認會導致進一步發送失敗,以便服務器不會收到新消息」嗎?所有的消息都傳遞給服務器,我在服務器端檢查這一點,而不是在客戶端。但你確定這個說法嗎? – user2808671 2014-08-30 11:14:31

+0

是的,這是TCP的工作原理。如果確認沒有回到android內核,它會將連接標記爲斷開,並且進一步寫入將失敗。 – 2014-08-30 11:32:54

+0

也許確認收到,但沒有其他數據包!我一遍又一遍地查看了整個代碼,但沒有發現任何導致服務器接收到但客戶端(模擬器)沒有收到的信息 – user2808671 2014-08-30 11:36:11

相關問題