0
我正在使用java 7 AsynchronousSocketChannel編寫簡單的客戶端服務器應用程序。 一旦連接後,我開始它初始化的I/O 流與服務器上的一個線程:Java 7 AsynchronousSocketChannel
ObjectInputStream is;
ObjectOutputStream os;
is = new ObjectInputStream(Channels.newInputStream(client));
System.out.println("Got is");
os = new ObjectOutputStream(Channels.newOutputStream(client));
System.out.println("Got os");
客戶端使用相同的代碼在其端部。
我遇到的問題是,如果同時初始化輸入流,然後輸出流,雙方都掛起。其他3種組合中的任何一種都可以正常工作,也就是說, 都會首先初始化輸出流,或者一個是輸入,另一個是先輸出。
任何人有任何想法,爲什麼這可能是?
客戶端獲得一個連接:與服務器監聽
InetSocketAddress addr = new InetSocketAddress(host, port);
AsynchronousSocketChannel channel = AsynchronousSocketChannel.open();
Future<Void> future = channel.connect(addr);
future.get(); // blocks till connection is established
:
感謝任何洞察這一點。
那麼,當雙方首先打開輸出流時它是如何工作的? – user3125878
另外,當我使用舊式套接字時,我根本沒有看到問題。你是對的,我不需要使用異步,如果我使用每個連接線程(除了也許新的類優化更好);我只是做一些實驗來看看這些類如何協同工作。 – user3125878
ObjectInputStream的API文檔進一步闡明瞭這個問題:_「這個構造函數將阻塞,直到相應的ObjectOutputStream已經寫入並刷新了頭文件。」_這就解釋了爲什麼初始化** ObjectOutputStream **首先在兩邊都不是** **一個問題,但首先在兩邊初始化** ObjectInputStream ** **是一個問題。 – user3125878