TCP文件下载 , 连接一个下一个

客户端代码

package com.test.test05;

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

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //创建客户端对象
        Socket socket = new Socket("127.0.0.1", 9090);


        //创建网络输入流,接收服务端的数据
        InputStream netInput = socket.getInputStream();
        //创建本地输出流,将文件写到本地
        FileOutputStream fos =
                new FileOutputStream("G:/Server/" + System.currentTimeMillis() + "car.jpg");

        //边读服务端发送过来的数据,边把数据写到本地
        byte[] bytes = new byte[1024];
        int len;
        while ((len=netInput.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }

        fos.close();
        socket.close();

    }
}

``` java

服务端代码
``` java
package com.test.test05;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(10);
        //创建服务端对象
        ServerSocket serverSocket = new ServerSocket(9090);


        boolean flag = true;//设立标记,执行到这一步说明有客户端连入
        //不断的接受客户端的连接
        while (flag) {
            //准备接受客户端连接
            Socket socket = serverSocket.accept();

            threadPool.submit(new DownloadThread(socket));

        }
    }
}

class DownloadThread implements Runnable {
    private Socket socket;

    public DownloadThread(Socket socket) {
        this.socket = socket;
    }

    //创建集合对象存放IP地址
    HashSet<String> ips = new HashSet<String>();

    @Override
    public void run() {
        try {

            //获取本地字节流,从本地加载数据
            FileInputStream localInput = new FileInputStream("E:/car.jpg");
            //获取网络输出流,向客户端写数据
            OutputStream netOut = socket.getOutputStream();

            //边读边写
            byte[] bytes = new byte[1024];
            int len;
            while ((len = localInput.read(bytes)) != -1) {
                netOut.write(bytes, 0, len);
            }

            //获得客户IP地址
            String ip = socket.getInetAddress().getHostAddress();
            if (ips.add(ip)) {
                System.out.println("恭喜" + ip + "同学下载成功!!当前下载人数是:" + ips.size());
            }
            //释放资源
            localInput.close();
            socket.close();
        } catch (Exception e) {
            System.out.println("下载失败!原因:" + e.getMessage());
        }
    }
}
``` java
posted @ 2020-06-16 13:40  阿亮在努力  阅读(247)  评论(0)    收藏  举报