使用Java中的套接字将文件从服务器下载到客户端

编码器

我有一些代码可以将文件从客户端上传到服务器,并且工作正常,上传的文件保存在服务器文件夹Server中,现在想将服务器文件夹中存在的文件下载到客户端文件夹,但是不知道该怎么做。请帮忙

此服务器代码说明了从客户端到服务器的下载文件:

  public static void downloadFile() throws Exception{
    try {
        fileEvent = (FileEvent) inputStream.readObject();
        if (fileEvent.getStatus().equalsIgnoreCase("Error")) {
            System.out.println("Error occurred ..So exiting");
            System.exit(0);
        }
        String outputFile = fileEvent.getDestinationDirectory() + fileEvent.getFilename();
        if (!new File(fileEvent.getDestinationDirectory()).exists()) {
            new File(fileEvent.getDestinationDirectory()).mkdirs();
        }

        int filenamelength = dis.readInt();
        String filename = makeString(filenamelength, dis);

        dstFile = new File(path + filename);
        fileOutputStream = new FileOutputStream(dstFile);
        fileOutputStream.write(fileEvent.getFileData());
        fileOutputStream.flush();
        fileOutputStream.close();
        System.out.println("Output file : " + outputFile + " is successfully saved ");
        Thread.sleep(3000);
        System.exit(0);

    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

这是用于将文件从客户端上传到服务器的客户端代码:

 public static void sendFile() throws Exception {
    dos.writeInt(6);
    dos.writeChars("upload");

    fileEvent = new FileEvent();
   String fileName = sourceFilePath.substring(sourceFilePath.lastIndexOf("/") + 1, sourceFilePath.length());
    String path = sourceFilePath.substring(0, sourceFilePath.lastIndexOf("/") + 1);
    fileEvent.setDestinationDirectory(destinationPath);
    fileEvent.setFilename(fileName);
    fileEvent.setSourceDirectory(sourceFilePath);
    File file = new File(sourceFilePath);
    if (file.isFile()) {
        try {
            DataInputStream diStream = new DataInputStream(new FileInputStream(file));
            long len = (int) file.length();
            byte[] fileBytes = new byte[(int) len];
            int read = 0;
            int numRead = 0;
            while (read < fileBytes.length && (numRead = diStream.read(fileBytes, read,
                    fileBytes.length - read)) >= 0) {
                read = read + numRead;
            }
            fileEvent.setFileSize(len);
            fileEvent.setFileData(fileBytes);
            fileEvent.setStatus("Success");
        } catch (Exception e) {
            e.printStackTrace();
            fileEvent.setStatus("Error");
        }
    } else {
        System.out.println("path specified is not pointing to a file");
        fileEvent.setStatus("Error");
    }
    //Now writing the FileEvent object to socket
    try {

        outputStream.writeObject(fileEvent);

        System.out.println("Choose file: ");
        String str = scanner.nextLine();

        String[] parts = str.split(Pattern.quote("\\"));
        String filename = parts[parts.length - 1];

        dos.writeInt(filename.length());
        dos.writeChars(filename);

        Thread.sleep(3000);
        System.exit(0);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}
用户名
  1. 您没有说明FileEvent要从哪个API获取,但是您不应该使用任何类似的技术来假定文件可以放入内存:

    long len = (int) file.length();
    byte[] fileBytes = new byte[(int) len];
    

    在这里,您假设(a)len <= Integer.MAX_VALUE和(b)可以创建该大小的字节数组。它无法缩放。

        int read = 0;
        int numRead = 0;
        while (read < fileBytes.length && (numRead = diStream.read(fileBytes, read,
                fileBytes.length - read)) >= 0) {
            read = read + numRead;
        }
        fileEvent.setFileSize(len);
        fileEvent.setFileData(fileBytes);
    

    同上。

  2. 您不应像这样在同一套接字上混合使用ObjectOutputStreamDataOutputStream

    outputStream.writeObject(fileEvent);
    ...
    dos.writeInt(filename.length());
    dos.writeChars(filename);
    

因此,无论您的测试显示什么,它在一般情况下都行不通。

相反,您应该使用现有的协议(例如FTP),URL在下载的情况下可以直接通过使用,而在上传的情况下可以直接通过Apache客户端使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Java中的套接字将文件从客户端传输到服务器

来自分类Dev

使用C中的套接字将文件从客户端发送到服务器

来自分类Dev

使用python套接字将Txt文件从客户端发送到服务器

来自分类Dev

通过套接字将Java客户端中的int写入c服务器

来自分类Dev

使用C中的UDP套接字将结构从客户端传递到服务器

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

Java客户端/服务器套接字问题

来自分类Dev

Java TCP 客户端/服务器套接字

来自分类Dev

从服务器将文件下载到客户端-jquerymobile / html5 / c#

来自分类Dev

套接字将C#客户端发布到Java服务器

来自分类Dev

将客户端注册到服务器-Java套接字编程

来自分类Dev

Java套接字-将数据从服务器发送到客户端

来自分类Dev

Java套接字-将数据从客户端发送到服务器

来自分类Dev

通过python中的TCP套接字在客户端-服务器之间发送文件?

来自分类Dev

通过python中的TCP套接字在客户端-服务器之间发送文件?

来自分类Dev

使用套接字从服务器向客户端发送静态文件

来自分类Dev

使用套接字C#客户端/服务器发送文件

来自分类Dev

将Android客户端连接到NodeJS中的套接字服务器时出错

来自分类Dev

使用套接字将值从服务器发送到客户端

来自分类Dev

Java套接字服务器-客户端;卡在服务器端

来自分类Dev

使用套接字在客户端阻止的客户端-服务器通信

来自分类Dev

设置客户端套接字和服务器套接字侦听器 (Java)

来自分类Dev

Java中持久的客户端-服务器套接字连接

来自分类Dev

如何使用 Spock 对 Java 套接字服务器/客户端对进行单元测试?

来自分类Dev

如何使用 Java 客户端和 Python 服务器通过套接字创建 IPC?

来自分类Dev

如何使用Java中的套接字从服务器向特定客户端发送字符串消息?

来自分类Dev

使用套接字的客户端 - 服务器:线程“main”中的异常 java.io.EOFException

来自分类Dev

如何使用url将python套接字客户端连接到服务器套接字?

Related 相关文章

  1. 1

    通过Java中的套接字将文件从客户端传输到服务器

  2. 2

    使用C中的套接字将文件从客户端发送到服务器

  3. 3

    使用python套接字将Txt文件从客户端发送到服务器

  4. 4

    通过套接字将Java客户端中的int写入c服务器

  5. 5

    使用C中的UDP套接字将结构从客户端传递到服务器

  6. 6

    将输入从C套接字客户端读取到Java套接字服务器

  7. 7

    将输入从C套接字客户端读取到Java套接字服务器

  8. 8

    Java客户端/服务器套接字问题

  9. 9

    Java TCP 客户端/服务器套接字

  10. 10

    从服务器将文件下载到客户端-jquerymobile / html5 / c#

  11. 11

    套接字将C#客户端发布到Java服务器

  12. 12

    将客户端注册到服务器-Java套接字编程

  13. 13

    Java套接字-将数据从服务器发送到客户端

  14. 14

    Java套接字-将数据从客户端发送到服务器

  15. 15

    通过python中的TCP套接字在客户端-服务器之间发送文件?

  16. 16

    通过python中的TCP套接字在客户端-服务器之间发送文件?

  17. 17

    使用套接字从服务器向客户端发送静态文件

  18. 18

    使用套接字C#客户端/服务器发送文件

  19. 19

    将Android客户端连接到NodeJS中的套接字服务器时出错

  20. 20

    使用套接字将值从服务器发送到客户端

  21. 21

    Java套接字服务器-客户端;卡在服务器端

  22. 22

    使用套接字在客户端阻止的客户端-服务器通信

  23. 23

    设置客户端套接字和服务器套接字侦听器 (Java)

  24. 24

    Java中持久的客户端-服务器套接字连接

  25. 25

    如何使用 Spock 对 Java 套接字服务器/客户端对进行单元测试?

  26. 26

    如何使用 Java 客户端和 Python 服务器通过套接字创建 IPC?

  27. 27

    如何使用Java中的套接字从服务器向特定客户端发送字符串消息?

  28. 28

    使用套接字的客户端 - 服务器:线程“main”中的异常 java.io.EOFException

  29. 29

    如何使用url将python套接字客户端连接到服务器套接字?

热门标签

归档