[英]Java Send file via Socket
我正在編寫一個 class 用於通過 Sockets 在 Java 中的 Sockets 進行 2 向發送文件,這里 是 ZD3B7C913CD04EBFEC0E 。 在文件接收完成之前一切都很好。 不久:
在客戶端:
byte[] bytes = new byte[(int)forSend.length()];
InputStream fin = new FileInputStream(forSend);
int count;
while ((count = fin.read(bytes)) > 0) {
out.write(bytes, 0, count);
}
fin.close();
fout = new FileOutputStream(filename);
byte[] bytes = new byte[length];
System.out.println("receiving file...");
int count;
while ((count = in.read(bytes)) > 0) {
fout.write(bytes, 0, count);
}
fout.flush();
fout.close();
當我試圖添加代碼以便在那之后向套接字寫入一些東西時,在啟動服務器和客戶端之后正在等待一些東西(我不知道是什么)
以前我在丟失一次 DataInputStream 讀取時遇到這種情況(從服務器發送的消息,但客戶端上沒有此消息的接收者)。 但目前我正在嘗試添加在文件傳輸完成后更改的標志,並稍后檢查它的 state。 它在服務器和客戶端上都可以工作,但是從/向 Socket 添加讀/寫會使我回到服務器和客戶端都在等待某些東西的情況。
現在怎么了?
我的朋友Denr01幫助了我,所以我的錯誤是控制文件長度,我的問題中沒有任何地方。 因此,我的“完成”確認被寫入文件。 解決問題的方法在發件人中:
int read = 0;
int block = 8192;
int count = 0;
byte[] bytes = new byte[block];
while (read != forSend.length()) {
count = fin.read(bytes, 0, block);
out.writeInt(count);
out.write(bytes, 0, count);
read += count;
System.out.println("already sent " + read + " bytes of " + forSend.length());
}
在發件人中:
int block = 8192;
int count = 0;
int read = 0;
byte[] bytes = new byte[block];
System.out.println("recieving file...");
while (read != length) {
block=in.readInt();
in.readFully(bytes, 0, block);
fout.write(bytes, 0, block);
read += block;
System.out.println("already recieved " + read + " bytes of " + length);
}
在這種情況下,我們可以控制每個文件讀取迭代,並且始終知道要接收多少字節,因此當接收到的所有字節文件都相同時,下一個“消息”將不會寫入文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.