zoukankan      html  css  js  c++  java
  • 图片文件的上传和下载

    在服务器端

     1 public class ServesDemo {
     2     public static void main(String[] args) throws IOException {
     3         System.out.println("等待。。");
     4         // 服务器端的ServerSocket 参数是 :port
     5         ServerSocket serverSocket = new ServerSocket(6666);
     6         // 服务器端等待 客户端的请求
     7         Socket socket =  serverSocket.accept();
     8         /*1. 将客户端发来的请求当作是一个输入流,
     9         * 2. 读取发送给服务器的输入流(之前的方法)
    10         * */
    11         InputStream inputStream =  socket.getInputStream();
    12         byte[] bytes = new byte[1024];
    13         int readInt = inputStream.read(bytes);
    14          String s = new String(bytes,0,readInt);
    15         System.out.println("接收到客户端信息");
    16          System.out.println(s);
    17          // 把接收完信息的的消息用socket的方式发送(输出)给客户端
    18          OutputStream o = socket.getOutputStream();
    19          // 这个地方是需要输出的内容
    20          o.write("收到".getBytes());
    21          inputStream.close();
    22          o.close();
    23     }
    24 }

    客户端:

     1 public class ClientDemo {
     2     public static void main(String[] args) throws IOException {
     3 
     4         // 创建客户端的端口对象 需要通信的ip + 和服务器所在的端口,
     5         Socket s = new Socket("127.0.0.1",6666);
     6         // 用socket 的方式向服务器发送数据(out)
     7         OutputStream outputStream =  s.getOutputStream();
     8         // 用字节流的形式发送hello
     9         outputStream.write("hello".getBytes());
    10         /* 0. 下面的整个流程都是为了读取服务器传来的反馈
    11         *  1. 首先用getInputStream() 创建接收的输入流
    12         *  2. 用之前的方法来读取输入流
    13         *  3. read 的方式来读取,最后把读取到的数据转化称String的方式输出
    14         *  注意:在这里你不必在意是用什么来接受的,read的方法会接受到服务端的write的消息字节
    15         * */
    16         InputStream inputStream = s.getInputStream();
    17         byte[] bytes= new byte[1024];
    18         int lenth;
    19         lenth =  inputStream.read(bytes);
    20          String strins = new String(bytes,0,lenth);
    21         System.out.println("收到回信,内容");
    22         System.out.println(strins);
    23         outputStream.close();
    24     }
    25 }

    -------

    进阶版就包含了客户端向服务端的文件传递:

    服务端:

     1   // 服务器,接受图片,保存在磁盘中
     2     public static void main(String[] args) throws IOException {
     3 
     4         // 改进:有了while 可以始终等待客户端的上传
     5         while (true){
     6             ServerSocket  serverSocket = new ServerSocket(6666);
     7             System.out.println("load..");
     8             Socket socket =  serverSocket.accept();
     9             // 为了提高效率,可以让服务器开启多个线程,1. 是一直在等待客户端上传,
    10             // 2. 在新的线程中可以把上传的数据存储在服务器的磁盘中
    11                 new Thread(new Runnable() {
    12                 InputStream clientInputStream =null ;
    13                 FileOutputStream fileOutputStream =null;
    14                 OutputStream outputStreamToClient=null;
    15                 @Override
    16                 // 用多线程
    17                 public void run() {
    18                     try{
    19                         // 接受客户端传来的信息流,写到服务器的磁盘中去
    20                          clientInputStream = socket.getInputStream();
    21                         String picName = System.currentTimeMillis()+".png";
    22                          fileOutputStream = new FileOutputStream("d:\"+picName);
    23                         // 依次读取信息流
    24                         byte[] bytes = new byte[1024];
    25                         int len;
    26                         while((len= clientInputStream.read(bytes))!=-1){
    27                             fileOutputStream.write(bytes,0,len);
    28                             if (len<1024){
    29                                 break;
    30                             }
    31                         }
    32 
    33                         // 读取完成后,返回给客户端信息
    34                          outputStreamToClient =  socket.getOutputStream();
    35                         outputStreamToClient.write(("ok").getBytes());
    36                         outputStreamToClient.close();
    37                         clientInputStream.close();
    38 
    39                         fileOutputStream.close();
    40 
    41                     }
    42                     catch (IOException e){
    43                         e.getStackTrace();
    44                     }
    45                     }
    46             }).start();
    47             serverSocket.close();
    48         }
    49 
    50 
    51     }
    52 }

    客户端:

     1 public class ClientDemoLoad {
     2     public static void main(String[] args) throws InterruptedException {
     3         while (true){
     4             System.out.println("upload。。");
     5             new Thread(new Runnable() {
     6                 Socket socket =null;
     7                 InputStream inputStream =null;
     8                 OutputStream outputStream =null;
     9                 FileInputStream inputStreamClient =null;
    10                 @Override
    11                 public void run() {
    12                     try {
    13                         socket = new Socket("127.0.0.1",6666);
    14                         // 从客户端的磁盘中获取需要上传的png
    15                         FileInputStream inputStreamClient = new FileInputStream("D:\loadClient.png");
    16                          outputStream = socket.getOutputStream();
    17                         byte[] bytes = new byte[1024];
    18                         int len;
    19                         while ((len =inputStreamClient.read(bytes))!=-1 ){
    20                             outputStream.write(bytes,0,len);
    21                         }
    22                         // 读取服务器端传来的接受完毕的信息
    23                         // 创建客户的接口,
    24                          inputStream = socket.getInputStream();
    25                         byte[] bytes1 = new byte[1024];
    26                         int lengh;
    27                         // 为了避免发生阻塞
    28                         while((lengh = inputStream.read(bytes1))!=-1){
    29                             String string = new String(bytes1,0,lengh);
    30                             System.out.println(string);
    31                             // 为了避免read可能造成的阻塞
    32                             if (lengh<1024){
    33                                 break;
    34                             }
    35                         }
    36                         inputStream.close();
    37                         outputStream.close();
    38                         inputStreamClient.close();
    39                     } catch (IOException e) {
    40                         e.printStackTrace();
    41                     }
    42                     }
    43             }).start();
    44             Thread.sleep(1000);
    45         }
    46 
    47 
    48         // 反馈--这个是客户端输出的,但是没有接受方,所以肯定不会写出来的
    49 //        OutputStream outputStreamToServes = socket.getOutputStream();
    50 //        outputStreamToServes.write("loadin Over".getBytes());
    51 
    52     }
    53 }
  • 相关阅读:
    反向代理与正向代理
    vs2017 调试时出现 cannot connect to runtime process错误
    .net core 配置swagger遇到的坑
    VC++下使用ADO操作数据库
    [转] CSS transition
    Javascript 函数和模块定义
    Service 如何知道caller
    [转] json in javascript
    [转] 让ctags支持Javascript
    [转] 使用NVM快速搭建NODE开发环境
  • 原文地址:https://www.cnblogs.com/GooKiki/p/11426002.html
Copyright © 2011-2022 走看看