• Java-多线程上传图片


     1、TCP客户端,用于调用图片进行上传服务器

    package cn.bruce.TCPupload;
    
    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, IOException {
            // 创建socket,连接服务器
            Socket s = new Socket("127.0.0.1", 8888);
            // 通过客户端的套接字对象Socket方法,获取字节输出流,将数据写向服务器
            OutputStream out = s.getOutputStream();
            // 读取图片
            FileInputStream fis = new FileInputStream("D:\r.jpg");
            // 服务服务器发回的数据
            InputStream in = s.getInputStream();
            int len = 0;
            byte[] data = new byte[1024];
            while ((len = fis.read(data)) != -1)
            {
                out.write(data, 0, len);
            }
            s.shutdownOutput();//给服务器写终止序列(很重要!)
            System.out.println(new String(data, 0, in.read(data)));
            s.close();
            fis.close();
        }
    }

    2、TCPsevers服务器端 用于接收客户端传来的数据(实际是接收客户端套接字对象)

    package cn.bruce.TCPupload;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCPSEVERS {
        public static void main(String[] args) throws IOException {
            // 创建服务器对象
            ServerSocket ss = new ServerSocket(8888);
            while (true)
            {
                // 调用accept()方法,获取客户端套接字对象
                Socket s = ss.accept();
                //获取到一个客户端,必须开启新线程
                new Thread(new Threadrun(s)).start();
            }
        }
    }

    3、线程代码实现  传入socket对象  对进行收到的数据进行接收处理

    package cn.bruce.TCPupload;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.util.Random;
    import java.util.Scanner;
    
    public class Threadrun implements Runnable {
        private Socket s;
    
        public Threadrun(Socket socket)
        {
            s = socket;
        }
    
        @Override
        public void run() {
            try
            {
                // 通过套接字对象,socket获取字节
                InputStream in = s.getInputStream();
                // 服务器向客户端回数据,字节输出流,通过客户端套接字对象获取字节输出流
                OutputStream out = s.getOutputStream();
                byte[] data = new byte[1024];
                File file = new File("D:\test");
                if (!file.exists())
                {
                    file.mkdirs();
                }
                //命名规则
                String s1 = System.currentTimeMillis() + new Random().nextInt(999)+".jpg";
                // 创建字节输出流,将图片写到文件夹里
                FileOutputStream fos = new FileOutputStream(file + "\" + s1);
                int len = 0;
                if ((len = in.read(data)) != -1)
                {
                    fos.write(data, 0, len);
                }
                s.getOutputStream().write("上传成功!".getBytes());//给客户端反馈信息
                fos.close();
                s.close();
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

  • 相关阅读:
    Sqlite判断字段存在
    JS实现返回上一页面并刷新(转)
    WebService上传文件到服务器(转)
    ASP.NET中的DES加密解密,可用于URL传参(转)
    my97日期控件网址
    window.open用法详解(转)
    repeater绑定后alter不能弹出的解决办法(转)
    SQL Server之其他函数——类型转换函数(convert用法)(转)
    asp.net 无刷新分页时无法弹出alert对话框的解决方法 (转)
    UVa
  • 原文地址:https://www.cnblogs.com/BruceKing/p/13790405.html
Copyright © 2020-2023  润新知