首页 新闻 会员 周边

小白提问:两个容器各有一个Java程序,如何实现两方的文件传输?

0
悬赏园豆:20 [已解决问题] 解决于 2023-04-28 09:26

如题该用哪些技术点去完成这样一个场景呢?

问题补充:

这个两个容器就相当于两个人,他们之间互相传文件,类似于一方将文件给另一方存储,然后想要的时候可以另一方再传回来。

有无大佬有示例代码的

nihaoqingtuan的主页 nihaoqingtuan | 初学一级 | 园豆:104
提问于:2023-04-21 11:57
< >
分享
最佳答案
0

解决方式:
在建立容器的时候使用--network参数,使两个容器在一个网络环境中(两个java程序都暴露传文件的接口),然后容器编排,使用服务名进行接口的相互调用,这就实现了两个容器各有一个Java程序,如何实现两方的文件传输
大体的思路就是这样,具体的细节需要参见docker网络

收获园豆:20
红星闪闪放光彩 | 菜鸟二级 |园豆:222 | 2023-04-26 20:47

这两个容器启动时采用host模式,然后程序中配置所在主机的IP地址就行了吧

nihaoqingtuan | 园豆:104 (初学一级) | 2023-04-27 19:24

@nihaoqingtuan: 你说的没错(在同一个网段下方便点,默认就是host模式),把端口映射到宿主机就行了

红星闪闪放光彩 | 园豆:222 (菜鸟二级) | 2023-04-27 19:34
其他回答(3)
1

文件传输指的是什么?比如两个模块都有文件要上传,上传到同一个地方??
可以使用springboot 的 静态文件夹,两个程序放在相同的路径下之类的

人间春风意 | 园豆:2578 (老鸟四级) | 2023-04-21 14:11

不是,这个两个容器就相当于两个人,他们之间互相传文件,类似于一方将文件给另一方存储,然后想要的时候可以另一方再传回来。

支持(0) 反对(0) nihaoqingtuan | 园豆:104 (初学一级) | 2023-04-21 14:51

@nihaoqingtuan: 单纯来讲,就是写接口,上传/下载/删除/
相当于有一个容器做的是存储的功能,

支持(0) 反对(0) 人间春风意 | 园豆:2578 (老鸟四级) | 2023-04-21 14:55

@人间春风意: 也就是两个之间实现socket通信吧。不过我看网上样例代码都是一个传一个收。自己得学学。

支持(0) 反对(0) nihaoqingtuan | 园豆:104 (初学一级) | 2023-04-21 15:03
2

要实现两个容器之间的文件传输,可以使用 Socket 编程。具体步骤如下:

在发送方容器中,使用 Socket 连接接收方容器,并建立输出流。
将要发送的文件从磁盘读入内存。
将文件内容通过输出流发送给接收方容器。
在接收方容器中,使用 ServerSocket 监听端口,等待发送方容器的连接请求。
接收发送方容器发送的文件,并将文件保存到磁盘。
实现这个过程可以使用 Java 提供的 Socket 相关类。具体代码示例如下:

在发送方容器中:

java

import java.io.*;
import java.net.Socket;

public class FileSender {
public static void main(String[] args) throws IOException {
String hostname = "接收方容器的IP地址";
int port = 8888;

    Socket socket = new Socket(hostname, port);

    File file = new File("要发送的文件路径");
    byte[] buffer = new byte[(int) file.length()];

    FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis);

    bis.read(buffer, 0, buffer.length);
    OutputStream os = socket.getOutputStream();

    os.write(buffer, 0, buffer.length);
    os.flush();

    socket.close();
    bis.close();
    fis.close();
}

}
在接收方容器中:

java

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class FileReceiver {
public static void main(String[] args) throws IOException {
int port = 8888;

    ServerSocket serverSocket = new ServerSocket(port);

    Socket socket = serverSocket.accept();

    byte[] buffer = new byte[1024];
    InputStream is = socket.getInputStream();

    File file = new File("接收到的文件路径");
    FileOutputStream fos = new FileOutputStream(file);
    BufferedOutputStream bos = new BufferedOutputStream(fos);

    int bytesRead;
    while ((bytesRead = is.read(buffer)) != -1) {
        bos.write(buffer, 0, bytesRead);
    }

    bos.close();
    socket.close();
    serverSocket.close();
}

}
注意,以上示例代码中的 IP 地址和文件路径需要根据实际情况进行修改。

Technologyforgood | 园豆:6772 (大侠五级) | 2023-04-21 22:11

我想请问下如果两个容器再不同的机子上,使用socket编程通信需要的也就是IP和port吧还需要其他吗?

支持(0) 反对(0) nihaoqingtuan | 园豆:104 (初学一级) | 2023-04-26 11:40

@nihaoqingtuan: 要注意一下是否在同一个网段,不在同一个网段最好使用固定ip访问

支持(0) 反对(0) 红星闪闪放光彩 | 园豆:222 (菜鸟二级) | 2023-04-26 20:51

@红星闪闪放光彩: 这两个容器启动时采用host模式,然后程序中配置所在主机的IP地址就行了吧

支持(0) 反对(0) nihaoqingtuan | 园豆:104 (初学一级) | 2023-04-27 19:26
1

socket

ycyzharry | 园豆:25673 (高人七级) | 2023-04-27 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册