2012-06-13 17 views
1

我是網絡編程的新手。我感興趣的是可以通過Java服務器和C客戶端之間的套接字建立網絡連接,並保持連接無限打開? 我想保持連接打開以在客戶端之間交換XML數據。是否有可能將套接字打開無限時間

+8

*「保持連接無限打開?」*可悲的是。在短短的幾億年內,地球就會被汽化。 –

+1

不,最終宇宙將結束:-)更實際的一點是,經過一段時間後,連接可能會下降,並且由於網絡問題而必須重新建立。 –

+1

也許你的意思是「持久」而不是「無限」? 「無限」在Stackoverflow中帶出憤世嫉俗的一面。 :P – kevin628

回答

4

理論上可以保持服務器套接字打開無限長的時間;但是,使用客戶端套接字是不可能的。主要原因是因爲客戶端套接字依賴於處理數據的服務器端套接字,並且服務器套接字可能會關閉連接。

儘管可能會無限期地斷開連接,但實際方面通常會確保此類套接字不會永遠保持打開狀態。網絡中斷,中間路由器配置錯誤,帶寬耗盡,計算能力不足等等,都是爲了確保點對點連接充其量只是暫時的。

請注意,服務器端套接字是一個接收連接請求(產生具有自己的返回套接字的連接)的套接字,所以即使在沒有連接時也可以打開它。如果您認爲套接字是與另一臺計算機的開放連接,則需要重新調整思路,讓服務器套接字具有任何意義。

+2

不要忘記處理上面指出的令人討厭的'EarthVaporizedException'和'UniverseHasEndedException'。 –

+1

@LucaGeretti這樣的評論很有趣,但你真的只是避免回答這個問題。 Stackoverflow並不令人厭煩,但是包含宇宙熱死的答案在非通用時間尺度上並不有用。 –

+0

第一段中描述的問題不侷限於客戶端套接字。它是對稱的。任何一方都可以丟棄連接,任何中間節點也可以。 – EJP

2

沒有什麼是無限的(在計算中),但只要兩個應用程序都在運行,您就可以保持套接字連接處於打開狀態。

2

這是比答案更懇求,但作爲一個用戶,我發現套接字一直在下降。你不能無情地打開它們。 (A)讓用戶知道連接已經掉線並(B)使其易於重建連接。好的,這涉及到遊戲,但我有客戶不承認服務器已經關閉,服務器無法識別我是與丟棄連接的人相同的人。

相關問題