使用DataInputStream獲取從Android客戶端發送到此Java桌面服務器的int和long。之後,從Android客戶端收到一個pdf文件。總共有3個文件由客戶端發送到服務器。問題是在向另一個方向發送時。如何重新打開一個封閉的套接字以便將消息發送回客戶端
我必須在while循環後立即關閉輸入和輸出流。如果我不這樣做,PDF文件將被損壞,程序將停止並卡住while循環,而不是繼續執行到線程末尾。
如果我必須關閉輸入和輸出流量,套接字會關閉。我如何重新打開相同的套接字?
我需要重新打開相同的套接字,因爲需要發送一條消息回到Android客戶端,服務器收到PDF文件以發送確認文件已被服務器安全接收。
有多個Android客戶端連接到相同的單個Java服務器,所以我想象需要相同的套接字發送消息回到客戶端。如果沒有套接字,將很難確定將消息發送到哪個客戶端。
byte[] buffer = new byte[fileSizeFromClient];
while((count = dis.read(buffer)) > 0){
bos.write(buffer, 0, count);
}
dis.close(); // closes DataInputStream dis
bos.close(); // closes BufferedOutputStream bos
編輯:
從客戶端代碼
dos.writeInt((int)length); // sends the length as number bytes is file size to the server
dos.writeLong(serial); // sends the serial number to the server
int count = 0; // number of bytes
while ((count = bis.read(bytes)) > 0) {
dos.write(bytes, 0, count);
}
dos.close(); // need to close outputstream or result is incomplete file sent to server
// and the server hangs, stuck on the while loop
// if dos is closed then the server sends error free file
我試過這段代碼,並且由於某種原因每次文件到達不完整時。小於實際尺寸。 – Kevik
@Kevik你如何將文件大小發送到服務器?你的客戶的代碼是什麼? – Robbie
我將客戶端代碼添加到代碼的其餘部分 – Kevik