Java implements a method of copying files between two servers

  • 2020-04-01 03:37:37
  • OfStack

This article illustrates a Java approach to file replication between two servers. Share with you for your reference. Specific analysis is as follows:

In general, the file replication function we use most is the file replication function between the server, here is the introduction of an upgrade in the ordinary file replication function, can achieve the replication of two servers to achieve the file, let's take a look at the code.

1. Server side

package sterning;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest {
    int port = 8821;
    void start() {
        Socket s = null;
        try {
            ServerSocket ss = new ServerSocket(port);
            while (true) {
                //Select the file
for transfer                 String filePath = "D:\lib.rar";
                File fi = new File(filePath);
                System.out.println(" The length of the file :" + (int) fi.length());
                // public Socket accept() throws
                //IOException listens for and accepts a connection to this socket. This method blocks until the connection is made. < br / >                 s = ss.accept();
                System.out.println(" To establish socket link ");
                DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
                dis.readByte();
                DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
                DataOutputStream ps = new DataOutputStream(s.getOutputStream());
                //Pass the file name and length to the client. Here to really apply to all platforms, such as Chinese name processing, still need to process, specific can see Think In Java 4th has ready-made code. < br / >                 ps.writeUTF(fi.getName());
                ps.flush();
                ps.writeLong((long) fi.length());
                ps.flush();
                int bufferSize = 8192;
                byte[] buf = new byte[bufferSize];
                while (true) {
                    int read = 0;
                    if (fis != null) {
                        read = fis.read(buf);
                    }
                    if (read == -1) {
                        break;
                    }
                    ps.write(buf, 0, read);
                }
                ps.flush();
                //Close the socket connection, or the client will wait for the server's data,
                //Until the socket timeout, resulting in incomplete data.                               < br / >                 fis.close();
                s.close();               
                System.out.println(" File transfer completed ");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String arg[]) {
        new ServerTest().start();
    }
}

2. Socket Util helper class
package sterning;
import java.net.*;
import java.io.*;
public class ClientSocket {
    private String ip;
    private int port;
    private Socket socket = null;
    DataOutputStream out = null;
    DataInputStream getMessageStream = null;
    public ClientSocket(String ip, int port) {
        this.ip = ip;
        this.port = port;
    }
    /**
     * create socket The connection
     *
     * @throws Exception
     *             exception
     */
    public void CreateConnection() throws Exception {
        try {
            socket = new Socket(ip, port);
        } catch (Exception e) {
            e.printStackTrace();
            if (socket != null)
                socket.close();
            throw e;
        } finally {
        }
    }
    public void sendMessage(String sendMessage) throws Exception {
        try {
            out = new DataOutputStream(socket.getOutputStream());
            if (sendMessage.equals("Windows")) {
                out.writeByte(0x1);
                out.flush();
                return;
            }
            if (sendMessage.equals("Unix")) {
                out.writeByte(0x2);
                out.flush();
                return;
            }
            if (sendMessage.equals("Linux")) {
                out.writeByte(0x3);
                out.flush();
            } else {
                out.writeUTF(sendMessage);
                out.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
            if (out != null)
                out.close();
            throw e;
        } finally {
        }
    }
    public DataInputStream getMessageStream() throws Exception {
        try {
            getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
            return getMessageStream;
        } catch (Exception e) {
            e.printStackTrace();
            if (getMessageStream != null)
                getMessageStream.close();
            throw e;
        } finally {
        }
    }
    public void shutDownConnection() {
        try {
            if (out != null)
                out.close();
            if (getMessageStream != null)
                getMessageStream.close();
            if (socket != null)
                socket.close();
        } catch (Exception e) {
        }
    }
}

3. The client
package sterning;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
public class ClientTest {
    private ClientSocket cs = null;
    private String ip = "localhost";//Set to server IP  Private int port = 8821; < br / >     private String sendMessage = "Windwos";
    public ClientTest() {
        try {
            if (createConnection()) {
                sendMessage();
                getMessage();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    private boolean createConnection() {
        cs = new ClientSocket(ip, port);
        try {
            cs.CreateConnection();
            System.out.print(" Server connection successful !" + "n");
            return true;
        } catch (Exception e) {
            System.out.print(" Connection to server failed !" + "n");
            return false;
        }
    }
    private void sendMessage() {
        if (cs == null)
            return;
        try {
            cs.sendMessage(sendMessage);
        } catch (Exception e) {
            System.out.print(" Failed to send message !" + "n");
        }
    }
    private void getMessage() {
        if (cs == null)
            return;
        DataInputStream inputStream = null;
        try {
            inputStream = cs.getMessageStream();
        } catch (Exception e) {
            System.out.print(" Received message cache error n");
            return;
        }
        try {
            //Save the path locally and the file name is automatically inherited from the server. < br / >             String savePath = "E:\";
            int bufferSize = 8192;
            byte[] buf = new byte[bufferSize];
            int passedlen = 0;
            long len=0;
           
            savePath += inputStream.readUTF();
            DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));
            len = inputStream.readLong();
           
            System.out.println(" The length of the file is :" + len + "n");
            System.out.println(" Start receiving files !" + "n");
                   
            while (true) {
                int read = 0;
                if (inputStream != null) {
                    read = inputStream.read(buf);
                }
                passedlen += read;
                if (read == -1) {
                    break;
                }
                //The following progress bar was made in prograssBar for the graphical interface, where if you were typing a file, you might print out some of the same percentages over and over again
                System.out.println(" File received " +  (passedlen * 100/ len) + "%n");
                fileOut.write(buf, 0, read);
            }
            System.out.println(" Receive completed, file saved as " + savePath + "n");
            fileOut.close();
        } catch (Exception e) {
            System.out.println(" Receiving message error " + "n");
            return;
        }
    }
    public static void main(String arg[]) {
        new ClientTest();
    }
}

I hope this article has been helpful to your Java programming.


Related articles: