网络编程(4)用TCP实现图片上传

本文介绍了一种基于TCP协议的图片上传方案,详细展示了客户端如何从本地获取图片并发送至服务器,以及服务器接收图片并保存的过程。该方案利用Socket进行通信,客户端通过字节输出流将图片数据发送给服务器,服务器则通过字节输入流接收图片并存储至指定文件夹。

分析:

客户端:要求你从c盘下获取一张图片

服务器:收到客户端的获取图片,并保存到一个文件夹中。

数据源:C盘的图片

数据目的:服务器

/*
 * 实现TCP图片上传客户端
 * 1、Socket连接服务器,连不上啥也不说了
 * 2、通过Socket获取字节输出流,写图片
 * 3、使用自己的流对象读取图片数据源
 * 4、读取图片将图片写到服务器,采取字节缓冲流提高效率
 * 5、使用Socket获得服务器上的反馈
 * 6、关闭资源
 * 
 * */
public class PicClient {
    public static void main(String[] args) throws IOException, IOException {
        Socket socket=new Socket("127.0.0.1",8000);
        OutputStream outputStream=socket.getOutputStream();
        FileInputStream fileInputStream=new FileInputStream("C:\\word\\1.jpg");
        int len=0;
        byte[]data=new byte[1024];
        while ((len=fileInputStream.read(data))!=-1) {
            outputStream.write(data,0,len);
        }
        //给服务器写一个终止序列
        socket.shutdownOutput();
        
        InputStream inputStream=socket.getInputStream();
        
        len=inputStream.read(data);
        System.out.println(new String(data,0,len));
        fileInputStream.close();
        socket.close();
    }
}

 

=========================================================================

 

/*
 *TCP服务器程序
 *1、使用ServerSocket套接字对象,监听端口8000
 *2、accept()接受客户端的链接对象
 *3、客户端连接对象获取字节输入流,读取图片
 *4、创建FIle对象,绑定文件夹,如果不存在文件夹就新建文件夹
 *5、读取图片,将上传成功写回客户端
 *关闭资源 
 * */
public class PicServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(8000);
        Socket socket=serverSocket.accept();
        InputStream inputStream=socket.getInputStream();
        
        File upload=new File("E:\\upload");
        if (!upload.exists()) {
            upload.mkdirs();
        }
        //创建字节输出流,写入文件夹
        //防止文件重名,域名+毫秒值
        String filename="lee"+System.currentTimeMillis()+new Random().nextInt(9999)+".jpg";
        FileOutputStream fileOutputStream=new FileOutputStream(upload+File.separator+filename);
        //读写字节数组
        byte[]data=new byte[1024];
        int len;
        while ((len=inputStream.read(data))!=-1) {
            fileOutputStream.write(data,0,len);
        }
        //关闭资源
        socket.getOutputStream().write("上传成功".getBytes());
        fileOutputStream.close();
        socket.close();
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值