java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题。希望大家有所帮助。那么我们就来看看有关java.net.SocketException的相关知识。

第1个异常是 java.net.BindException:Address already in use: JVM_Bind。

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

第2个异常是java.net.SocketException: 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 by peer:Socket write error)。

该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,***个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的***个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。

第5个异常是java.net.SocketException: Broken pipe。

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

编写网络程序时需要注意的问题

第1个问题是要正确区分长、短连接。所谓的长连接是一经建立就***保持。短连接就是在以下场景下,准备数据—>建立连接— >发送数据—>关闭连接。很多的程序员写了多年的网络程序,居然不知道什么是长连接,什么是短连接。

第2个问题是对长连接的维护。所谓的维护包括两个方面,首先是检测对方的主动断连(既调用 Socket的close方法),其次是检测对方的宕机、异常退出及网络不通。这是一个健壮的通信程序必须具备的。检测对方的主动断连很简单,主要一方主动断连,另一方如果在进行读操作,则此时的返回值只-1,一旦检测到对方断连,则应该主动关闭己方的连接(调用Socket的close方法)。

而检测对方的宕机、异常退出及网络不通常用方法是用“心跳”,也就是双方周期性的发送数据给对方,同时也从对方接收“心跳”,如果连续几个周期都没有收到对方心跳,则可以判断对方或者宕机或者异常推出或者网络不通,此时也需要主动关闭己方连接,如果是客户端可在延迟一定时间后重新发起连接。虽然Socket有一个keep alive选项来维护连接,如果用该选项,一般需要两个小时才能发现对方的宕机、异常退出及网络不通。

第3个问题是处理效率问题。不管是客户端还是服务器,如果是长连接一个程序至少需要两个线程,一个用于接收数据,一个用于发送心跳,写数据不需要专门的线程,当然另外还需要一类线程(俗称Worker线程)用于进行消息的处理,也就是说接收线程仅仅负责接收数据,然后再分发给Worker进行数据的处理。如果是短连接,则不需要发送心跳的线程,如果是服务器还需要一个专门的线程负责进行连接请求的监听。这些是一个通信程序的整体要求,具体怎么设计你的程序,就看你自己的设计水平了。

【责任编辑:张浩 TEL:(010)68476606】

点赞 0

java socket 异常处理_java.net.SocketException四大异常解决方案相关推荐

  1. java.net.SocketException四大异常解决方案

    java.net.SocketException四大异常解决方案 参考文章: (1)java.net.SocketException四大异常解决方案 (2)https://www.cnblogs.co ...

  2. java.net.SocketException四大异常解决方案---转

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  3. java socket 异常处理_Java Socket常见异常处理 和 网络编程需要注意的问题

    在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...

  4. Java导出Excel表格出现文件损坏异常解决方案

    Java导出Excel表格出现文件损坏异常解决方案 问题出现 问题出现 本人遇到这个问题,由于是第一次见,感觉无从下手.但是导出功能很常见,做的也很多,只有这个出现了文件损坏,那很可能是代码写的有问题 ...

  5. java socket 超时_Java Socket超时浅析

    套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条 ...

  6. java socket同步_Java socket客户端与服务端同步通信实例

    工作中没涉及有关JAVA SOCKET编程的实际经历,但理论大概了解.想正明一下自已的对JAVA SOCKET理解写个通信TEST,通过TEST验证了基本与理论相近.下面是TEST SRC CODE ...

  7. java socket通讯_Java socket通讯实现过程及问题解决

    这篇文章主要介绍了Java socket通讯实现过程及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本来是打算验证java socket是 ...

  8. java socket 卡住_Java socket通讯实现过程及问题解决

    这篇文章主要介绍了java socket通讯实现过程及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本来是打算验证java socket是 ...

  9. java future 异常处理_Java异常处理总结

    转自:http://blog.51cto.com/lavasoft/18920 Java异常处理总结 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if ...

  10. java spring异常处理_Java深入 - Spring 异常处理HandlerExceptionResolver

    spring的异常统一处理非常简单,首先我们需要看一下Spring中定义的HandlerExceptionResolver接口: /** * Interface to be implemented b ...

最新文章

  1. 数据结构(数据库)设计规范
  2. linux内存屏障浅析
  3. Django框架(二)
  4. 跟着大彬读源码 - Redis 6 - 对象和数据类型(下)
  5. 无论是工作还是生活都要记住这些话
  6. (dfs)迷宫最小步数
  7. 使用c#对xml文件进行解析 功能演示 161483724
  8. 《深度学习课程》-吴立德教授-复旦大学
  9. 移动端利用chrome浏览器在PC端进行调试方法
  10. 【小松教你手游开发】【游戏渲染】单色shader,纹理shader
  11. 系统架构师 项目经理 哪个更有前景_OLED和QLED电视有什么区别?哪个更好更有前景?...
  12. 软件工程---gjb438b 质量规范体系
  13. ros自带到期通知_iPhone自带的8个App,没想到这么好用!
  14. 科技云报道:资本涌入的计算机视觉,却逃不开商业化“摆烂”?
  15. 常用LINUX配置及SHELL命令集锦-SHELL命令
  16. 决胜B端(一)概述篇-走进B端
  17. MyBatis中jdbc和managed的区别
  18. 支付宝网商贷是雪中送炭么?
  19. 深蓝视觉SLAM课程第四讲--相机模型,非线性优化(G2O)
  20. 机器自动翻译古文拼音 - 十大宋词 - 如梦令·昨夜雨疏风骤 李清照

热门文章

  1. Cisco 静态NAT、动态NAT配置
  2. Dijkstra算法|单源最短路径|贪心算法
  3. 看完这道题,你敢在心里承认自己是高手么
  4. 广州仙村中学2021高考成绩查询,仙村中学(增城区)
  5. C# 计算程序运行耗时的方法
  6. http重定向到https
  7. 记录:Linux 设置文件夹 0777 权限失效问题
  8. LINUX给机器改名
  9. BAT中for循环如何执行多条命令
  10. VirtualBox中,Windows虚拟机与主机共享文件夹不能用之一例