一個(gè)簡(jiǎn)單的socket程序, 當(dāng)client這邊socket.close調(diào)用后,可以看到socket.isClosed()是為true。但是服務(wù)器端這邊, server.accept() 得到的那個(gè)socket調(diào)用isClosed總是返回false。是否我在不借助心跳的情況下, server端無(wú)法僅通過api判斷client掉線?我想了幾種情況。如果client 最后調(diào)用了socket.close(), 那么server可以通過getInputStream.read() 讀到-1.如果client,沒有調(diào)用close, 直接通過小紅點(diǎn)終止了程序, server端getInputStream.read()會(huì)報(bào)異常但是, 1的話, client發(fā)送一段流過來(lái),沒有關(guān)閉的話, server端讀到最后也會(huì)讀到-1. 所以-1不能判斷連接的狀態(tài)。 2的話,似乎可以判斷連接斷了,只要異常發(fā)生了。但是總感覺是異常控制了業(yè)務(wù)流程。不太規(guī)范。
java Socket 程序server端調(diào)用isClosed為什么檢測(cè)不到狀態(tài)
炎炎設(shè)計(jì)
2019-04-17 11:09:19