作者CIHM (小新)
看板AndroidDev
標題[問題]socket偵測clint端或server端斷線問題
時間Sat Mar 23 00:34:19 2013
大家好,小弟有個問題:
假設有兩台手機用socket連接,這邊假設A(當server)跟B(當client)
請問要如何知道雙方其中一方以斷線?
已經試過 isconnect() 但沒辦法...
目前想到的辦法只有雙方每隔幾秒就檢查,
不知道還有沒有其他方法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.184.52
1F:推 gpc:網路的東西就是只能這樣做阿... 03/23 13:39
2F:推 gpc:不然你read怎會丟一個timeout的exception出來 03/23 13:41
3F:→ gpc:假設用鴿子封包發一個訊息 20秒後才到 這樣是否要算斷線呢 03/23 13:43
4F:→ CIHM:恩,謝謝. 想說有沒有API可用XD 03/23 15:13
5F:推 Killercat:其實TCP是有CLOSE-WAIT/LAST-ACK的 只是有些實作都選擇 03/24 13:21
6F:→ Killercat:time-out當close。 03/24 13:22
7F:→ Killercat:正常來講 Socket.close()或者OutputStream.close() 03/24 13:23
8F:→ Killercat:都會送出fin/ack(觸發Close-Wait)讓對方知道自己要斷掉 03/24 13:23
9F:→ Killercat:只是因為某些原因,大多數人都不喜歡這樣做 =P 03/24 13:24
10F:→ Killercat:當client/server都是自己做的話 又需要明確地知道對方 03/24 13:24
11F:→ Killercat:主動斷線了,那可以考慮用Socket.close主動通知 03/24 13:25
12F:→ Killercat:至於UDP,完全沒有這種機制,得自己實作通知封包 03/24 13:25