Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得;java.io.EOFException“;通过循环从套接字读取数据时_Java_Android_Networking - Fatal编程技术网

获得;java.io.EOFException“;通过循环从套接字读取数据时

获得;java.io.EOFException“;通过循环从套接字读取数据时,java,android,networking,Java,Android,Networking,我正在制作一个国际象棋游戏应用程序进行练习,并完成了所有功能 现在我正在尝试实现联网部分,以便启用2人模式 在我的服务器代码中,我使用循环不断地从两个播放器获取数据 依次地 在每个玩家的第一回合,服务器工作正常,我确认数据正确地传输到了另一个玩家。但当它回来的时候 到int[]data1=(int[])in1.readUnshared()循环的第一行 java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStrea

我正在制作一个国际象棋游戏应用程序进行练习,并完成了所有功能

现在我正在尝试实现联网部分,以便启用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());
我初始化流的方式有问题吗。。。?
这个问题已经困扰了很长时间。。。非常希望看到我的应用程序工作。

我认为这是一个一次性错误,可能与刷新缓冲区有关,但在调用readUnshared()之前不写入或检查缓冲区是否为空有关

EOFEException只是说您到达了流或文件的末尾(文件的末尾)


我不能仅仅用你发布的代码来调试它。但在调用流之前,请确保您正在将移动写入保留“非共享”移动的任何位置,或进行检查。

EOFEException
在没有更多缓冲数据可读取且另一端已关闭的套接字上调用
readObject()
readInt()
等时引发,就像
readLine()
返回null或
read()
返回-`。这是一个“正常的例外”。只需关闭套接字,忘记连接。

为什么这些变量是静态的?