【发布时间】:2020-03-15 00:24:27
【问题描述】:
我正在编写一个类,用于通过 Java 中的套接字进行 2 路发送文件 这里是on GitHub。 在文件接收完成之前一切都很好。 很快:
- 在 client.java 中是硬编码到 C:\Maven\README.txt 的方式
- 首先我发送文件名
- 然后我发送文件长度
- 第三步,我将文件从 FileInputStream 发送到 DataOutputStream
在客户端:
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 读取时遇到这种情况(从服务器发送的消息,但客户端上没有此消息的接收者)。但目前我正在尝试添加在文件传输完成后更改的标志并稍后检查它的状态。它在服务器和客户端上都可以工作,但是从/向 Socket 添加读/写会使我回到服务器和客户端都在等待某些东西的情况。
现在怎么了?
【问题讨论】:
-
UPD:[ENG] 我试图将读/写移出发送功能。如果客户端是发件人而服务器是收件人 - 服务器会因 EOFException 而崩溃。但我不知道这是什么原因。 [俄罗斯] Попробовал вынести последующую чтение/отправку по сокету из функции。 Если клиент отправляет, а сервер принимает сообщение после передачи файла, то сервер ловит EOFException。 Но не догоняю чем он вызван.
标签: java file sockets transfer