我正在使用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)
答案 0 :(得分:1)
我不明白为什么会出现此错误...
您收到错误消息,因为一端关闭了其输出流...或整个套接字。这可能是由于明确关闭或由于应用程序退出而导致的。
...由于客户端和服务器均未发送消息...
应用程序(客户端或服务器)正在尝试读取消息,但是由于另一端已关闭该端试图读取的流,因此不会出现任何消息。
...表示没有文件可以到达结尾。
您的逻辑不正确。所指的“文件”是上面所指的流。如果您关闭写入端,则读取端如果尝试继续读取,则会看到流的结尾/文件的结尾。
看来,一个伪匿名评论者已识别出一个错误,很可能解释了您的问题。 Socket.isConnected()
方法不能用于测试套接字是否仍然连接。 javadoc指出:
public boolean isConnected()
返回套接字的连接状态。
注意:关闭套接字不会清除其连接状态, 如果关闭的套接字,此方法将返回true(请参见
isClosed()
),如果 在关闭之前已成功连接。返回:
true
,如果套接字已成功连接到服务器
(添加了重点...)
如果您需要更多帮助,请提供适当的minimal reproducible example,并确保包括一个或多个异常的完整堆栈跟踪。