java中Socket通过字节流上传图片

服务器类Server

package com.ligong.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 一些声明信息
 * Description:
 * date: 2021/8/9 16:21
 *
 * @author luozhao
 * @since JDK 1.8
 */
public class Server {
    public static void main(String[] args) throws IOException {
        //指定服务端上的服务端口号
        ServerSocket serverSocket=new ServerSocket(10086);
        //要从客户端读取数据,所以服务器,首先要同意接受
        Socket socket = serverSocket.accept();
        //获取我们的传出端口后,进行读操作,所以是getInputStream
        InputStream inputStream = socket.getInputStream();
        //那么我要开始进行读取,要把读取的数据放置到一个位置中,因为是往服务器上进行写,所以是输出Out
        FileOutputStream fileOutputStream=new FileOutputStream("美女.jpg");//指明要写入的文件名称及位置,这里默认是应用程序下
        int read=0;
        while((read=inputStream.read())!=-1){
            fileOutputStream.write(read);
        }
        //关闭读取流,因为是网络IO,服务器或者客户端都无法知道一段时间后,还有没有数据传入过来
        socket.shutdownInput();
        //上传完毕后,服务器要给与客户端反应,所以是写操作
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("上传完毕".getBytes());

        socket.shutdownOutput();
        //操作完毕后开始进行关闭资源

        fileOutputStream.close();
        inputStream.close();
        socket.close();

        serverSocket.close();


    }
}
**客户端类Client**
package com.ligong.client;

import java.io.*;
import java.net.Socket;

/**
 * 一些声明信息
 * Description:
 * date: 2021/8/9 16:11
 *
 * @author luozhao
 * @since JDK 1.8
 */
public class Client {
    public static void main(String[] args) throws IOException {
        //声明一个套子接口,指定要客户端的ip地址,和端口号
        Socket client=new Socket("localhost",10086);
        //要想进行上传,肯定是字节上传,从文件中读取图片,所以是文件字节流
        FileInputStream fileInputStream=new FileInputStream("1.jpg");
        //因为是客户端向服务器端写数据所以是OutputStream
        OutputStream outputStream = client.getOutputStream();
        int read =0;//用于表示文件中的指针,初始指针是文件开头
        while((read= fileInputStream.read())!=-1){//当文件没有遍历完毕,就一直进行遍历
            outputStream.write(read);//把字节写入到输出流中,一直到遍历完毕后,写入也一同完毕
        }
        client.shutdownOutput();
        //接收服务器发来的提示信息
        InputStream inputStream = client.getInputStream();
        //提前获取我要接收的字节大小
        int count=0;
        while(count==0){
            count=inputStream.available();
        }
        byte[] buff=new byte[count];

        int length=inputStream.read(buff);
        System.out.println(new String(buff,0,length));
        client.shutdownInput();

        outputStream.close();//先把字节写入了关闭
        fileInputStream.close();
        client.close();
    }
}

目录结构:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值