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

转载 2015年11月19日 10:28:38

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是根据你要接收内容的大小来确定。

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/235269

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

Java Scoket之java.io.EOFException解决方案   Socket接收数据的时候,常常会抛出java.io.EOFException异常,也没有明确的原因和提示,在...
  • u011186019
  • u011186019
  • 2014年12月06日 14:32
  • 2845

Java如何实现WebSocket通讯问题(转载)

hkhhkjhdkjhkjdhkfjdhkf
  • zmj132113
  • zmj132113
  • 2016年04月03日 11:29
  • 2712

java socks EOFException异常解决

异常如下java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340) ...
  • dounine
  • dounine
  • 2016年11月30日 16:53
  • 5741

javax.websocket.Session的一个close异常记录

在使用C websocket客户端向Tomcat 8.x的websocket服务器发送消息时,当客户端关闭连接后,tomcat会出现如下异常,即使捕捉异常也无济于事。 异常: 十二月 10, 20...
  • u013074465
  • u013074465
  • 2015年12月10日 16:48
  • 7956

在读取流的时候的异常java.io.EOFException

今天一个在学习android的同学遇到了这个问题,上次
  • u012808234
  • u012808234
  • 2014年08月22日 12:33
  • 1466

UDP网络编程时出现:Exception in thread "main" java.io.EOFException异常

EOFException
  • m0_37321902
  • m0_37321902
  • 2017年07月05日 16:18
  • 661

tomcat启动报错:java.io.EOFException

当tomcat启动的时候出现下面错误:[ERROR]  org.apache.catalina.session.ManagerBase     - IOException while loading ...
  • hotdogcug
  • hotdogcug
  • 2007年09月04日 19:13
  • 6651

java.io.EOFException解决

严重: IOException while loading persisted sessions: java.io.EOFException  严重: Exception loading ses...
  • mym43210
  • mym43210
  • 2014年10月14日 18:30
  • 9304

反序列化过程怎么引发了 java.io.EOFException异常?

本帖最后由 谢冬 于 2013-3-11 04:19 编辑 package com.itheima_01; import java.io.FileInputStream...
  • u012364372
  • u012364372
  • 2016年08月24日 17:44
  • 2796

我的Java开发学习之旅------>Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法

今天用Ob
  • qq446282412
  • qq446282412
  • 2015年06月11日 00:10
  • 5946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Scoket之java.io.EOFException解决方案
举报原因:
原因补充:

(最多只允许输入30个字)