多线程图片下载

本文介绍了一个基于Java的多线程图片服务器实现方案,能够同时为多个客户端提供图片下载服务。该服务器通过监听指定端口接收客户端连接请求,并为每个连接创建独立线程进行图片传输。客户端则负责接收并保存图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.zyf.day24;

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;


/**
 * 编写一个服务端可以给多个客户端发送图片。(多线程)
 * @author root
 *
 */
public class ImageServer extends Thread{
	Socket socket;
	//使用该集合是用于存储ip地址的
	static HashSet<String> ips = new HashSet<String>();
	
	public ImageServer(Socket socket) {
		// TODO Auto-generated constructor stub
		this.socket = socket;
	}
    @Override
    public void run() {
    	// TODO Auto-generated method stub


			try {
				//获取到socket输出流对象
				OutputStream outputStream = socket.getOutputStream();
				//获取图片的输入流对象
				FileInputStream fileInputStream = new FileInputStream("C:\\1.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);
				}
				System.out.println("下载的ip是:" + ip);
				//关闭资源
				fileInputStream.close();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    }
    
	public static void main(String[] args) throws IOException {
		//建立tcp的服务,并且要监听一个端口
		ServerSocket serverSocket = new ServerSocket(9090);
		//接受用的的连接
		while(true){
			Socket socket = serverSocket.accept();
			new ImageServer(socket).start();
		}
	}
}

package com.zyf.day24;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;

//下载图片的客户端
public class ImageClient {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
       Socket socket = new Socket(InetAddress.getLocalHost(),9090);
       InputStream inputStream = socket.getInputStream();
       FileOutputStream fileOutputStream = new FileOutputStream("c:\\1.jpg");
       
       byte[] buf = new byte[1024];
       int length = 0;
       while((length = inputStream.read()) != -1){
    	   fileOutputStream.write(buf,0,length);
       }
       //关闭资源
       fileOutputStream.close();
       socket.close();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值