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

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

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

时间: 2024-12-18 22:44:18

Java Scoket之java.io.EOFException解决方案的相关文章

【转】Tomcat出现SEVERE: IOException while loading persisted sessions: java.io.EOFException java.io.EOFException问题的解决方案

[java] view plaincopy 错误代码如下: 严重: IOException while loading persisted sessions: java.io.EOFException java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325) at java.io.ObjectInputStream$BlockDataInputS

tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案

严重: IOException while loading persisted sessions: java.io.EOFExceptionjava.io.EOFException    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2284)    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInp

while loading persisted sessions [java.io.EOFException]的三种解决办法!

原因: (1)IOException while loading persisted sessions: java.io.EOFException当加载持久化的session错误:文件末尾异常,就是已经读取到文件末尾了,tomcat仍然试图读取内容. (2)修改jsp文件后,访问web页面时是修改前的效果,这是因为tomcat未及时编译jsp导致的所以要删除work目录下的catalinna的文件 解决方案: (1) 自己电脑的tomcat的版本比较高,可在自己的项目文件夹workspace -

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

IOException while loading persisted sessions: java.io.EOFException

严重: IOException while loading persisted sessions: java.io.EOFExceptionjava.io.EOFException    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2303)    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInp

web编程 java.io.EOFException错误

1 java.io.EOFException 2 3 严重: IOException while loading persisted sessions: java.io.EOFException 4 严重: Exception loading sessions from persistent storage 原因: tomcat对硬盘的session读取失败 解决方案: 将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决.

centos7+maven+jenkins+checkstyle 构建总是java.io.EOFException异常

异常详情如下:   [CHECKSTYLE] File encoding has not been set in pom.xml, using platform encoding UTF-8, i.e. build is platform dependent (see <a href="http://docs.codehaus.org/display/MAVENUSER/POM+Element+for+Source+File+Encoding">Maven FAQ</

java.io.EOFException

使用webclient抓取网页时报错:java.io.EOFException atjava.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:207) atjava.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:197) atjava.util.zip.GZIPInp使用webclient抓取网页时报错: java.io.EOFException at java.u

严重:IOException while loading persisted sessions:java.io.EOFException.

1.错误描述 java.io.EOFException 2.错误原因 由于项目在运行的过程中,异常地关闭了Tomcat,在项目文件下生成了SESSIONS.ser D:\MyEclipse\apache-tomcat-7.0.55\work\Catalina\localhost\SSH 3.解决办法 删除在该路径下的SESSIONS.ser文件,重新启动Tomcat,项目就会正常运行