2012-06-14 104 views
1

我正在爲練習製作一款國際象棋遊戲應用程序,並完成了所有功能。通過循環從套接字讀取數據時獲取「java.io.EOFException」

現在我想實現聯網的一部分,從而使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」和「出」的變量是類變量我聲明

static ObjectInputStream in1; 
static ObjectInputStream in2; 
static ObjectOutputStream out1; 
static ObjectOutputStream out2; 

我initilized他們這樣的主要功能:

in1 = new ObjectInputStream(player1.getInputStream()); 

有沒有什麼問題,我初始化流的方式......? 一直被這個問題困住了很長時間......並且絕望地看到我的應用程序工作。

+0

爲什麼這些變量是靜態的? – EJP

回答

0

我認爲這是一個錯誤,它可能與你沖洗緩衝區,但不寫或檢查在調用readUnshared()之前是否爲空。

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

我不能真正調試它只是你發佈的代碼。但請確保在調用Stream之前,您正在寫入移動到「未共享」移動的任何位置,或者進行檢查。當你調用readObject()readInt(),等等,已經沒有更多的緩衝數據讀取和已經被另一端關閉套接字

0

EOFException被拋出,就像readLine()返回null或read()返回-`。這是一個'正常例外'。只需關閉插座並忘記連接。