1

我正在用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 循环都运行 685 次

我认为客户端的 while 循环无法识别文件传输结束。

有谁知道问题?

4

2 回答 2

1

要发送EOF到套接字,请fileWriter在服务器处关闭。

while((packet = fileReader.read()) != -1)
   fileWriter.write(packet);

fileWriter.close(); // note
fileReader.close();
于 2014-10-28T01:53:05.170 回答
-1

您可以在服务中测试 print -1 以告知转换结束:

while((packet = fileReader.read()) != -1)
            fileWriter.write(packet);
fileWriter.write(-1);
于 2014-10-28T01:33:12.670 回答