2013-08-20 123 views
0

這是我的客戶端應用程序連接到服務器。我使用一個名爲DataPackage的對象來回發送信息。代碼在自己的線程中運行。客戶端while循環發送和從服務器接收

變量inObjectInputStreamoutObjectOutputStream

DataPackage dp = null; 
while (true) { 

    try { 
     dp = (DataPackage) in.readObject(); 
     if (dp != null) { 
      // Do stuff with received object 
     } 

     if (sendSomething) { // Send stuff 
      out.writeObject(new DataPackage("some data")); 
      out.flush(); 
      out.reset(); 
     } 
    } catch (ClassNotFoundException | IOException e1) { 
     e1.printStackTrace(); 
    } 

    try { 
     t.sleep(50); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

我的代碼的問題是,我從來沒有達到我發送東西的部分,除非我從服務器收到的東西。循環在繼續到if (sendSomething)之前等待來自服務器的內容。我應該如何構建我的代碼,以便我可以隨時發送內容並隨時收到內容?我希望你明白。

+0

是否有可能創建2個客戶端線程,一個用於讀取,另一個用於寫入? – munyul

回答

2

您可以使用這些線程。如果他們使用相同的套接字與外部服務器通信,這很常見,因爲它們在等待從套接字讀取時不會阻塞。

線程1:

塊上收到消息閱讀 - 做一些

線程2: 上出事做事 - 寫在插座

1

dp = (DataPackage) in.readObject();阻止。這意味着它不會完成下面的行的執行,直到它從服務器收到一些回覆。

一個建議,創建一個新的線程,並通過dp = (DataPackage) in.readObject();的實例,所以它不會阻止。

相關問題