[問題]socket偵測clint端或server端斷線問題

看板AndroidDev作者 (小新)時間12年前 (2013/03/23 00:34), 編輯推噓3(309)
留言12則, 3人參與, 最新討論串1/1
大家好,小弟有個問題: 假設有兩台手機用socket連接,這邊假設A(當server)跟B(當client) 請問要如何知道雙方其中一方以斷線? 已經試過 isconnect() 但沒辦法... 目前想到的辦法只有雙方每隔幾秒就檢查, 不知道還有沒有其他方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.184.52

03/23 13:39, , 1F
網路的東西就是只能這樣做阿...
03/23 13:39, 1F

03/23 13:41, , 2F
不然你read怎會丟一個timeout的exception出來
03/23 13:41, 2F

03/23 13:43, , 3F
假設用鴿子封包發一個訊息 20秒後才到 這樣是否要算斷線呢
03/23 13:43, 3F

03/23 15:13, , 4F
恩,謝謝. 想說有沒有API可用XD
03/23 15:13, 4F

03/24 13:21, , 5F
其實TCP是有CLOSE-WAIT/LAST-ACK的 只是有些實作都選擇
03/24 13:21, 5F

03/24 13:22, , 6F
time-out當close。
03/24 13:22, 6F

03/24 13:23, , 7F
正常來講 Socket.close()或者OutputStream.close()
03/24 13:23, 7F

03/24 13:23, , 8F
都會送出fin/ack(觸發Close-Wait)讓對方知道自己要斷掉
03/24 13:23, 8F

03/24 13:24, , 9F
只是因為某些原因,大多數人都不喜歡這樣做 =P
03/24 13:24, 9F

03/24 13:24, , 10F
當client/server都是自己做的話 又需要明確地知道對方
03/24 13:24, 10F

03/24 13:25, , 11F
主動斷線了,那可以考慮用Socket.close主動通知
03/24 13:25, 11F

03/24 13:25, , 12F
至於UDP,完全沒有這種機制,得自己實作通知封包
03/24 13:25, 12F
文章代碼(AID): #1HJ8WEWG (AndroidDev)