2013-05-29 29 views
4

我的目標是基於Java套接字 實現一個簡單的請求 - 響應模式,用於從服務器請求一個對象。Java套接字:請求 - 響應模式與對象流

它應該是這樣的:

  1. 客戶端發送消息到服務器,服務器計算。根據他收到的 ,調用某個函數。這部分工作。
  2. 服務器將請求的數據寫入ObjectOutputStream。這也適用,至少 我沒有收到錯誤。
  3. 客戶端從輸入流中讀取數據,直到他收到一條CLOSE消息,這使得 程序退出while循環。這不起作用,因爲它應該。

這裏有一些關鍵代碼片段:

// Client (Sending request) *** WORKS 

objectOutputStream.writeInt(GET_OBJECT); 
objectOutputStream.flush(); 


// Server (After receipt of the message) *** WORKS 
objectOutputStream.writeInt(object); 
objectOutputStream.writeInt(CLOSE); 



// Client (Reading the answer from the server) *** WRONG 

while(true){ 
int i = objectInputStream.readInt(); 
if(i == CLOSE) 
break; 
} 
+0

它是什麼返回了'i'的價值?如果有的話 – greedybuddha

+0

你好!它沒有返回。但是,正如Marko注意到我已經忘記了服務器上的flush()。 – user1812379

回答

2
  1. 你必須flush在客戶端側,並且由服務器接收到的消息;
  2. 您在服務器端缺少flush,並且該消息未被客戶端接收。

我注意到這兩個事實的模式...

+0

謝謝。它現在有效,但仍然非常不可靠。有時我從服務器收到消息,有時不會。 – user1812379

+0

@ user1812379每次從寫入切換到讀取時,都需要刷新。 – EJP