| | | | | | | [文章信息] | | | 作者: | 陶刚编译 | | 时间: | 2003-09-30 | | 出处: | yesky | | 责任编辑: | 方舟 | |
| [文章导读] | | | 讨论了套接字类的功能后,本文分析了一个完整的TCP客户端程序 | |
| |
|
| | | |
|
|
|
|
|
八、异常处理:特定套接字的异常
网络作为通讯的媒介充满了各种问题。随着大量的计算机连接到了全球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异常。处理超时问题是使代码更加牢固和可靠的很好的途径。
九、总结
在TCP中使用套接字通讯是你应该掌握的一种重要的技术,因为目前使用的大多数有趣的应用程序协议都是在TCP上出现的。Java套接字API提供了一种清晰的、易于使用的机制,利用这种机制开发者可以作为服务器接受通讯或作为客户端启动通讯。通过使用前面讨论的概念(包括Java下的输入和输出流),过渡到基于套接字的通讯是很直接的。有了建立在java.net程序包中的异常处理水平后,很容易处理运行时发生的网络错误。
|
|
|
|
|
|
|
|