java - 如何通过套接字传输多个文件而不是 1 个文件

标签 java

此代码发送一个特定文件,如何使用套接字将文件列表从一个目录(服务器)发送到另一个目录(客户端)?请帮忙。

服务器类

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {
  public static void main(String[] args) throws IOException {
    ServerSocket servsock = new ServerSocket(123456);
    File myFile = new File("s.pdf");
    while (true) {
      Socket sock = servsock.accept();
      byte[] mybytearray = new byte[(int) myFile.length()];
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile));
      bis.read(mybytearray, 0, mybytearray.length);
      OutputStream os = sock.getOutputStream();
      os.write(mybytearray, 0, mybytearray.length);
      os.flush();
      sock.close();
    }
  }
}

客户端类

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.Socket;

public class Main {
  public static void main(String[] argv) throws Exception {
    Socket sock = new Socket("127.0.0.1", 123456);
    byte[] mybytearray = new byte[1024];
    InputStream is = sock.getInputStream();
    FileOutputStream fos = new FileOutputStream("s.pdf");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    int bytesRead = is.read(mybytearray, 0, mybytearray.length);
    bos.write(mybytearray, 0, bytesRead);
    bos.close();
    sock.close();
  }
}

最佳答案

发送者可以在每个文件的数据前面加上文件的长度。这将使接收者能够计算出一个文件何时结束以及下一个文件何时开始。

关于java - 如何通过套接字传输多个文件而不是 1 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722996/

相关文章:

java - 为什么使用 ProcessBuilder 运行 docker 会导致挂起?

java - 在 Mongo 中插入 JSON

java - Java中的临时文件名称自动更改

java - JSON 数组的 HTML 表单输入等效项是什么?

java - 重写我的世界服务器(获取/编辑源代码并重新编译)

java - 对具有空值的多个条件进行排序

java - 我用 MediaRecorder 录制的文件无法播放

java - Nashorn:如何在 JavaScript 执行之前在 Java 内部预先设置 Java.type()-vars?

java - Primefaces 芯片 Web 组件

java - 如何为 Scala ExecutionContexts 配置关闭策略?