zoukankan      html  css  js  c++  java
  • [Socket]Socket文件传输

    1、Server

    import java.io.DataInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server
    {
        private ServerSocket serverSocket;
    
        private DataInputStream in;
    
        private FileOutputStream out;
    
        public Server(int port) throws IOException
        {
            serverSocket = new ServerSocket(8899);
        }
    
        public void receiveFile(String destFile) throws IOException
        {
            Socket socket = serverSocket.accept();
            DataInputStream in = new DataInputStream(socket.getInputStream());
            
            out = new FileOutputStream(destFile);
            int length = in.readInt();
            System.out.println("receiveLength:"+length);
    
            byte[] buffer = new byte[2048];
            int end = 0;
            while ((end = in.read(buffer)) > 0)
            {
                out.write(buffer, 0, end);
                out.flush();
            }
        }
        public void close()
        {
            try{
                try{
                    if (in != null) in.close();
                }
                finally{
                    try{
                        if (out != null) out.close();
                    }
                    finally{
                        serverSocket.close();
                    }
                }
            }catch (IOException e){
                // ignore
            }
    
        }
    
        public static void main(String[] args) throws IOException
        {
            Server server = new Server(8899);
            try{
                server.receiveFile("c:/dest.txt");
            }finally{
                server.close();
            }
        }
    }

    2、Client

    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class Client
    {
        private Socket socket;
    
        private FileInputStream input;
    
        private DataOutputStream output;
    
        public Client(String IP, int port) throws UnknownHostException, IOException
        {
            this.socket = new Socket(IP, port);
            output = new DataOutputStream(socket.getOutputStream());
        }
    
        public void sendFile(String fileName) throws IOException
        {
            input = new FileInputStream(fileName);
            // 获得文件长度
            int fileLength = input.available();
            System.out.println("file length:" + fileLength);
            output.writeInt(fileLength);
            // 读取文件,写入socket
            byte[] buffer = new byte[2048];
            int bufferLength = 0;
            while ((bufferLength = input.read(buffer)) > 0)
            {
                output.write(buffer, 0, bufferLength);
            }
        }
    
        public void close()
        {
            try{
                try{
                    if (input != null) input.close();
                }
                finally{
                    try{
                        if (output != null) output.close();
                    }
                    finally{
                        socket.close();
                    }
                }
            }catch (IOException e){
                // ignore
            }
    
        }
    
        public static void main(String[] args) throws UnknownHostException, IOException
        {
            Client client = new Client("127.0.0.1", 8899);
            try
            {
                client.sendFile("c:/src.txt");
            }
            finally
            {
                client.close();
            }
        }
    }
  • 相关阅读:
    电脑提示无法装入/加载SolidWorks DLL文件:sldshellutils如何解决
    vmware vpshere 安装完的必备工作
    建立AD域,修改密码后不重启生效命令
    VMware vSphere 6 Enterprise Plus 注册码
    VMware-viclient-all
    域控中将组策略应用到安全组
    Windows server 2003域控迁移到2012
    SecureCRT 基本设置
    linux之"server" directive is not allowed here in
    wordpress(二)wordpress环境迁移
  • 原文地址:https://www.cnblogs.com/jfqiu/p/3242863.html
Copyright © 2011-2022 走看看