2014-01-12 41 views
0

我有服務器的ObjectInputStream()

ServerSocket socketListener = new ServerSocket(Config.PORT); 
... 
client = socketListener.accept(); 

和客戶

sock = new Socket("127.0.0.1", Config.PORT); 

我想他們之間傳輸使用的ObjectInputStream和ObjectOutputStream的一些序列化的數據。 當我嘗試做

ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); 

什麼也沒有發生既不在服務器端,也沒有客戶端。一切都落在這條線上。客戶端和服務器都試圖從套接字獲取輸入流,但它不起作用,也不能在客戶端和服務器上工作。 如何解決這個問題,以便我可以在客戶端和服務器之間傳遞序列化的數據?

回答

1

由於the javadoc說:

創建一個ObjectInputStream中,從指定的InputStream讀取。從流中讀取序列化流頭並進行驗證。該構造函數將阻塞,直到相應的ObjectOutputStream寫入並刷新標題。

那麼,既然服務器和打開的InputStream客戶端開始,你實現了一個僵局:他們都阻塞,直到對方發送了流標頭。如果您通過在客戶端打開ObjectInputStream開始,則必須先在服務器端打開ObjectOutputStream(並在必要時立即刷新)(反之亦然)。

+0

我知道一個僵局! :)顯然我沒有仔細看過文檔。非常感謝你。 – Alendorff