客戶端代碼:的ObjectOutputStream不發送數據
try {
Socket socket = new Socket(ip, port);
OutputStream output = socket.getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(output);
InputStream input = socket.getInputStream();
ObjectInputStream in = new ObjectInputStream(input);
out.writeByte(1);
FileHandler fh = (FileHandler) in.readObject();
//processing stuff
out.flush();
out.close();
output.flush();
output.close();
input.close();
in.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
Server代碼:
try {
ServerSocket server = new ServerSocket(port);
Socket socket = server.accept();
InputStream input = socket.getInputStream();
ObjectInputStream in = new ObjectInputStream(input);
int type = in.readByte();
//processing stuff (which includes closing the streams and sending FileHandler object)
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
服務器永遠不會接收的字節。它只是等待來自客戶端的字節,它永遠不會來。我不確定它爲什麼不發送或收到。任何幫助深表感謝。
也不要衝洗或關閉輸出。如果你包裝一個OutputStream,調用close或者flush或者close關閉它將依次刷新包含的流。您不需要保存對輸出或輸入的引用。關閉應該放在finally子句中,如果拋出異常,你仍然需要確保close()流發生。 – chubbsondubs 2012-02-01 06:08:46
當我在發送字節後刷新時,服務器會收到連接重置錯誤。 – Stripies 2012-02-01 06:09:17
@JonMannerberg - 不,它會在你關閉連接時得到。在完成閱讀和寫作之前,不要關閉它。 – 2012-02-01 06:10:51