java socket 异常处理_socket编程报异常java.io.EOFException
一个客户端连接服务器的小程序,服务器端可以正常读取客户端发来的数据
但是当客户端关闭时,服务端也关闭了,并且抛出如下的异常:
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相关推荐
- socket编程报异常java.io.EOFException
socket编程报异常java.io.EOFException 参考文章: (1)socket编程报异常java.io.EOFException (2)https://www.cnblogs.com/ ...
- 使用java类加载器,报异常java.nio.file.InvalidPathException
使用java类加载器,报异常java.nio.file.InvalidPathException 参考文章: (1)使用java类加载器,报异常java.nio.file.InvalidPathExc ...
- java后台调用SOE时,报异常java.io.IOException: Attempted read from closed stream
java后台调用SOE时,报异常java.io.IOException: Attempted read from closed stream 代码诸如此类 public void test(HttpS ...
- java起socket监听,java socket 监听示例,javasocket,java socket监
java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...
- java socket 异常处理_Java Socket常见异常处理 和 网络编程需要注意的问题
在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...
- java 运行异常处理_Java编程异常处理和I/O流
重点: 1.在编写程序时,要正确地使用捕获例外和声明抛出异常的两种例外处理的方法. 2.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流. 3.正确使用对象串行化的 ...
- java f3查看源码报错,Java学习笔记4
Eclipse中快捷键的使用 A:新建 ctrl + n B:格式化 ctrl+shift+f C:导入包 ctrl+shift+o D:注释 ctrl+/,ctrl+shift+/,ctrl+shi ...
- java socket 获取网页源代码_通过java.net.Socket 类抓取网页内容
/** 文件名 : Firstsocket.java 描述 :通过 java.net.Socket 类访问一个web页面,并且返回结果 作者: 慈勤强 cqq1978@yeah.net 参考:http ...
- java.awt.headless_以编程方式设置java.awt.headless = true
小编典典 我正在使用一个main()类,该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分. 将静态加载块移到类的顶部解决了我的问题. 这不起作用: public class Foo ...
最新文章
- Python变量作用域问题
- .NET Core ASP.NET Core 1.0在Redhat峰会上正式发布
- python验证用户登录的判断_python怎么判断用户是否登录?
- ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
- 安装 SAP Cloud Application Programming SDK @sap/cds-dk 时报错以及解决方案
- 新一代蓝牙5标准开启 会成为物联网的最佳选择吗
- python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...
- 排序算法html,排序算法总结.html
- Presto基本概念
- 聚类算法当中的K-means算法如何去做天猫淘宝的推广任务
- [置顶] 手机通过socket控制电脑关机,重启,注销等功能
- ACL2021奇葩标题大赏
- matlab中realmax
- Ubuntu 系统 代码比对工具Meld Diff 下载与使用介绍
- DSA_常用10种算法(java数据结构与算法)
- python使用匿名函数计算长方形的面积
- Qt设置应用程序图标、小图标显示+打包发布exe
- 计算机毕业设计Javahtml5健身房信息管理系统(源码+系统+mysql数据库+lw文档)
- 你不知道的 Blob
- RealmObject-粗心操作引发的巨坑
热门文章
- “好师父”如何破解大学生就业难题
- 这道考 switch 控制语句的阿里基础面试题你能答对吗?
- 互联网之父确诊新冠,一代传奇:任谷歌副总裁、NASA 访问科学家
- 我们为什么用 Go 编写机器学习架构,却不用 Python?
- 失去老罗,张一鸣的坚果手机多了什么?
- Linux 给我的七个宝贵教训
- 智能客服究竟该怎么玩?
- 马化腾评 Facebook 加密货币;苹果或将 15% 产能移出中国;Python 新版发布 | 极客头条...
- 开源天生就不是为了赚钱!
- 漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?