簡體   English   中英

通過循環從套接字讀取數據時獲取“ java.io.EOFException”

[英]Getting “java.io.EOFException” when reading data from the socket over a loop

我正在為實踐練習制作國際象棋游戲,並完成了所有功能。

現在,我正在嘗試實施網絡部分,以便啟用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()之前不寫入或檢查其是否為空。

EOFException只是說您到達了流或文件的末尾(文件末尾)。

我不能僅使用您發布的代碼進行調試。 但是在調用Stream之前,請確保將移動寫入保留或檢查“未共享”移動的任何位置。

在套接字上調用readObject()readInt()等時,在沒有更多緩沖數據可讀取並且已被另一端關閉的套接字上拋出EOFException ,就像readLine()返回null或read()返回- `。 這是“正常的例外”。 只需關閉插座,而不必擔心連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM