网络作为通讯的媒介充满了各种问题。随着大量的计算机连接到了全球Internet,遭遇到某
个主机名称无法解析、某个主机从网络断开了、或者某个主机在连接的过程中被锁定了的情形在
软件应用程序的生存周期中是很可能遇到的。因此,知道引起应用程序中出现的这类问题的条件
并很好的处理这些问题是很重要的。当然,并不是每个程序都需要精确的控制,在简单的应用程
序中你可能希望使用通用的处理方法处理各种问题。但是对于更高级的应用程序,了解运行时可
能出现的特定套接字异常是很重要的。
注意
所有的特定套接字异常都扩展自SocketException,因此通过捕捉该异常,你可以捕捉到所有
的特定套接字的异常并编写一个通用的处理程序。此外,SocketException扩展自
java.io.IOException,如果你希望提供捕捉所有I/O异常的处理程序可以使用它。
1、 SocketException
java.net.SocketException表现了一种通用的套接字错误,它可以表现一定范围的特定错误
条件。对于更细致的控制,应用程序应该捕捉下面讨论的子类。
2、 BindException
java.net.BindException表明没有能力把套接字帮定到某个本地端口。最普通的原因是本地
端口已经被使用了。
3、ConnectException
当某个套接字不能连接到特定的远程主机和端口的时候,java.net.ConnectException就会发
生。发生这种情况有一个原因,例如远程服务器没有帮定到某个端口的服务,或者它被排队的查
询淹没了,不能接收更多的请求。
4、 NoRouteToHostException
当由于出现网络错误,不能找到远程主机的路由的时候产生
java.net.NoRouteToHostException异常。它的起因可能是本地的(例如软件应用程序运行的网络
正在运行),可能是临时的网关或路由器问题,或者是套接字试图连接的远程网络的故障。另一
个普通原因是防火墙和路由器阻止了客户端软件,这通常是个持久的限制。
5、InterruptedIOException
当某个读取操作被阻塞了一段时间引起网络超时的时候产生
java.net.InterruptedIOException异常。处理超时问题是使代码更加牢固和可靠的很好的途径。
今天我就遇到了2008-03-30 21:54:52,621 ERROR [STDERR] java.sql.SQLException: JZ006: Caught IOException: java.net.NoRouteToHostException: No route to host
的错误,我tail -f 看jboss的日志持续观察,后来就没有这个错误了。
然后访问就正常了。难道是是本地的(例如软件应用程序运行的网络
正在运行),可能是临时的网关或路由器问题,或者是套接字试图连接的远程网络的故障?
System.out.println("begin");
try {
Socket socket = new Socket(InetAddress.getByName( "192.168.135.214"),2066);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("end??");
这段codes可以看exceptions。