如何制作循环以从服务器(在客户端服务器应用程序中)读取/下载文件



在我的客户端服务器应用程序中,客户端将GET filename命令发送到服务器以下载文件。现在,客户端必须能够读取(服务器中的文件的文件)并将其下载到客户端中。那就是我在循环内完成的。我关心的是客户班级中的循环:循环正确吗?我阅读文件的方式...?

我认为我应该在循环内指定文件大小。那如何完成或改进?

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

客户端:

 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);
                            }
                        }

如果这是HTTP协议的实现,则客户端可能不是由服务器发送的文件大小。一种方法是服务器始终发送" content-Length"标头,客户端读取到此长度。添加信息http规范:http://www.w3.org/protocols/rfc2616/rfc2616/rfc2616-sec14.html另一种方法是读取,直到服务器关闭连接为止。当服务器发送整个文件时,它会关闭连接。这不是很可靠,因为由于网络问题而可能会删除连接。

最新更新