2011-02-28 56 views
1

我正在通過3G構建從Android設備到服務器的客戶端服務器應用程序。 由於提供3G的網絡運營商,客戶端設備位於NAT後面。因此,服務器不可能與客戶端建立連接。我可以採用投票的方法,但在這之前,我想用盡所有其他選項。有什麼方法(我還沒有找到)在客戶端和服務器之間保持TCP Socket連接打開,以便服務器能夠發起與客戶端的通信?持續TCP連接客戶端/服務器

這種情況是,基於服務器狀態的定期客戶端/服務器通信會非常規律地進行更新 - 我們每隔幾秒就會說話一次。 UDP會是更好的選擇嗎?也許不是因爲NAT問題仍然讓它頭疼。

我還有其他選擇嗎?

非常感謝

+1

你在問如何保持它打開(幾秒鐘的窗口) - 我想知道它是如何關閉你的第一個地方。 – corsiKa 2011-02-28 21:20:48

+0

不是。但是,如果我使用ObjectOutputStream將對象寫入服務器,那麼稍後可以重新使用它,而套接字仍處於打開狀態?或者我需要重新實例化ObjectOutputStream?我似乎無法找到任何這方面的信息。謝謝 – Joeblackdev 2011-02-28 21:43:57

回答

4

NAT並不意味着服務器不能發送任何東西。只需打開客戶端的連接,並讓服務器發送它記錄的任何事件。您可能還需要包含簡單的心跳協議,以使客戶端和服務器註冊斷開的連接並使NAT知道連接仍在使用中。

+0

你好。謝謝回覆。服務器可以發送信息,儘管只是響應來自客戶端的ObjectOutputStream.writeObject(...)。由於NAT問題,它無法啓動到客戶端的連接。 – Joeblackdev 2011-02-28 21:45:43

2

只需打開一個套接字並使用它,包括ObjectOutputStream。如果中間系統斷開連接,您將收到一個異常,然後關閉並重復。

相關問題