心得15--网络编程6-图片等二进制文件的上传与输出

来源:互联网 发布:js获取iframe中的元素 编辑:程序博客网 时间:2024/06/03 19:55

1.       先说一个简单的案例

客户端:

package com.TcpJpg;

importjava.io.FileInputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.net.Socket;

publicclass JpgClient {

   /**

    * 客户端:图片上传

    * @param args

    */

   publicstaticvoid main(String[]args) {

      Socket s = null;

   FileInputStream fi = null//文件输入流从外面读文件数据

      try {

        s = new Socket("192.168.49.200",8000);

        fi = new FileInputStream("d:\\1.jpg");

        OutputStream out =s.getOutputStream(); // 通过socket获取输出流,进行信息通信

        byte[] buf =newbyte[1024];

         int len = 0;

        while((len=fi.read(buf))!=-1) {

          out.write(buf,0,len);

        }

        s.shutdownOutput();

        InputStream in = s.getInputStream();

        byte[] b =newbyte[1024];

        System.out.println(new String(b,0,in.read(b)));

      } catch (Exception e) {    

        e.printStackTrace();

      }finally {

        try {

          s.close();

          fi.close();

        } catch (Exception e) {

          e.printStackTrace();

        }

      }

   }

}

服务器端:

packagecom.TcpJpg;

importjava.io.FileOutputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.net.ServerSocket;

importjava.net.Socket;

publicclass JpgServer {

   /**

    * 服务器端:下载图片

    *@param args

    */

   public static void main(String[] args) {

      ServerSocket ss = null;

      Socket s = null;

      FileOutputStream fo = null;

      try {

        ss = new ServerSocket(8000);

        s = ss.accept();

        InputStream in = s.getInputStream();

   System.out.println(s.getInetAddress().getHostAddress()+"已连接");

        fo = newFileOutputStream("d:\\girl.jpg");

        byte[] buf = new byte[1024];

        int len = 0;

        while((len=in.read(buf))!=-1) {

           fo.write(buf,0,len);

        }

        OutputStream out = s.getOutputStream();

        out.write("上传成功!".getBytes());  // 将传进来的字符串转换成二进制保存

      } catch (Exception e) { 

        e.printStackTrace();

      }finally {

        try {

           fo.close();

           s.close();

           ss.close();

        } catch (Exception e) {

           e.printStackTrace();

        }      

      }

   }

}

2.   一个可以键盘输入、无限上传的案例

客户端:

packagecom.TcpJpg;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.net.Socket;

publicclass JpgClient1 {

   /**

    * 客户端:图片上传

    *@param args

    */

   public static void main(String[] args) {

      try {

        if(args.length==0) {  //如果参数恒等于0则表示没有传入参数即没有指定文件

           System.out.println("请指定一个jpg文件");

           return;

        }

        File f = new File(args[0]);

        Socket s = newSocket("192.168.49.200",8000);

        FileInputStream fi = newFileInputStream(f);  //文件输入流从外面读文件数据

        OutputStream out = s.getOutputStream();  // 通过socket获取输出流,进行信息通信

        byte[] buf = new byte[1024];

        int len = 0;

        while((len=fi.read(buf))!=-1) {

           out.write(buf,0,len);

        }

        s.shutdownOutput();

        InputStream in = s.getInputStream();

        byte[] b = new byte[1024];

        System.out.println(newString(b,0,in.read(b)));

        s.close();

        fi.close();

      } catch (Exception e) {    

        e.printStackTrace();

      }

   }

}

服务器端:

packagecom.TcpJpg;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.net.ServerSocket;

importjava.net.Socket;

publicclass JpgServer1 {

   /**

    * 服务器端:下载图片

    *@param args

    *@throws IOException

    */

   public static void main(String[] args) throwsIOException {

      ServerSocket ss = new ServerSocket(8000);

      while (true) {

        Socket s = ss.accept();

        new Thread(new JpgThread(s)).start();

      }

   }

}

classJpgThread implements Runnable {

   private Socket s;

   public JpgThread(Socket s) {

      this.s = s;

   }

   public void run() {

      int count = 1; // 设置一个计数器,使同一个客户端即IP能传多个文件

      try {

        String ip =s.getInetAddress().getHostAddress();

        System.out.println(ip+"已连接");

        InputStream in = s.getInputStream();

        File dir = newFile("D:\\image");  //指定的客户端上传后的文件保存在该文件夹下

        File f = new File(dir, ip +"(" + count + ").vbs");

        while (f.exists()) {   //判断一种条件:如果文件不存在则加一返回保存新文件

            f = new File(dir, ip + "(" + (count++)+ ").vbs");

        }

        FileOutputStream fo = newFileOutputStream(f);

        byte[] buf = new byte[1024];

        int len = 0;

        while ((len = in.read(buf)) != -1) {

           fo.write(buf, 0, len);

        }

        OutputStream out = s.getOutputStream();

        out.write("上传成功!".getBytes());// 将传进来的字符串转换成二进制保存

        fo.close();

        s.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

   }

}

原创粉丝点击