問題是你所創建的數據流的順序:
在文章的服務器中(我假設您正在使用的是),當打開一個新連接時,服務器首先打開輸入流,然後打開輸出流:
public Connect(Socket clientSocket) {
client = clientSocket;
try {
ois = new ObjectInputStream(client.getInputStream());
oos = new ObjectOutputStream(client.getOutputStream());
} catch(Exception e1) {
// ...
}
this.start();
}
註釋的示例代碼使用了相反的順序,首先建立輸出流,然後輸入流:
// open a socket connection
socket = new Socket("localhost", 2000);
// open I/O streams for objects
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
但是你的代碼做它周圍的其他方法:建立一個輸出流
server = new Socket(host, port);
in = new ObjectInputStream(server.getInputStream());
out = new ObjectOutputStream(server.getOutputStream());
/輸入流對將停止,直到他們交換了握手信息,所以您必須匹配創建順序。您可以通過在示例代碼中交換第34行和第35行來完成此操作。
您需要取消註釋。哈認真,但編譯錯誤是什麼? – 2009-01-22 23:53:44
有沒有錯誤 - 它只是不工作與我未註釋的代碼,我不明白爲什麼?評論代碼的作品 - 我剛分離,並把它放到一個實際的對象......這讓我發瘋。 – Malachi 2009-01-23 08:22:52