一个客户端连接服务器的小程序,服务器端可以正常读取客户端发来的数据

但是当客户端关闭时,服务端也关闭了,并且抛出如下的异常:

java.io.EOFException

at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323)

at java.io.DataInputStream.readUTF(DataInputStream.java:572)

at java.io.DataInputStream.readUTF(DataInputStream.java:547)

at ChatServer.main(ChatServer.java:17)

服务器端的代码如下:

import java.io.*;import java.net.*;public classChatServer {public static voidmain(String[] args) {try{

ServerSocket ss=new ServerSocket(7889);while(true){

Socket s=ss.accept();

DataInputStream dis=newDataInputStream(s.getInputStream());while(true){

String str=dis.readUTF();

System.out.println(str);

}

}

}catch(IOException e){

e.printStackTrace();

}

}

}

产生异常位于: String str=dis.readUTF();

以前也遇到过这种问题,在流传输过程中是不允许被并发访问的。所以数据能接连不断的传过来,其 实有很多人在运行的时候都会碰到EOFException, 然后百思不得其解,去各种论坛问解决方案。其实我想说,这个异常不是必须声明的,也就是说它虽然是异常,但其实是正常运行结束的标志。EOF表示读到了文 件尾( String str = dis.readUTF(); ,客户端已经断开,后面已经没有内容可以读了),发送结束自然连接也就断开了。

如果这影响到了你socket程序的正确性的话,请静下心来看看自己程序的业务逻辑,而不 要把注意力聚集在发送和接受的方法上。因为我也被这样的bug困扰了1整天,被很多论坛的帖子误解了很多次最后得出的教训。如果在while循环中去 readUTF() ,本质上是没有问题的,有数据来就会读,没有就自动阻塞。那么抛出EOFException一定是因为连接断了还在继续read,什么原因导致连接断了 呢?一定是业务逻辑哪里存在错误,比如NullPoint、 ClassCaseException、ArrayOutofBound,即使程序较大也没关系,最多只要单步调适一次就能很快发现bug并且解决它。

那么是属于哪一种呢?当然是第一种,因为你客户端已经被你断开,所以你应该怎么做呢

你可以捕捉这个客户端断开的异常EOFExcption,然后做你需要的处理,try ... catch(EOFException){ System.out.println("这是合法的,客户端已经关闭");}

客户端每次在传输完数据后,再传输一个null过去,就行了。不然就报EOF异常。

java socket 异常处理_socket编程报异常java.io.EOFException相关推荐

  1. socket编程报异常java.io.EOFException

    socket编程报异常java.io.EOFException 参考文章: (1)socket编程报异常java.io.EOFException (2)https://www.cnblogs.com/ ...

  2. 使用java类加载器,报异常java.nio.file.InvalidPathException

    使用java类加载器,报异常java.nio.file.InvalidPathException 参考文章: (1)使用java类加载器,报异常java.nio.file.InvalidPathExc ...

  3. java后台调用SOE时,报异常java.io.IOException: Attempted read from closed stream

    java后台调用SOE时,报异常java.io.IOException: Attempted read from closed stream 代码诸如此类 public void test(HttpS ...

  4. java起socket监听,java socket 监听示例,javasocket,java socket监

    java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...

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

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

  6. java 运行异常处理_Java编程异常处理和I/O流

    重点: 1.在编写程序时,要正确地使用捕获例外和声明抛出异常的两种例外处理的方法. 2.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流. 3.正确使用对象串行化的 ...

  7. java f3查看源码报错,Java学习笔记4

    Eclipse中快捷键的使用 A:新建 ctrl + n B:格式化 ctrl+shift+f C:导入包 ctrl+shift+o D:注释 ctrl+/,ctrl+shift+/,ctrl+shi ...

  8. java socket 获取网页源代码_通过java.net.Socket 类抓取网页内容

    /** 文件名 : Firstsocket.java 描述 :通过 java.net.Socket 类访问一个web页面,并且返回结果 作者: 慈勤强 cqq1978@yeah.net 参考:http ...

  9. java.awt.headless_以编程方式设置java.awt.headless = true

    小编典典 我正在使用一个main()类,该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分. 将静态加载块移到类的顶部解决了我的问题. 这不起作用: public class Foo ...

最新文章

  1. Python变量作用域问题
  2. .NET Core ASP.NET Core 1.0在Redhat峰会上正式发布
  3. python验证用户登录的判断_python怎么判断用户是否登录?
  4. ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
  5. 安装 SAP Cloud Application Programming SDK @sap/cds-dk 时报错以及解决方案
  6. 新一代蓝牙5标准开启 会成为物联网的最佳选择吗
  7. python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...
  8. 排序算法html,排序算法总结.html
  9. Presto基本概念
  10. 聚类算法当中的K-means算法如何去做天猫淘宝的推广任务
  11. [置顶] 手机通过socket控制电脑关机,重启,注销等功能
  12. ACL2021奇葩标题大赏
  13. matlab中realmax
  14. Ubuntu 系统 代码比对工具Meld Diff 下载与使用介绍
  15. DSA_常用10种算法(java数据结构与算法)
  16. python使用匿名函数计算长方形的面积
  17. Qt设置应用程序图标、小图标显示+打包发布exe
  18. 计算机毕业设计Javahtml5健身房信息管理系统(源码+系统+mysql数据库+lw文档)
  19. 你不知道的 Blob
  20. RealmObject-粗心操作引发的巨坑

热门文章

  1. “好师父”如何破解大学生就业难题
  2. 这道考 switch 控制语句的阿里基础面试题你能答对吗?
  3. 互联网之父确诊新冠,一代传奇:任谷歌副总裁、NASA 访问科学家
  4. 我们为什么用 Go 编写机器学习架构,却不用 Python?
  5. 失去老罗,张一鸣的坚果手机多了什么?
  6. Linux 给我的七个宝贵教训
  7. 智能客服究竟该怎么玩?
  8. 马化腾评 Facebook 加密货币;苹果或将 15% 产能移出中国;Python 新版发布 | 极客头条...
  9. 开源天生就不是为了赚钱!
  10. 漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?