Java文件结束异常

时间:2019-11-10 02:43:39

标签: java unexpectendoffile

我正在使用JavaFX编写一个简单的即时消息传递程序,遇到了End Of File异常,经过数小时的调试,我找不到解决方案。

我的程序分为两部分,客户端和服务器。它们相互发送序列化的对象,其中包含所有必需的信息以完成所需的操作。当我开始在服务器中收到此错误时,我正在为程序添加其他功能。此后,我删除了所有其他代码,但仍收到此错误消息。我不明白为什么我会收到此错误,因为客户端和服务器都没有发送消息,这意味着没有文件可以到达末尾?

我在调用方法“ sendMessage()”的行中注释掉了,这似乎可以解决问题,但是我需要这种方法才能工作。

下面是服务器类的副本

#include <stdio.h>
#include <stdlib.h>


#define MAX_ROWS 3
#define MAX_COLS 3


int main( void ) 
{
    int matrix[ MAX_ROWS ][ MAX_COLS ] = 
    {
        { 1,2,3 },
        { 4,5,6 },
        { 7,8,9 }
    };

    for ( int i = 0; i < MAX_ROWS; i++ ) 
    {
        for( int j = 0; j < MAX_COLS; j++ )
        {
            printf( "%p\n", (void*)&matrix[i][j] );
        }
    }

    system("pause");
    return 0;
}

编辑:这是堆栈跟踪

2019年11月11日下午12:44:21 instachatfx.server.ServerMain $ Handler运行 严重:null java.io.EOFException     在java.io.ObjectInputStream $ BlockDataInputStream.peekByte(ObjectInputStream.java:2950)     在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1534)     在java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)     在instachatfx.server.ServerMain $ Handler.run(ServerMain.java:83)

1 个答案:

答案 0 :(得分:1)

  

我不明白为什么会出现此错误...

您收到错误消息,因为一端关闭了其输出流...或整个套接字。这可能是由于明确关闭或由于应用程序退出而导致的。

  

...由于客户端和服务器均未发送消息...

应用程序(客户端或服务器)正在尝试读取消息,但是由于另一端已关闭该端试图读取的流,因此不会出现任何消​​息。

  

...表示没有文件可以到达结尾。

您的逻辑不正确。所指的“文件”是上面所指的流。如果您关闭写入端,则读取端如果尝试继续读取,则会看到流的结尾/文件的结尾。


看来,一个伪匿名评论者已识别出一个错误,很可能解释了您的问题。 Socket.isConnected()方法不能用于测试套接字是否仍然连接。 javadoc指出:

 public boolean isConnected()
     

返回套接字的连接状态。

     

注意:关闭套接字不会清除其连接状态,   如果关闭的套接字,此方法将返回true(请参见isClosed()),如果   在关闭之前已成功连接

     

返回:       true,如果套接字已成功连接到服务器

(添加了重点...)


如果您需要更多帮助,请提供适当的minimal reproducible example,并确保包括一个或多个异常的完整堆栈跟踪。