【问题标题】:How do I make a loop to read/download file from server (in client-server application)?如何循环从服务器读取/下载文件(在客户端-服务器应用程序中)?
【发布时间】:2015-05-20 10:21:52
【问题描述】:

在我的客户端-服务器应用程序中,客户端向服务器发送GET filename 命令以下载文件。现在客户端必须能够读取(驻留在服务器中的文件的)缓冲区大小并将其下载到客户端。那是我在一个while循环中完成的。我担心的是客户端类中的那个循环: 循环是否正确?我读取文件的方式...?

我想我应该在循环中指定文件大小。那么如何实现或改进呢?

这是我正在处理的代码部分。

客户端:

 if (request.startsWith("GET")) {
                    File file = new File(request.substring(4));
                        is = socket.getInputStream();
                        fos = new FileOutputStream(file);

                        byte[] buffer = new byte[socket.getReceiveBufferSize()];
                        int bytesReceived = 0;
                        while ((bytesReceived = is.read(buffer)) >=0) {
                            //while ((bytesReceived = is.read(buffer))>=buffer) {
                            fos.write(buffer, 0, bytesReceived);
                        }
                        request = "";
                        fos.close();
                        is.close();


     }

服务器端:

  try (FileInputStream fis = new FileInputStream(file)) {
                            os = socket.getOutputStream();
                            byte[] buffer = new byte[(1 << 7) - 1];
                            int bytesRead = 0;

                            while ((bytesRead = fis.read(buffer)) != -1) {
                                os.write(buffer, 0, bytesRead);
                            }

                        }

【问题讨论】:

    标签: java file-io while-loop client-server bufferedreader


    【解决方案1】:

    如果这是 HTTP 协议的实现,客户端可能不是服务器发送的文件的大小。一种方法是服务器始终发送“Content-Length”标头,客户端读取到此长度。更多信息 HTTP 规范:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 另一种方法是客户端读取,直到服务器关闭连接。当服务器发送整个文件时,它会关闭连接。这不是很可靠,因为网络问题可能会断开连接。

    【讨论】:

    • Anton K.,是的 HTTP 协议
    • Anton K.,但我的循环在客户端正确吗?
    • 正确,以防服务器发送文件后关闭连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2022-01-13
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多