上传图片实现tcp

客户端代码

package cn.hiluna.demo4;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 实现tcp图片上传客户端
 * 实现步骤:
 *      1.Socket套接字连接服务器
 *      2.通过Socket获取字节输出流,写图片
 *      3.使用自己的流对象,读取图片数据源
 *          FileInputStream
 *      4.读取图片。使用字节输出流,将图片写到服务器
 *          采用字节数组进行缓冲
 *      5.通过Socket套接字获取字节输入流
 *          读取服务器发回来的上传成功
 *      6.关闭资源
 */
public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost",8000);
        //获取字节输出流,图片写到服务器
        OutputStream outputStream = socket.getOutputStream();
        //创建字节输入流,读取本机上的数据源图片
        FileInputStream fileInputStream = new FileInputStream("C:\Users\zhang\Pictures\Saved Pictures\t.jpg");
        //开始读写字节数组
        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = fileInputStream.read(bytes)) != -1){
            outputStream.write(bytes,0,len);
        }
        //给服务器写终止序列,告诉服务器没数据了
        socket.shutdownOutput();
        //获取字节输入流,读取服务器的上传成功
        InputStream inputStream = socket.getInputStream();
        len = inputStream.read(bytes);
        System.out.println(new String(bytes,0,len));

        fileInputStream.close();
        socket.close();
    }
}

服务器端代码

package cn.hiluna.demo4;

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

/**
 * TCP图片上传服务器
 *  1.ServerSocket套接字对象,监听端口7000
 *  2.方法accept()获取客户端连接对象
 *  3.客户端连接对象获取字节输入流,读取客户端发送的图片
 *  4.创建File对象,绑定上传文件夹
 *      判断文件夹存在,不存在,在创建文件夹
 *  5.创建字节输出流,数据目的,File对象所在的文件夹
 *  6.字节流读取图片,字节流将图片写入到目的文件夹中
 *  7.将上传成功回写客户端
 *  8.关闭资源
 */
public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(7000);
        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();
        File file = new File("E:\uploads");
        if (!file.exists()){
            file.mkdirs();
        }
        //防止文件同名被覆盖,从新定义文件名
        //规则:域名+毫秒值+6位随机数
        String filename = "hiluna"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
        //创建字节输出流
        FileOutputStream fileOutputStream = new FileOutputStream(file+File.separator+filename);
        //读写字节数组
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(bytes)) !=-1){
            fileOutputStream.write(bytes,0,len);
        }

        //通过客户端连接对象获取字节输出流
        //上传成功客户端
        socket.getOutputStream().write("上传成功".getBytes());
        fileOutputStream.close();
        socket.close();
        serverSocket.close();
    }
}

多线程上传图片

创建一个线程接口实现类:

package cn.hiluna.demo4;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.Random;

public class Upload implements Runnable{
    private Socket socket;
    public  Upload(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            InputStream inputStream = socket.getInputStream();
            File file = new File("E:\uploads");
            if (!file.exists()) {
                file.mkdirs();
            }
            //防止文件同名被覆盖,从新定义文件名
            //规则:域名+毫秒值+6位随机数
            String filename = "hiluna" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
            //创建字节输出流
            FileOutputStream fileOutputStream = new FileOutputStream(file + File.separator + filename);
            //读写字节数组
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(bytes)) != -1) {
                fileOutputStream.write(bytes, 0, len);
            }

            //通过客户端连接对象获取字节输出流
            //上传成功客户端
            socket.getOutputStream().write("上传成功".getBytes());
            fileOutputStream.close();
            socket.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

修改服务端程序修改服务端程序

package cn.hiluna.demo4;

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

public class TCPThreadServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8000);
        while (true){
            Socket socket = serverSocket.accept();
            new Thread( new Upload(socket)).start();
        }

    }
}

客户端程序不用改变。客户端程序不用改变。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇