使用Java socket編寫程式時,通常會遇到幾種種異常:BindException、UnknownHostException、ConnectException、SocketTimeoutException。
BindException
會發生在Socket或ServerSocket的bind()操作中,如果無法與本機指定的IP地址或連接埠綁定,就會拋出此異常。
有兩種情況:
一台主機上可以裝N個網卡,可以有多個IP地址,在綁定的時候需要指定綁定到哪一個IP地址上,如果指定的IP地址不在當前主機上,會拋出異常。
UnknownHostException
connect的時候,如果指定的主機名稱或IP地址無法識別,就會拋出此異常。
ConnectException
發生在connect中,有兩種情況:
- 伺服器沒有監聽指定的連接埠
- 伺服器socket指定的backlog隊列已滿
兩種情況的異常資訊相同:
java.net.ConnectException: Connection refused: connectat java.net.PlainSocketImpl.socketConnect(Native Method)at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)at java.net.Socket.connect(Socket.java:529)at java.net.Socket.connect(Socket.java:478)
SocketTimeoutExceptionconnect方法可以指定逾時時間,如果在timeout之間沒有能串連成功,就會拋出此異常。