2013-07-31 73 views
2

我得到以下EOFException同時使用readUTF()方法,請讓我知道我是怎麼克服這個問題,也請建議如何在其他網絡EOFException類中的readUTF

import java.io.*; 
import java.net.*; 

public class GreetingServer { 
    public static void main(String args[]) { 
     String servername =args[0]; 
     int port = Integer.parseInt(args[1]); 

     try { 
      System.out.println("Server Name "+ servername +"Port"+port); 

      Socket client = new Socket(servername,port); 
      System.out.println("Just connected to"+ client.getRemoteSocketAddress()); 
      OutputStream outs = client.getOutputStream(); 
      DataOutputStream dout = new DataOutputStream(outs); 
      dout.writeUTF("Hello From"+client.getRemoteSocketAddress()); 
      InputStream in = client.getInputStream(); 
      DataInputStream din = new DataInputStream(in); 
      System.out.println("Server Says"+ din.readUTF()); 
      client.close(); 
     } 
     catch (EOFException f) { 
      f.printStackTrace(); 
     } 
     catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

顯示你的服務器端代碼。問題應該在服務器端發送不正確/不完整的數據 – Tala

回答

1

docsreadUTF()傳輸插座信息readUtf()狀態;

首先,讀取兩個字節並用於構造一個無符號的16位整數,與readUnsignedShort方法完全相同。這個整數值被稱爲UTF長度,並指定要讀取的其他字節的數量。這些字節然後通過分組考慮將它們轉換爲 個字符。每個組的長度爲 ,根據組的第一個字節的值計算得出。跟在一個組之後的字節 (如果有的話)是下一個組的第一個字節。

這表明,我認爲你的努力與的readUTF()不是UTF,作爲EOFException發生讀取時End of File (EOF) is read unexpectedly.

檢查你正在閱讀的權利類型以相同的順序,你的服務器正在發送它們等等。你應該遵循一個確定的協議,而不是盲目地閱讀。

+0

EOFException也出現在* EOF *當然,當它遇到'預期'。 – EJP

4

您已到達流的末尾。沒有更多數據可讀。

也許您的服務器沒有使用writeUTF(),或者你是不同步的。如果服務器寫入行,你應該使用BufferedReader.readLine().

+0

如果它不是使用writeUTF寫的,那麼如何解決這個問題? –

+0

@AlexanderZaldostanov Err,不要調用'readUTF()'?如果它不是用'writeUTF()'寫的,你不應該調用'readUTF()'。你應該調用別的東西,這取決於它的寫法。 – EJP

+0

... readUTF()和writeUTF()也應該是相同的序列。 –