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 命令,可以看到一个Listening状态的端口。
只需要找到一个没有被占用的端口就能解决这个问题。
------------------------------------------------------------------------------------------------------

3.java.net.ConnectException:Connection refused:connect

该异常发生在客户端进行new Socket(ip, port)或者socket.connect(address, timeout)操作时。
原因:指定ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),
或者是该ip存在,但找不到指定的端口进行监听。应该首先检查客户端的ip和port
是否写错了,假如能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网络编程常见异常(转)相关推荐

  1. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  2. Java Socket网络编程

    一.Socket概述 ​ Java网络编程主要涉及的内容是Socket编程. ​ Socket(套接字),是网络上两个程序之间实现数据交换的一端,它既可以发送请求,也可以接受请求,一个Socket由一 ...

  3. Java Socket网络编程--模仿写一个本机QQ聊天程序

    public class Client3 extends JFrame {static JTextArea area;JTextField field;JButton button;static Pr ...

  4. Linux C++/Java/Web/OC Socket网络编程

    一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...

  5. Java之socket网络编程

    socket网络编程 文章目录 socket网络编程 一.网络编程概述 二.网络通信要素概述 三.IP和端口号 四.网络协议 五.TCP网络编程 六.UDP网络编程 一.网络编程概述 网络编程的目的 ...

  6. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  7. 什么是java socket_java 网络编程,Socket编程

    Java的网络编程主要涉及到的内容是Socket编程,那么什么是Socket呢?简单地说,Socket,套接字,就是两台主机之间逻辑连接的端点.TPC/IP协议是传输层协议,主要解决数据如何在网络中传 ...

  8. JAVA的网络编程【转】

    转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...

  9. socket网络编程 java_Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

最新文章

  1. WINCE--VS2005不能连接连线调试
  2. Windows(64位IIS)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  3. IE遭破坏后的自我修复方法
  4. 书------编程(理论方面)
  5. 1.14 sort()数组排序(升序和降序)
  6. python操作excel_使用Python操作Excel时必学的3个库
  7. 《自己动手写操作系统》读书笔记——初识保护模式
  8. 【架构】浅谈web网站架构演变过程
  9. CA认证技术的研究与设计
  10. 牛顿插值法在Matlab上的实现
  11. Linux开机自动挂载Windows分区的两种方法
  12. 期权、期货及其他衍生品 Chapter14 维纳过程与伊藤引理
  13. 突破蓝牙壁垒:aptX技术完美解决无线音频的延时问题
  14. android%3cspan,GIS API (Javascript、IOS、Android版本)
  15. 使用 IDEA 文件统计工具 Statistic
  16. 数据库kettle,datax,DBMigration,RazorSQL几款迁移工具使用感受(以及如何迁移表的结构如主键,索引,约束等)
  17. java 建造者模式的实际应用场景
  18. 低代码局中局:是IT革命还是高级外包? | 甲子光年
  19. python打印小票_购物小票——Python字符串格式化练习
  20. 论文中可以让代码变得非常好看的工具

热门文章

  1. saiav.win forum.php,【emWin实战教程V2.0】第4章    emWin5.xx的裸机方式移植(F4
  2. python监控程序编写_05-python进阶-简单监控程序开发
  3. linux安装socket.io,ubuntu – 如何在node.js npm服务器上查看socket.io版本
  4. java dispatchevent_dispatchEvent(AWTEvent) 分派事件
  5. linux c 图像处理,基于uClinux的图像处理及Socket传输的实现-计算机应用与软件.PDF...
  6. Java利用TreeMap实现统计种类
  7. 在Java中设计和使用自己的注解(转载)
  8. git add -A 和 git add . 的区别
  9. 笔记-中项案例题-2018年下-质量管理
  10. 笔记-高项案例题-2019年下-人力资源管理-管理者权力-马斯洛需求理论-冲突管理...