java Socket的怪異之處

 

怪異之一:
connect(SocketAddress endpoint):這個方法,嘗試連接server端,如果連接不上,就拋出IOException異常。如果連接成功了,就繼續執行下一步的代碼。

怪異之二:
boolean isConnected() :這個方法的結果僅僅代表這個socket曾經成功連接到了server,但並不表示現在這個時刻它和server仍保持連接狀態。
有心的人會發現,即使你已經切斷了server和socket之間的連接(比如server down掉了或網絡中斷了),但是這個函數執行的結果仍舊是true。所以,我認爲這個方法並不像我們想象中的那麼“管用”。

怪異之三:
考慮這樣一種情況:
1.socket和server socket已經建立了連接
2.但是由於網絡原因,這個時候連接中斷了。大多數系統都會有一個斷線重連的功能。
但是當你調試時,你可能會發現:網絡恢復正常後,用這個socket重新連接serverSocket,卻怎麼也連不上。
在這裏我的做法是:
socket=null;
//然後新建socket,而不是用原來的那個socket
socket = new Socket();
//接下來,用這個socket再去連接serverSocket,就可以成功連上了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章