如题该用哪些技术点去完成这样一个场景呢?
这个两个容器就相当于两个人,他们之间互相传文件,类似于一方将文件给另一方存储,然后想要的时候可以另一方再传回来。
有无大佬有示例代码的
解决方式:
在建立容器的时候使用--network参数,使两个容器在一个网络环境中(两个java程序都暴露传文件的接口),然后容器编排,使用服务名进行接口的相互调用,这就实现了两个容器各有一个Java程序,如何实现两方的文件传输
大体的思路就是这样,具体的细节需要参见docker网络
这两个容器启动时采用host模式,然后程序中配置所在主机的IP地址就行了吧
@nihaoqingtuan: 你说的没错(在同一个网段下方便点,默认就是host模式),把端口映射到宿主机就行了
文件传输指的是什么?比如两个模块都有文件要上传,上传到同一个地方??
可以使用springboot 的 静态文件夹,两个程序放在相同的路径下之类的
不是,这个两个容器就相当于两个人,他们之间互相传文件,类似于一方将文件给另一方存储,然后想要的时候可以另一方再传回来。
@nihaoqingtuan: 单纯来讲,就是写接口,上传/下载/删除/
相当于有一个容器做的是存储的功能,
@人间春风意: 也就是两个之间实现socket通信吧。不过我看网上样例代码都是一个传一个收。自己得学学。
要实现两个容器之间的文件传输,可以使用 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 地址和文件路径需要根据实际情况进行修改。
我想请问下如果两个容器再不同的机子上,使用socket编程通信需要的也就是IP和port吧还需要其他吗?
@nihaoqingtuan: 要注意一下是否在同一个网段,不在同一个网段最好使用固定ip访问
@红星闪闪放光彩: 这两个容器启动时采用host模式,然后程序中配置所在主机的IP地址就行了吧
socket