我正在用java制作文件传输线程
这是服务器代码
(fileWriter = new BufferedOutputStream(fileTransferSocket.getOutputStream()))
try {
BufferedInputStream fileReader = new BufferedInputStream(new FileInputStream(CLIENT_PATH + "/" + filename));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.flush();
fileReader.close();
System.out.println(filename + " send complete");
}
和客户代码
(fileReader = new BufferedInputStream(fileTransferSocket.getInputStream()))
try {
BufferedOutputStream fileWriter = new BufferedOutputStream(new FileOutputStream(new File(PROGRAM_PATH + "/" + filename)));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
System.out.println(filename + " receive complete.");
fileWriter.close();
}
服务器打印
System.out.println(filename + " send complete");
这意味着服务器发送文件的每个字节。
但是,客户端不打印
System.out.println(filename + " receive complete.");
我检查了 while 循环运行了多少次(检查了服务器和客户端)
两个 while 循环都运行 685 次
我认为客户端的 while 循环无法识别文件传输结束。
有人知道问题吗?
最佳答案
要将EOF
发送到套接字,请关闭服务器上的fileWriter
。
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.close(); // note
fileReader.close();
关于java - 客户端无法识别文件流结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26599400/