我的文件從服務器傳輸到客戶端時出現問題。問題是,即使文件有多大,最後的字節也不會被傳輸。假設我想下載一個56kb的文件,那麼我只收到35kb的例子。Java套接字文件傳輸 - 未完成文件
我會爲您提供一些代碼片段,也許有人可以看到任何錯誤。
發件人:
public void sendFile(String fileName, Socket socket) {
try {
try {
File transferFile = new File(fileName);
byte[] bytearray = new byte[(int) transferFile.length()];
FileInputStream fin = new FileInputStream(transferFile);
BufferedInputStream bin = new BufferedInputStream(fin);
OutputStream os = socket.getOutputStream();
int bytesRead = 0;
while (-1 != (bytesRead = bin.read(bytearray, 0, bytearray.length))) {
os.write(bytearray, 0, bytesRead);
}
bin.close();
os.flush();
socket.close();
} catch (IOException e) {
System.out.println("error " + e);
}
} catch (Exception ex) {
System.out.println("error " + ex);
}
}
接收機:
public void downloadFile(Socket socket, String fName) {
try {
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(fName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int count;
byte[] buffer = new byte[1024];
while ((count = is.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
bos.close();
} catch (Exception e) {
System.out.println("Error " + e);
}
}
歡迎任何幫助,謝謝。
看看這篇文章和鏈接在該帖子中:http://stackoverflow.com/questions/32251895/java-file-transfer-file-to-server/32252321#32252321&http://www.coderanch .com/t/556838/java/java/Transferring-file-file-data-socket –
在發件人處使用固定長度的緩衝區。沒有必要將它與文件長度聯繫起來。 1025與您的接收代碼相當,儘管較大不會造成傷害。 – EJP