`

Java Scoket之java.io.EOFException解决方案

    博客分类:
  • java
阅读更多

Socket接收数据的时候,常常会抛出java.io.EOFException异常,也没有明确的原因和提示,在网上搜搜,很多人都在问此问题,但是没有找到切实可行的办法。经过研究,问题解决了。



看到的异常堆栈信息如下:





java.io.EOFException
  at java.io.DataInputStream.readFully(DataInputStream.java:178)
  at java.io.DataInputStream.readUTF(DataInputStream.java:565)
  at java.io.DataInputStream.readUTF(DataInputStream.java:522)



Java对此的解释也很模糊:



public class EOFExceptionextends IOException当输入过程中意外到达文件或流的末尾时,抛出此异常。   

此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。   




从上面的提示可以模糊看到,因为不知道流的末尾,当到达末尾的时候,自然抛出了此异常。既然不知道结尾如何,干脆设一个缓存,然后读取一批数据后输出即可。

为了保险期间,可以讲此缓存设置大点,一次可以完全接收到想要的内容,这样,一次就可以读取到所要的内容了,避免了循环获取。下面将此代码放出来:



        ......

        private static final int BUFFER_SIZE=1024*1024;
        
        ......

        Socket socket = new Socket(cfg.getIp(), Integer.parseInt(SysParamsToolkit.getProperty("socketport")));
        String charset = SysParamsToolkit.getProperty("socke.rexml.charset");     //Socket发送的字符集编码
        try {
                OutputStream dos = socket.getOutputStream();
                dos.write(xmlcmd.getBytes(charset));
                dos.flush();
                DataInputStream dis = new DataInputStream(socket.getInputStream());
                char[] data = new char[BUFFER_SIZE];
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), charset));
                int len = br.read(data);
                String rexml = String.valueOf(data, 0, len);        //接收一个字符串数据
        } catch (Exception e) {
                return false;
        } finally {
                if (socket.isConnected())
                        socket.close();
        }
        ......




经过上面的处理后,就没问题了。



缓存的大小BUFFER_SIZE是根据你要接收内容的大小来确定。
分享到:
评论

相关推荐

    RabbitMq+springboot

    demo中介绍了rabbitmq的三种模式,分别为Direct,topic,Fanout并且集成了消息确认机制,消息重发机制集以及集群, 需要用到的同学可以下载看看,少走弯路。

    jetty-io-9.4.43.v20210629-API文档-中英对照版.zip

    赠送jar包:jetty-io-9.4.43.v20210629.jar; 赠送原API文档:jetty-io-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-io-9.4.43.v20210629-sources.jar; 赠送Maven依赖信息文件:jetty-io-9.4.43.v20210629....

    java上的即时通信

    import java.io.EOFException; import java.net.ServerSocket; import java.net.Socket; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event....

    Java图片处理ImageIO.read()问题

    NULL 博文链接:https://o-oand0-0.iteye.com/blog/1585854

    mysql 异常com.mysql.jdbc.CommunicationsException

    com.mysql.jdbc.CommunicationsException Communications link failure due to underlying exception:

    JAVA程序员.doc

    Java异常机制.pdf Java异常机制.pdf Java异常机制.pdf

    PdfUtils.java

    解决Could not load font file: C:\Windows\FONTS\mstmc.ttf 对应问题贴https://blog.csdn.net/guozhangjie1992/article/details/103679640

    AndroidApk混淆编译时,报告java.io.IOException...错误解决办法

    主要介绍了 AndroidApk混淆编译时,报告Error:Execution failed for task ‘:gviews:transformClassesAndResourcesWithProguardForRelease’.错误解决办法的相关资料,需要的朋友可以参考下

    Nginx + Websocket 实现推送

    Nginx + Websocket 实现推送 , 实现思路 : http://blog.csdn.net/shangmingtao/article/details/76639821 . 代码可以直接线上运行.

    socket编程

    java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297) at java.io....

    java 异常处理

    介绍Java程序中的异常概念,包括异常抛出、捕获和处理,自定义异常

    电子商务交易平台信用体系建设研究整理.pdf

    电子商务交易平台信用体系建设研究整理.pdf

    java异常处理

    java异常处理

    JAVA实现SOCKET聊天

    用JAVA语言实现网络聊天import java.io.*; import java.net.*; import java.util.*; public class ChatHandler implements Runnable { protected Socket socket; protected ObjectInputStream dataIn; ...

    Flowable-BPMN操作流程部署启动源码

    Flowable-BPMN操作流程部署启动源码,具体理解和操作参考我的专栏https://blog.csdn.net/houyj1986/column/info/31755,第10节

    java-websocket-reverse-proxy:Websocket反向代理的Java实现

    java-websocket-reverse-proxy 我发现的大多数Java websocket示例都是基于或包含诸如STOMP之类的消息传递协议的。 该示例是研究如何代理任何消息内容而无需担心消息传递协议的结果。 Websocket反向代理的Java实现。 ...

    Springboot上传图片

    org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.... java.io.EOFException

    hessdroid_android

    已经解决了第一次连接报:com.caucho.hessian.client.HessianConnectionException: 500: java.io.EOFException

    java.security.InvalidKeyException:illegal Key Size

    java.security.InvalidKeyException:illegal Key Size 微信开发过程中,JDK6的版本

    SwiftSocket封装库SwiftSockets.zip

    SwiftSockets 是一个简单的 Swift Socket 封装库。 服务器端: let socket = PassiveSocket(address: sockaddr_in(port: 4242)) socket.listen(dispatch_get_global_queue(0, 0), backlog: 5) {  println...

Global site tag (gtag.js) - Google Analytics