java - 客户端无法识别文件流结尾

标签 java file-transfer bufferedinputstream bufferedoutputstream

我正在用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/

相关文章:

java - java中如何在一个文件中写入多次?

java - 围绕 DataInputStream 工作以适应 Android/Java 中的更新标准

java - Eclipse 中的 BigInteger 有限

java - JSESSIONID 持续时间

android - 如何使用 NanoHTTPD 在 android 上创建桌面可以访问的 http 服务器(反之亦然)

azure - 如何将大文件夹传输到azure上的虚拟机

java - 在 Java 中,我如何将数字四舍五入到任意精度级别?

java - 比较第三个列表问题中的两个列表和相同值存储

python-3.x - PYVISA:如何传输二进制 block 数据,以便图片正确格式化并保存到我的电脑上?

java - BufferedInputStream 说它不可用,但仍然可以工作