Java代码实现两台电脑之间传文件(2)

这里是对前面那个博客的封装和完善
使其更能符合多种场景下的使用
不建议大家看这里的源码
http://blog.csdn.net/liumang9438/article/details/78322531这里的源码比较适合入门
实例代码:

服务器端(TransferServer.java)
//筱白痴:20171024
//服务器端
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.Socket;
import java.net.ServerSocket;
import java.io.IOException;

public class TransferServer {
    private File sendDir;
    private File saveDir;
    private FileInputStream in;
    private FileOutputStream out;
    private FileInputStream sendStream;
    private FileOutputStream saveStream;
    private Socket socket;
    private ServerSocket server;
    private int port;

    public TransferServer() {
        sendDir = new File("E:\\tempServerSend.txt");   //默认发送的文件
        saveDir = new File("E:\\tempServerSave.txt");   //默认存文件的文件
        port = 2017;        //默认端口
    }

    public File getSendDir() {
        return sendDir;
    }

    public void setSendDir(File sendDir) {
        this.sendDir = sendDir;
    }

    public File getSaveDir() {
        return saveDir;
    }

    public void setSaveDir(File saveDir) {
        this.saveDir = saveDir;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    private void init() {
        try {
            if (!sendDir.exists()) {        //防止报错
                sendDir.createNewFile();
            }
            if (!saveDir.exists()) {
                saveDir.createNewFile();
            }
            sendStream = new FileInputStream(sendDir);
            saveStream = new FileOutputStream(saveDir);
            server = new ServerSocket(port);
        } catch(Exception e) {
            System.out.println(e);
        }
    }

    public void waitConnect() {
        try {
            init();     //初始化
            socket = server.accept();
            in = (FileInputStream)socket.getInputStream();
            out = (FileOutputStream)socket.getOutputStream();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public void send() {
        try {
            init();     //这是是防止使用setter函数之后,及时更新数据
            byte[] b = new byte[64];
            int n = sendStream.read(b);
            while (-1 != n) {
                out.write(b, 0, n);
                n = sendStream.read(b);
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public void receive() {     //以字节流的方式接收文件
        try {
            init();     //这是是防止使用setter函数之后,及时更新数据
            byte[] b = new byte[64];
            int n = in.read(b);
            while (-1 != n) {
                saveStream.write(b, 0, n);
                n = in.read(b);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public void closeAll() {        //关闭全部流和套接字
        try {
            if (null != sendStream) {
                sendStream.close();
            }
            if (null != out) {
                out.close();
            }
            if (null != saveStream) {
                saveStream.close();
            }
            if (null != in) {
                in.close();
            }
            if (null != socket) {
                socket.close();
            }
            if (null != server) {
                server.close();
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    //测试程序
    public static void main(String[] args) {
        TransferServer server = new TransferServer();
        server.setSendDir(new File("E:\\shaohan.png"));
        server.waitConnect();
        server.send();
        server.closeAll();
    }
}

客户端代码(TransferClient.java)
//筱白痴:20171024
//客户端
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.Socket;
import java.io.IOException;

public class TransferClient {
    private File sendDir;
    private File saveDir;
    private FileInputStream in;
    private FileOutputStream out;
    private FileInputStream sendStream;
    private FileOutputStream saveStream;
    private Socket socket;
    private int port;
    private String host;

    public TransferClient() {
        sendDir = new File("E:\\tempClientSend.txt");
        saveDir = new File("E:\\tempClientSave.txt");
        host = "127.0.0.1";     //默认连接的地址主机
        port = 2017;            //默认连接的端口
    }

    private void init() {   //初始化
        try {
            if (null != sendDir) {
                sendDir.createNewFile();
            }
            if (null != saveDir) {
                saveDir.createNewFile();
            }
            sendStream = new FileInputStream(sendDir);
            saveStream = new FileOutputStream(saveDir);
            socket = new Socket(host, port);
            in = (FileInputStream)socket.getInputStream();
            out = (FileOutputStream)socket.getOutputStream();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public File getSendDir() {
        return sendDir;
    }

    public void setSendDir(File sendDir) {
        this.sendDir = sendDir;
    }

    public File getSaveDir() {
        return saveDir;
    }

    public void setSaveDir(File saveDir) {
        this.saveDir = saveDir;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public void send() {
        try {
            init();     //初始化
            byte[] b = new byte[64];
            int n = sendStream.read(b);
            while (-1 != n) {
                out.write(b, 0, n);
                n = sendStream.read(b);
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public void receive() {
        try {
            init();     //初始化
            byte[] b = new byte[64];
            int n = in.read(b);
            while (-1 != n) {
                saveStream.write(b, 0, n);
                n = in.read(b);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public void closeAll() {
        try {
            if (null != sendStream) {
                sendStream.close();
            }
            if (null != out) {
                out.close();
            }
            if (null != saveStream) {
                saveStream.close();
            }
            if (null != in) {
                in.close();
            }
            if (null != socket) {
                socket.close();
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    //测试函数,请先运行服务器端
    public static void main(String[] args) {
        TransferClient client = new TransferClient();
        client.setSaveDir(new File("E:\\shaohantemp.png"));
        client.receive();
        client.closeAll();
    }
}

猜你喜欢

转载自blog.csdn.net/liumang9438/article/details/78335405