2014-10-28 25 views
-1

我正在做一個客戶端服務器夫婦。我的客戶端很好地連接到服務器,它通過套接字創建ObjectInputStream(socket.getInputStream()),從服務器到客戶端,反之亦然。然後出於一些神祕的原因,我的ObjectInputStream服務器以某種方式捕獲一個空對象。客戶端沒有通過套接字發送任何東西(我確實通過對象發送方法使/ / /使其確實,甚至是早先發送的所有對象的System.out.printed)服務器僅捕獲該神祕對象一次,並且之後客戶端發送的所有對象的工作方式與他們應該一樣。Java ObjectInputStream(socket.getInputStream())捕獲空對象

class ClientThread extends Thread { 
     //The socket where to listen/talk 
     Socket socket; 
     ObjectInputStream sInput; 
     ObjectOutputStream sOutput; 
     InputStream fInput; 
     OutputStream Output; 
     //my unique id (easier for deconnection) 
     int id; 
     //Objects that we will be receiving 
     Incomingdata datain; 
     //the date we connect 
     String date; 
     Player player; 
     boolean Connected = false; 

     //Constructor 
     ClientThread(Socket socket){ 
      id = uniqueId++; 
      this.socket = socket; 
      try{ 
       sOutput = new ObjectOutputStream(socket.getOutputStream()); 
       sInput = new ObjectInputStream(socket.getInputStream()); 
       Output = socket.getOutputStream(); 
      } catch (Exception e){ 
       System.out.println("Couldn't create Input/Output streams"); 
      } 
      date = new Date().toString(); 
     } 

     // what will run forever 
     public void run() { 
      // to loop until LOGOUT 
      Connected = true; 
      while(Connected) { 
       try { 
        datain = (Incomingdata) sInput.readObject(); //<--- this catches the mystical null! Even if nothing is sent over the socket? 
       } 
       catch (IOException e) { 
        TextArea.AddLine("Exception reading Streams: " + e); 
        break;    
       } 
       catch(ClassNotFoundException e2) { 
        break; 
       } 
+0

當我解釋的人有一天,對象與數據輸入/輸出流技術從一個過去時代,在這個問題上仍然存在大端和小端等問題,並且沒有良好的通信標準。我們現在擁有XML和JSON - 它們都比使用對象流更好的解決方案 – ControlAltDel 2014-10-28 18:43:26

+1

我認爲這實際上不是我的問題的答案嗎? – user3738243 2014-10-28 19:18:38

+0

似乎這個問題已經消失了,因爲它出現了! – user3738243 2014-10-28 19:26:57

回答

0

如果發送空值,則只能接收空值。

(有一個普遍的誤解,認爲readObject()返回null在流的末尾,不。)

相關問題