2017-04-20 116 views
0

歡迎來到神話般的網絡世界。我發現了我的激情。 :) 但是我在我的應用程序中有一個非常奇怪的行爲,我需要你的幫助來解決這個問題。Java:ObjectInputStream,發送3條消息,僅收到2條消息

我做了一個簡單的服務器客戶端應用程序。 發送線程:

new Thread(new Runnable() { 
    public void run() { 
     try { 
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream())); 
      objectOutputStream.writeObject(message); 
      objectOutputStream.flush(); 

     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
    } 
}).start(); 

接收線程:

new Thread(new Runnable() { 
    public void run() { 
     try { 
      while (!Thread.currentThread().isInterrupted()) { 
       ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); 
       Message message = (Message) objectInputStream.readObject(); 
       Log.i("DEBUG", message); 
      } 
     } catch (Exception exception) { 
      try { 
       socket.close(); 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 
    } 
}).start(); 

它工作得很好,但是如果我同時發送3個消息,我的接收線程只接收2個第一批。如果我更改訂單,這並不重要。第三個總是失敗。

我認爲這是一個緩衝區大小問題。我該如何處理?謝謝。 :)

+0

你應該使用相同的對象流套接字的生活,你需要如果您要發送或接收多線程,請在套接字上進行一些同步。 – EJP

+0

謝謝你的幫助@EJP。你知道我在哪裏可以找到這種結構的例子嗎? – Denis

回答

-1

BufferedReader緩衝輸入,就像名稱所示。這意味着它在將它傳遞給你之前從輸入源讀入緩衝區。這裏的緩衝區大小是指它緩衝的字節數。

ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream(), size)); 

可以使用的BufferedInputStream大小和buffer的讀數緩慢,有一些延遲發送數據 `

+0

他沒有使用'BufferedReader'。最後一句話是毫無意義的。 – EJP