我的java套接字程序在从Eclipse运行时提供java.io.EOFException

我的java套接字程序在从Eclipse运行时提供java.io.EOFException,java,eclipse,sockets,eof,Java,Eclipse,Sockets,Eof,我正在运行一个Java套接字客户端。如果您第一次或前几次运行它,它就会工作。但是,在半天的调试之后,DataInputStream读取TCP套接字的readByte()方法将抛出java.io.EOFException。如果我重新启动Eclipse,或者独立运行相同的java代码,就不会有任何问题。我想,这与Eclipse运行/调试Java代码的方式有关。不知何故,每次调试程序时都会使用一些资源,而不是在调试后发布。有人知道吗 这是密码 //DataInputStream is set outs

我正在运行一个Java套接字客户端。如果您第一次或前几次运行它,它就会工作。但是,在半天的调试之后,DataInputStream读取TCP套接字的readByte()方法将抛出java.io.EOFException。如果我重新启动Eclipse,或者独立运行相同的java代码,就不会有任何问题。我想,这与Eclipse运行/调试Java代码的方式有关。不知何故,每次调试程序时都会使用一些资源,而不是在调试后发布。有人知道吗

这是密码

//DataInputStream is set outside of the scope. 

DataInputStream dataInputStream; 

StringBuffer stringBuffer = new StringBuffer();
while(true) 
{
    // java.io.EOFException is thrown at the line below. 
    byte c = dataInputStream.readByte();
    if( c == 0) {
         break;
    }
    stringBuffer.append( (char)c);
}

一般来说,
中断
while(true)
(或者甚至首先有一个
while(true)
循环)不是一个好的做法。仅仅因为字节==0并不意味着您已经到达了数据流的末尾。您应该检查是否有更多的数据可以从流中读取,而不是假设读取了空字节(Java中的0)(使用类似于
available()
)的内容)。一个简单的修复可以大致如下:

DataInputStream dataInputStream; 

StringBuffer stringBuffer = new StringBuffer();
while(dataInputStream.available() > 0) 
{
    byte c = dataInputStream.readByte();
    stringBuffer.append( (char)c);
}

这将继续向StringBuffer添加字符,并在达到EoF时停止。

没有任何代码,只是猜测而已。您可能需要添加代码和stacktrace以接收答案。添加了代码段。另一端可能超时并关闭套接字。不,它在Eclipse之外运行良好。只有在Eclipse内部运行半天之后,它才会停止工作,除非您重新启动Eclipse。这没有任何意义,因为这部分代码通常都可以工作,它只在Eclipse内部运行半天之后才会停止工作。@AlbertCheng根据您发布的代码,这是我能想到的唯一解决方案。你的问题除了你有一个EOF异常之外没有太多的解释,这个答案正试图解决这个问题。