`
jiaguwen123
  • 浏览: 406794 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

java socket类的异常总结

 
阅读更多
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则可以修改,这个修改只对当前窗口有效。

  • bj.rar (6.4 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    10万字208道Java经典面试题总结(附答案)_Java攻城狮-CSDN博客_java经典面试题及答案.pdf

    Java经典面试题总结 Java是一种广泛应用于企业级软件...Java经典面试题总结涵盖了Java基础知识、语法基础、面向对象编程、异常处理、多线程编程、集合框架和网络编程等方面内容,为Java开发人员提供了系统的知识架构。

    java各知识点详细总结.docx

    Java基础语法:Java是一种面向对象编程语言,它支持类、对象、继承、多态等概念。Java语法包括变量、数据类型、运算符、控制...Java中的网络编程可以通过Java Socket API来实现,可以进行TCP、UDP等协议的网络通信。

    Java重点知识总结

    第1章 1、Java三大平台: Java ME 、Java SE (JDK)、Java EE 2、平台无关性 Application、Applet程序结构 ,Java程序编译、运行过程 ,Application命令行参数 ...(设计自定义异常类,throw、catch异常)

    JAVA基础知识点总结精品资料(吐血推荐).doc

    为了帮助读者快速掌握 JAVA 语言的基础知识,本资源总结了 JAVA 的基础知识点,包括 JAVA 语言的概述、开发环境、基本语法、面向对象编程、异常处理、多线程编程、网络编程等方面的知识点。 一、JAVA 语言概述 ...

    java.net.SocketException Connection reset 解决方法

    在 Java 中,Socket 是一个类,它提供了创建连接、发送和接收数据的方法。 * SocketException:SocketException 是一种 Java 异常,它发生在 Socket 编程中,包括连接断开、数据发送失败等情况。 * Connection reset...

    JAVA面向对象程序设计(期末考试试题及答案)

    本文总结了 JAVA面向对象程序设计的知识点,涵盖了 Java 语言的基本语法、面向对象编程的概念、异常处理、多线程编程、网络编程、数据库编程等方面的知识。 一、Java 基础知识点 1. Java 语言的基本语法规则:变量...

    java毕业实习总结.doc

    Java 语言支持 inter 应用开发,在根本的 Java 应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法...

    java包与接口实验报告

    3)网络包(java.net):支持Internet的TCP/IP协议,用于实现Socket编程;提供了与Internet的接口,支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。 4)抽象图形用户接口包(javax.swing):实现了...

    Java基础知识总结(超详细整理)

    另外,在Java语言中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的自动收集等),有效地减少了错误,使得Java应用程序更加健壮。 4. 安全性:Java通常被用于网络环境中,为此,Java提供了一个...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 ...

    JAVA基础课程讲义

    第一个JAVA程序的总结和提升 20 常用Java开发工具 20 常用dos命令 21 本章笔试作业 21 本章上机操作 21 第二章(1) 编程的基本概念 22 注释 22 标识符 22 关键字/保留字 23 变量(variable) 24 常量(Constant) 25 命名...

    Java面试题大全.pdf

    7. 健壮性:Java的强类型机制、异常处理、垃圾回收机制等都是Java健壮性的重要保证。 8. 高性能:Java的高性能主要是相对其他高级脚本语言来说的,随着JIT(Just In Time)的发展,Java的运行速度也越来越高。 9. ...

    深圳职业技术学院——《面向对象程序设计(Java)》B 答案

    面向对象程序设计...* 本文总结了面向对象程序设计的基本概念、Java 语言基础、类和对象、继承和多态、构造方法、方法、数组和字符串、异常处理、输入输出、多线程编程、数据库编程、网络编程和文件操作等知识点。

    最全java面试题及答案(208道).pdf

    本文总结了Java面试题及答案,涵盖了Java基础、容器、多线程、反射、对象拷贝、JavaWeb、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/SpringCloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 ...

    [拯救者]java期末急救_1700465237758.pdf

    十、Java中的异常处理 * try-catch语句 * finally语句 * throw语句 十一、Java中的类和对象 * 类的定义 * 对象的创建 * 类的继承和实现 十二、Java中的接口和抽象类 * 接口的定义 * 抽象类的定义 * 接口和抽象...

    最新Java经典笔试面试题.docx

    本文档总结了Java经典笔试面试题,涵盖Java基础知识、面向对象编程、继承和多态、接口和抽象类、异常处理、多线程编程、IO流、网络编程等领域。 一、选择题 1. 面向对象的特征包括封装、继承、多态、抽象等特征,...

    面试题全集(周瑜).pdf

    以下是Java基础知识点的总结,涵盖了Java语言的基本概念、Java虚拟机(JVM)、Java集合框架、Java多线程编程、Java异常处理、Java反射机制、Java IO流、Java网络编程、Java安全机制等方面。 一、Java语言基础 * ...

    Java后端面试手册-Java基础知识

    Java基础知识:包括Java语言特性、面向对象编程、集合框架、异常处理等基础知识点。 数据库和SQL:涵盖数据库基础知识、SQL语句的编写和优化、数据库事务等相关内容。 Web开发:包括常用的Web开发框架(如Spring、...

Global site tag (gtag.js) - Google Analytics