我正在为练习制作国际象棋游戏应用程序并完成所有功能。
现在我正在尝试实现网络部分,以启用2个玩家模式...
在我的服务器代码中,我使用循环来连续从两个播放器获取数据 转过来。
在每个玩家的第一个转弯处,服务器工作正常,我确认数据已正确传输到另一个玩家。但是当它回来时
到int[] data1 = (int[]) in1.readUnshared();
循环的第一行,
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
发生错误......
while(true){
int[] data1 = (int[]) in1.readUnshared(); // THIS PART!!
if(data1.length != 96)
break;
out2.writeUnshared(data1);
out2.flush();
int[] data2 = (int[]) in2.readUnshared();
if(data1.length != 96)
break;
out1.writeUnshared(data2);
out1.flush();
}
这里,“in”和“out”变量是我声明的类变量
static ObjectInputStream in1;
static ObjectInputStream in2;
static ObjectOutputStream out1;
static ObjectOutputStream out2;
我在主要功能上启动了它们:
in1 = new ObjectInputStream(player1.getInputStream());
我初始化流的方式有问题吗? 长期以来一直坚持这个问题......并且迫切希望看到我的应用程序正常运行。
答案 0 :(得分:0)
我认为这是一个错误的错误,它可能与您刷新缓冲区有关,但在调用readUnshared()之前不会写入或检查它是否为空。
EOFException刚刚说到达了流或文件的末尾(文件结束)。
我无法使用您发布的代码进行真正的调试。但是,在调用Stream之前,请确保将动作写入“非共享”动作的任何位置,或进行检查。
答案 1 :(得分:0)
EOFException
,readObject()
等时,会抛出{p> readInt()
,就像readLine()
返回null或read()
返回-`。这是一个“正常例外”。只需关闭套接字即可忘记连接。