Socket 多线程 多文件传输

public class MultiTranslate implements Impl{
	private ExecutorService executorService = Executors.newFixedThreadPool(5);
    private String parentPath;
    @Override
    public void sendFile(File file, List<InetSocketAddress> list) {
        parentPath = file.getParent();
        for(InetSocketAddress sa : list) {
        	sendFile(file, sa);
        }
    }
    public void sendFile(File file, InetSocketAddress sa) {
        if(file.isFile()){
        	executorService.execute(() -> {
        		try{
                    Socket socket = new Socket(sa.getAddress(),sa.getPort());
                    DataInputStream dis = new DataInputStream(new FileInputStream(file));
                    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
                    dos.writeInt(1);// 文件数量
                    dos.writeUTF(file.getAbsolutePath().replace(parentPath, ""));// 文件名
                    dos.writeLong(file.length());// 文件大小
                    byte[] b = new byte[1024];
                    int c = -1;
                    while((c = dis.read(b)) != -1){
                        dos.write(b);// 文件字节
                    }
                    dos.flush();
                    dis.close();
                    dos.close();
                    socket.close();
                }catch(IOException e){e.printStackTrace();}
        	});
        } else {
            for(File f : file.listFiles()){
            	sendFile(f, sa);
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值