2011-12-21 96 views
0

我有一個Java服務器。客戶端通過TCP連接到服務器。這裏是我的問題的情況下: 1- 2客戶端連接到服務器(客戶端&客戶機B) 2-客戶服務器通信 3-「客戶端」客戶端沒有按從互聯網 4-斷開套接字連接當客戶端a再次連接到互聯網時,「客戶端a」可以在不連接到服務器的情況下向服務器發送消息,因此不會中斷 。客戶端和服務器之間的連接並沒有結束

我希望服務器和「客戶端a」之間的連接在「客戶端a」從互聯網斷開時結束。

您對此有任何意見?

+0

這意味着什麼:「何時」客戶端「再次連接到互聯網」時,客戶端a「可以在不連接服務器的情況下向服務器發送消息」。 – 2011-12-21 03:26:46

+0

首先客戶端從互聯網斷開連接,然後再次連接到互聯網。客戶端連接到互聯網後,客戶端和服務器之間不會打開新的套接字。它的行爲就像舊套接字連接沒有關閉(我認爲它實際上並沒有關閉)。因此客戶端可以將消息發送到服務器,因爲它從不與服務器斷開連接清楚嗎? – 2011-12-21 03:33:34

+0

是的,很明顯。那麼爲什麼這是一個問題?原來的連接從未破裂,也沒有人採取任何行動來打破它。如果您想要檢測斷開連接並通過斷開連接進行響應,即使該連接可以在斷開連接時仍然存在,您可以執行此操作。但這不是大多數人想要的,所以這不是默認行爲。編碼你想要的。 – 2011-12-21 03:36:42

回答

2

那麼有意見和有解決方案是兩回事:-)

我推薦了加入存活時間,在服務器端的連接。每發送一次保持活動狀態(幾秒?幾分鐘?),如果沒有保持活動響應,請終止服務器端的連接。

+0

+1這是網絡中必不可少的,應該始終使用 – John 2011-12-21 03:34:08

+0

Yeap你是對的,其實我需要解決方案(:我想用你的答案來澄清一些事情,你告訴我在服務器端實現每隔幾秒發送一次保持活動請求,如果沒有響應這個請求,這意味着客戶端不再連接到服務器了。是某種從服務器上ping客戶端的,對吧? – 2011-12-21 04:00:33

+0

是的,就是這樣,如果你沒有得到迴應,就殺了它。 – corsiKa 2011-12-21 04:44:35

0

當一臺機器與互聯網斷開連接時,它無法通過互聯網發送任何數據。這包括髮送關閉或中止連接所需的數據包。因此,如果客戶端斷開連接,客戶端無法關閉連接。如果需要這樣做,服務器必須這樣做。如果你需要這種能力,應用協議必須提供它。

相關問題