TCP实现上传文件功能

本文介绍了一个使用Java实现的客户端和服务端文件传输案例。客户端能够选择本地文件并将其发送到服务端,服务端接收文件并保存到指定目录下,同时向客户端反馈文件上传成功的信息。

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

一丶客户端

具体步骤看代码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws Exception {

        //1.创建客户端Socket对象,并指定ip跟端口
        Socket s = new Socket("127.0.0.1",6666);

        //2.将Socket中封装好的字节输出流包装成缓冲字节输出流
        BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());

        //3.从指定的路径中读取要上传的文件上传到服务端
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:/待上传文件.txt"));
        //IO流经典4行代码
        byte[] b = new byte[1024];
        int len;
        while((len=bis.read(b))!=-1){
            bos.write(b, 0, len);
        }
        //将文件内容从缓存器刷新到服务端
        bos.flush();
        //告诉服务端,客户端已经上传完毕
        s.shutdownOutput();

        //4.获取服务端的返回结果
        //将Socket中封装好的字节输入流包装成字节缓冲输入流
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        //读取
        String string = br.readLine();
        System.out.println(string);

        //关闭资源
        bis.close();//自己创建的字节缓冲输出流
        s.close();//关闭Socket,其自己封装好的输入输出流也将关闭
    }
}

二丶服务端

具体步骤看代码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

public class Server {

    public static void main(String[] args) throws Exception {

        //1.创建服务端ServerSocket对象,并指定端口号
        ServerSocket socket = new ServerSocket(6666);

        //2.无限循环接受客户端发的请求
        while(true){
            Socket s = socket.accept();//阻塞式,即客户端木有请求就一直等待

            //3.将ServerSocket中封装好的输入流包装成字节输入流
            BufferedInputStream bis = new BufferedInputStream(s.getInputStream());

            //4.将客户端上传的文件保存到指定的路径中
            //为防止文件名重复     用UUID随机数+当前上传的毫秒值
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/"+UUID.randomUUID().toString().replaceAll("-", "")+System.currentTimeMillis()+".txt"));
            //IO流经典4行代码
            byte[] b = new byte[1024];
            int len;
            while((len=bis.read(b))!=-1){
                bos.write(b, 0, len);
            }

            //5.通过客户端连接对象获取字节输出流并包装成字节缓冲输出流
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw.write("文件上传成功");
            bw.newLine();
            bw.flush();

            //6.关闭资源
            bos.close();
            s.close();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值