[英]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.