分享

Socket网络编程常见异常

 tracyf 2013-12-17

 概述

(1) Socket 类中有很多方法在声明时使用throws 抛出了一些异常,这些异常都是IOException 的子类。

(2)在Socket 类的方法中抛出最多的就是SocketException,其余还有七个异常可供Socket 类的方法抛出。
Java编程语言百科



图片 1


异常概述

(1)public class IOException extends Exception

这个异常是所有在Socket 类的方法中抛出的异常的父类。

(2)public class SocketException extends IOException

这个异常在Socket 类的方法中使用得最频繁。

(3)public class ConnectException extends SocketException

ConnectException 异常通常发生在由于服务器忙而未响应或是服务器相应的监听端口未打开。

(4)public class BindException extends SocketException

这个异常在多个Socket 或ServerSocket 对象绑定在同一个端口,而且未打开SO_REUSEADDR选项时发生。

(5)public class NoRouteToHostException extends SocketException

这个异常在遇到防火墙或是路由无法找到主机的情况下发生。

(6)public class UnknownHostException extends IOException

这个异常在域名不正确时被抛出。

(7)public class ProtocolException extends IOException

这个异常并不经常被抛出。由于不明的原因,TCP/IP 的数据包被破坏了,这时将抛出ProtocolException 异常。

(8)public class SocketTimeoutException extends InterruptedIOException

如果在连接超时和读取数据超时时间过后,服务器仍然未响应,connect 或read 方法抛SocketTimeoutException 异常。

常见异常情况

(1)java.net.BindException:Address already in use: JVM_Bind。该异常发生在服务器端进行newServerSocket(port)(port 是一个0,65536 的整型值)操作时。异常的原因是以为与port 一样的一个端口已经被启动,并进行监听。此时用netstat –an 命令,可以看到一个Listending 状态的端口。只需要找一个没有被占用的端口就能解决这个问题。

(2)java.net.ConnectException: Connection refused: connect。该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip 地址的机器不能找到(也就是说从当前机器不存在到指定ip 路由),或者是该ip 存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip 和port 是否写错了,如果正确则从客户端ping一下服务器看是否能ping 通,如果能ping 通(服务服务器端把ping 禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。

(3)java.net.SocketException: Socket is closed,该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket 的close 方法)再对网络连接进行读写操作。

(4)java.net.SocketException: (Connection reset 或者Connect reset bypeer:Socket write error)。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket 被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connectionreset)。

(5)java.net.SocketException: Broken pipe。该异常在客户端和服务器均有可能发生。在第4 个异常的第一种情况中(也就是抛出SocketExcepton:Connect reset bypeer:Socket write error 后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多