zoukankan      html  css  js  c++  java
  • 多线程下载图片

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.HashSet;
    
    /*
    1. 编写一个服务端可以给多个客户端发送图片。 (多线程)
    
    */
    public class ImageServer extends Thread {
        
        Socket socket ;
        
        //使用该集合是用于存储ip地址的。
        static HashSet<String> ips = new HashSet<String>();
        
        public  ImageServer(Socket socket) {
            this.socket = socket;
        }
        
        @Override
        public void run() {
            try {
                //获取到socket输出流对象
                OutputStream outputStream = socket.getOutputStream();
                //获取图片的输入流对象
                FileInputStream fileInputStream = new FileInputStream("F:\美女\3.jpg");
                //读取图片数据,把数据写出
                byte[] buf = new byte[1024];
                int length = 0 ; 
                while((length = fileInputStream.read(buf))!=-1){
                    
                    outputStream.write(buf,0,length);
                }
                String ip = socket.getInetAddress().getHostAddress();   // socket.getInetAddress() 获取对方的IP地址
                if(ips.add(ip)){
                    System.out.println("恭喜"+ip+"同学成功下载,当前下载的人数是:"+ ips.size());
                }
                
                
                
                //关闭资源
                fileInputStream.close();
                socket.close();
            }catch (IOException e) {
                
            }
        }
        
        
        public static void main(String[] args) throws IOException {
            //建立tcp的服务 ,并且要监听一个端口
            ServerSocket serverSocket  = new ServerSocket(9090);
            while(true){
                //接受用户的链接。
                Socket socket = serverSocket.accept();
                new ImageServer(socket).start();
                
            }
        }
    
    }
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    //下载图片的客户端
    public class ImageClient {
    
        public static void main(String[] args) throws Exception{
            //建立tcp的服务
            Socket socket = new Socket(InetAddress.getLocalHost(),9090);
            //获取socket的输入流对象
            InputStream inputStream = socket.getInputStream();
            //获取文件的输出流对象
            FileOutputStream fileOutputStream = new FileOutputStream("F:\3.jpg");
            //边读边写
            byte[] buf = new byte[1024];
            int length = 0 ; 
            while((length = inputStream.read(buf))!=-1){
                fileOutputStream.write(buf,0,length);
            }
            //关闭资源
            fileOutputStream.close();
            socket.close();
            
        }
        
    }
  • 相关阅读:
    图解+代码|常见限流算法以及限流在单机分布式场景下的思考
    Kafka处理请求的全流程分析
    Kafka索引设计的亮点
    从0到1搭建大数据平台之调度系统
    从0到1搭建大数据平台之计算存储系统
    如何设计数据中台
    Vertica的这些事<十>—— vertica中group by 和join 语句的优化
    Vertica的这些事<七>—— VSQL常用命令
    Vertia的这些事<一>—— 关于vertica的常用操作
    Vertica的这些事(十五)——Vertica报错TM
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6425636.html
Copyright © 2011-2022 走看看