java通过代码连接另一台服务器,可实现将文件发送至另一台服务器

一般可以将数据库中的数据生成csv文件,对于多服务器部署的分布式微服务,有时候需要将生成的文件放在外部网关或其他服务器中

本篇可以实现通过代码连接其他服务器,并可以传送文件至其他服务器中,并且路径可以自定义
注:需要有另一台服务器的权限账号

连接另一台服务器的代码如下

/**
     * @param host 
     *            另一台服务器地址 
     * @param port 
     *            另一台服务器端口 
     * @param username 
     *            另一台服务器权限账户用户名 
     * @param password 
     *            另一台服务器权限账户密码 
     * @return 
     */
public ChannelSftp connect(String host, int port, String username,  String password) {  
            ChannelSftp sftp = null;   
            JSch jsch = new JSch();  
            jsch.getSession(username, host, port);  
            Session sshSession = jsch.getSession(username, host, port);   
            sshSession.setPassword(password); 
            Properties sshConfig = new Properties();  
            sshConfig.put("StrictHostKeyChecking", "no");
            sshSession.setConfig(sshConfig);  
            sshSession.connect();  
            Channel channel = sshSession.openChannel("sftp");  
            channel.connect();  
            sftp = (ChannelSftp) channel; 
            return sftp;  
    } 
 

将本地服务器上的文件传送至另一台服务器代码如下

/** 
     * 文件上传 
     *  
     * @param directory  上传至另一台服务器的存储路径
     * @param uploadFile 本服务器需要上传的文件路径及文件名
     * @param sftp  调用上方连接另一台服务器的方法connect
     */  
    public void SendFile(String directory, String uploadFile, ChannelSftp sftp) {  
        
        sftp.cd(directory);  
        File file = new File(uploadFile);  
        sftp.put(new FileInputStream(file), file.getName());  
        
    }
 

从另一台服务器上传送文件至本地服务器代码

/** 
     * 文件下载 
     *  
     * @param directory 另一台服务器的存储路径 
     * @param downloadFile 要下载的文件路径及文件名 
     * @param saveFile 下载下来的文件名(如下载到本地服务器需要更改文件名) 
     * @param sftp 调用上方连接另一台服务器的方法connect
     */  
    public void download(String directory, String downloadFile,  String saveFile, ChannelSftp sftp) {  
         
            sftp.cd(directory);  
            File file = new File(saveFile);  
            sftp.get(downloadFile, new FileOutputStream(file));  
         
    }  

https://blog.csdn.net/weixin_42827898/article/details/114342549

转载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现将消息发送给所有连接的客户端,可以在服务器类中维护一个保存所有客户端输出流的列表。当服务器接收到一条消息时,遍历这个列表,将消息发送给每个客户端。 在服务器类中,定义一个`List<PrintWriter>`类型的变量,用于保存所有客户端的输出流。在处理客户端连接的线程中,将每个新连接的客户端的输出流添加到这个列表中。 ```java // 服务器类 public class Server { private ServerSocket serverSocket; private List<PrintWriter> clientWriters; public Server() { clientWriters = new ArrayList<>(); } public void start() { try { serverSocket = new ServerSocket(8888); while (true) { Socket socket = serverSocket.accept(); // 处理客户端连接的线程 Thread thread = new Thread(new ClientHandler(socket)); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } // 处理客户端连接的线程 private class ClientHandler implements Runnable { private Socket socket; private BufferedReader reader; private PrintWriter writer; public ClientHandler(Socket socket) { this.socket = socket; try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); // 将客户端的输出流保存到列表中 clientWriters.add(writer); } catch (IOException e) { e.printStackTrace(); } } public void run() { String message; try { while ((message = reader.readLine()) != null) { // 将消息发送给所有连接的客户端 for (PrintWriter clientWriter : clientWriters) { clientWriter.println(message); clientWriter.flush(); } } } catch (IOException e) { e.printStackTrace(); } } } } ``` 要实现将消息发送给服务器,在客户端界面中,当用户点击发送按钮时,将消息发送给服务器即可。 在客户端界面中,获取用户输入的消息,通过Socket对象的输出流将消息发送给服务器。 ```java // 客户端界面 public class ClientGUI extends Application { private Socket socket; private PrintWriter writer; public void start(Stage primaryStage) { // 创建界面布局 TextField inputField = new TextField(); // 输入消息的文本框 Button sendButton = new Button("发送"); // 发送按钮 // 设置按钮点击事件 sendButton.setOnAction(e -> { String message = inputField.getText(); writer.println(message); writer.flush(); inputField.clear(); }); // 创建布局,并添加控件 VBox vbox = new VBox(); vbox.getChildren().addAll(inputField, sendButton); // 创建场景并设置布局 Scene scene = new Scene(vbox, 400, 300); // 设置舞台并显示 primaryStage.setScene(scene); primaryStage.show(); // 连接服务器 try { socket = new Socket("localhost", 8888); writer = new PrintWriter(socket.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } } ``` 在服务器中,当接收到客户端发送的消息时,将其发送给所有连接的客户端。 ```java // 服务器类 public class Server { private ServerSocket serverSocket; private List<PrintWriter> clientWriters; public Server() { clientWriters = new ArrayList<>(); } public void start() { try { serverSocket = new ServerSocket(8888); while (true) { Socket socket = serverSocket.accept(); // 处理客户端连接的线程 Thread thread = new Thread(new ClientHandler(socket)); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } // 处理客户端连接的线程 private class ClientHandler implements Runnable { private Socket socket; private BufferedReader reader; private PrintWriter writer; public ClientHandler(Socket socket) { this.socket = socket; try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); // 将客户端的输出流保存到列表中 clientWriters.add(writer); } catch (IOException e) { e.printStackTrace(); } } public void run() { String message; try { while ((message = reader.readLine()) != null) { // 将消息发送给所有连接的客户端 for (PrintWriter clientWriter : clientWriters) { clientWriter.println(message); clientWriter.flush(); } // 将消息显示在服务器界面上(可选) System.out.println(message); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 这样,当客户端发送一条消息时,服务器会将该消息发送给所有连接的客户端,并且服务器也可以将接收到的消息显示在控制台上。 请注意,在真实的应用中,你可能还需要处理异常、加入更多的错误检查、处理客户端断开连接等情况。此外,还应该考虑消息的格式、认证和加密等安全性相关问题。以上代码仅为简单示例,你可以根据需要进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值