本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!
上一篇:Java網(wǎng)絡(luò)編程從入門到精通(18):Socket類的getter和setter方法(2)
在Socket類中有很多方法在聲明時(shí)使用throws拋出了一些異常,這些異常都是IOException的子類。在Socket類的方法中拋出最多的就是SocketException,其余還有七個(gè)異常可供Socket類的方法拋出。這些異常的繼承關(guān)系如圖1所示。其中灰色背景框所描述的例外就是Socket類的方法可能拋出的異常。
圖1 異常類繼承關(guān)系圖
- public class IOException extends Exception
這個(gè)異常是所有在Socket類的方法中拋出的異常的父類。因此,在使用Socket類時(shí)只要捕捉(catch)這個(gè)異常就可以了;當(dāng)然,為了同時(shí)捕捉其它類中的方法的異常,也可以直接捕捉Exception。
- public class SocketException extends IOException
這個(gè)異常在Socket類的方法中使用得最頻繁。它也代表了所有和網(wǎng)絡(luò)有關(guān)的異常。但如果要想知道具體發(fā)生的哪一類的異常,就需要捕捉更具體的異常了。
- public class ConnectException extends SocketException
ConnectException異常通常發(fā)生在由于服務(wù)器忙而未響應(yīng)或是服務(wù)器相應(yīng)的監(jiān)聽端口未打開。如下面的語(yǔ)句將拋出一個(gè)ConnectException異常。
Socket socket = new Socket("www.ptpress.com.cn", 1234);
- public class BindException extends SocketException
這個(gè)異常在多個(gè)Socket或ServerSocket對(duì)象綁定在同一個(gè)端口,而且未打開SO_REUSEADDR選項(xiàng)時(shí)發(fā)生。如下面的四條語(yǔ)句將拋出一個(gè)BindException異常:
Socket socket1 = new Socket();
Socket socket2 = new Socket();
socket1.bind(new InetSocketAddress("127.0.0.1", 1234));
socket2.bind(new InetSocketAddress("127.0.0.1", 1234));
- public class NoRouteToHostException extends SocketException
這個(gè)異常在遇到防火墻或是路由無法找到主機(jī)的情況下發(fā)生。
- public class UnknownHostException extends IOException
這個(gè)異常在域名不正確時(shí)被拋出。如下面的語(yǔ)句將拋出一個(gè)UnKnownHostException異常:
Socket socket1 = new Socket("www.ptpress123.com.cn", 80);
- public class ProtocolException extends IOException
這個(gè)異常并不經(jīng)常被拋出。由于不明的原因,TCP/IP的數(shù)據(jù)包被破壞了,這時(shí)將拋出ProtocolException異常。
- public class SocketTimeoutException extends InterruptedIOException
如果在連接超時(shí)和讀取數(shù)據(jù)超時(shí)時(shí)間過后,服務(wù)器仍然未響應(yīng),connect或read方法將拋出SocketTimeoutException異常。
下一篇:Java網(wǎng)絡(luò)編程從入門到精通(20):HTTP協(xié)議簡(jiǎn)介
新浪微博:http://t.sina.com.cn/androidguy 昵稱:李寧_Lining