Java Socket 网络编程常见异常 小鱼儿 2022-03-17 14:28 167阅读 0赞 原文:http://blog.csdn.net/xyz\_lmn/article/details/7901474 1.**java.net.SocketTimeoutException**.这个异常比较常见,socket超时。一般有2个地方会抛出这个,一个是connect的时候,这个超时参数由connect(SocketAddress endpoint,int timeout)中的后者来决定,还有就是setSoTimeout(int timeout),这个是设定读取的超时时间。它们设置成0均表示无限大。 2.**java.net.BindException:Address already in use: JVM\_Bind**。该异常发生在服务器端进行new ServerSocket(port) 或者socket.bind(SocketAddress bindpoint)操作时。 原因:与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。 3.**java.net.ConnectException: Connection refused: connect**。该异常发生在客户端进行new Socket(ip, port)或者socket.connect(address,timeout)操作时. 原因:指定ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。应该首先检查客户端的ip和port是否写错了,假如正确则从客户端ping一下服务器看是否能ping通,假如能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动。 4.**java.net.SocketException: Socket is closed**,该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。 5.**java.net.SocketException: Connection reset或者Connect reset by peer:Socket write error**。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是假如一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端假如在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。 对于服务器,一般的原因可以认为: a) 服务器的并发连接数超过了其承载量,服务器会将其中一些连接主动Down掉. b) 在数据传输的过程中,浏览器或者接收客户端关闭了,而服务端还在向客户端发送数据。 6.**java.net.SocketException: Broken pipe**。该异常在客户端和服务器均有可能发生。在抛出SocketExcepton:Connect reset by peer:Socket write error后,假如再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。 对于4和5这两种情况的异常,需要特别注意连接的维护。在短连接情况下还好,如果是长连接情况,对于连接状态的维护不当,则非常容易出现异常。基本上对长连接需要做的就是: a) 检测对方的主动断连(对方调用了Socket的close方法)。因为对方主动断连,另一方如果在进行读操作,则此时的返回值是-1。所以一旦检测到对方断连,则主动关闭己方的连接(调用Socket的close方法)。 b) 检测对方的宕机、异常退出及网络不通,一般做法都是心跳检测。双方周期性的发送数据给对方,同时也从对方接收“心跳数据”,如果连续几个周期都没有收到对方心跳,则可以判断对方或者宕机或者异常退出或者网络不通,此时也需要主动关闭己方连接;如果是客户端可在延迟一定时间后重新发起连接。虽然Socket有一个keep alive选项来维护连接,如果用该选项,一般需要两个小时才能发现对方的宕机、异常退出及网络不通。 7.**java.net.SocketException: Too many open files** 原因: 操作系统的中打开文件的最大句柄数受限所致,常常发生在很多个并发用户访问服务器的时候。因为为了执行每个用户的应用服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄的缺乏。 解决方式: a) 尽量把类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄。 b) java的GC不能关闭网络连接打开的文件句柄,如果没有执行close()则文件句柄将一直存在,而不能被关闭。也可以考虑设置socket的最大打开数来控制这个问题。对操作系统做相关的设置,增加最大文件句柄数量。ulimit -a可以查看系统目前资源限制,ulimit -n 10240则可以修改,这个修改只对当前窗口有效。
相关 Java网络编程中常见Socket问题实例 在Java网络编程中,经常会遇到各种Socket相关的问题。下面是一些常见的实例: 1. **连接失败**: - 例子:尝试连接到一个不存在的服务器IP。 ``` 我会带着你远行/ 2024年09月20日 13:42/ 0 赞/ 9 阅读
相关 Java网络编程:Socket连接异常实例 在Java的网络编程中,Socket连接可能会出现各种异常。以下是一个关于Socket连接异常的实例: ```java import java.io.IOException; 待我称王封你为后i/ 2024年09月19日 22:36/ 0 赞/ 13 阅读
相关 Java网络编程:Socket通信的常见问题 在Java网络编程中,Socket通信过程中可能会遇到一些常见问题。以下是这些问题及解决方法: 1. **连接失败**: - 确保服务器的端口号正确。 - 检查客 ╰+攻爆jí腚メ/ 2024年09月18日 14:30/ 0 赞/ 7 阅读
相关 Java网络编程问题:Socket通信异常处理 在Java的Socket通信中,可能会遇到各种异常。以下是如何进行异常处理的一般步骤: 1. **捕获异常**:在Socket连接的代码块中,使用try-catch语句来捕获 比眉伴天荒/ 2024年09月15日 23:15/ 0 赞/ 13 阅读
相关 Java网络编程:Socket连接异常处理 在Java的网络编程中,Socket是用于建立和管理两个应用进程间的通信的。在使用Socket时,可能会遇到各种异常,这时候我们需要进行适当的异常处理。 以下是一个简单的So 柔情只为你懂/ 2024年09月13日 00:42/ 0 赞/ 18 阅读
相关 Java网络编程:socket连接异常解析 在Java的网络编程中,socket连接可能会出现各种异常。下面是对几种常见异常的解析: 1. **SocketException**: - `Socket.conne 墨蓝/ 2024年09月12日 12:33/ 0 赞/ 17 阅读
相关 Java网络编程中常见Socket问题 在Java网络编程中,Socket是一种用于客户端和服务器之间通信的API。以下是一些常见的Socket问题及解决方法: 1. **连接失败**:可能由于服务器地址错误、服务 朴灿烈づ我的快乐病毒、/ 2024年09月11日 16:27/ 0 赞/ 27 阅读
相关 Java 网络 socket 编程 使用套接字实现基于 TCP 协议的服务器和客户机程序 依据 TCP 协议,在 C/S 架构的通讯过程中,客户端和服务器的 Socket 动作如下: 客户端: 1.用服务器 古城微笑少年丶/ 2022年04月18日 05:51/ 0 赞/ 250 阅读
相关 Java Socket 网络编程常见异常 原文:http://blog.csdn.net/xyz\_lmn/article/details/7901474 1.java.net.SocketTimeoutExcept 小鱼儿/ 2022年03月17日 14:28/ 0 赞/ 168 阅读
还没有评论,来说两句吧...