客户端多线程向服务端的文件传输

本文介绍了一个使用Java实现的客户端与服务端文件传输案例。客户端通过Socket连接到指定IP及端口的服务端,发送本地文件,并接收服务端确认信息。服务端接受文件并保存到指定路径,同时向客户端反馈接收状态。

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

客户端

Cleint.java

public class Client {
    public static void main(String[] args) {
        try (Socket socket = new Socket("10.0.179.204", 11000)) {
            FileInputStream fis = new FileInputStream("src/plant.txt");
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();
            int length;
            byte[] bytes = new byte[1024];
            while((length = fis.read(bytes)) != -1){
                os.write(bytes,0,length);
            }
            /*
            * 禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用                      shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。否则会出现错误。
            * */
            socket.shutdownOutput();
            byte[] bytes1 = new byte[1024];
            int num = is.read(bytes1);
            System.out.println(new String(bytes1,0,num));
            fis.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户子线程

UserThread.java

public class UserThread implements Runnable {
    private Socket s;

    public UserThread(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        try {
                OutputStream os = s.getOutputStream();
                InputStream is = s.getInputStream();
                int count=1;
                File f = new File("d:\\test"+"("+count+")"+".txt");//由于是多个不同的客户端向服务端传送文件,所以要考虑文件重名,导致被覆盖。

            while (f.exists()) {
                f = new File("d:\\test"+"("+ count++ +")"+".txt");
            }
            FileOutputStream fos = new FileOutputStream(f);
                byte[] bytes = new byte[1024];
                int length;
                while (((length = is.read(bytes)) != -1)) {
                    fos.write(bytes, 0, length);
                }
                os.write("成功".getBytes());
                fos.close();
                s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
服务端
Server.java

public class Sever {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(11000);
            while (true) {
                Socket s = ss.accept();
                new Thread(new UserThread(s)).start();
            }
            } catch(IOException e){
                e.printStackTrace();
            }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值