2018年1月9日 星期二

[Android] 正確關閉Socket

過去總是以為執行到了Socket.Close()時,Socket就結束了,沒有特別去注意,

直到遇到連接的裝置是Wi-Fi Module時,有TCP連線數限制時,發現卡死了,

唯有重開手機才有用,研究了很久,發現是以下幾個原因造成的。

1.因為動作需要頻繁重新建立Socket。

2.Android底層並不會在Socket.Close()時就立即關閉Socket,會等到資料傳輸完畢。


若要強制Socket立即關閉,在關閉Socket前先shutdown輸出入流。


socket.shutdownInput();  
socket.shutdownOutput();  

注意,這二行必須在inputstream.close()及outputstream.close()之前。




參考資料:

如何正确关掉socket?直接socket.close( )是否有风险?

沒有留言:

張貼留言