• java中图片文件的传输及显示(Socket以及ServerSocket演示)


    //客户端部分
    package testSix;
    
    import java.awt.Graphics;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.util.Iterator;
    
    import javax.imageio.ImageIO;
    import javax.imageio.ImageReader;
    import javax.imageio.stream.ImageInputStream;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    class MyPanel extends JPanel{
        private ImageIcon ii;
        public MyPanel(ImageIcon ii){
            this.ii = ii;
        }
        
        protected void paintComponent(Graphics g) {
              super.paintComponent(g);
              g.drawImage(ii.getImage(), 0, 0, 300, 400, this);
          }
    }
    
    public class SocketDemo extends JFrame{
          private Socket st = null;
          public SocketDemo(){
              try{
                  try{
                      //建立客户端
                      st =  new Socket(InetAddress.getLocalHost(), 10000);
                      
                      //返回套接字具有关联的通道的输出流,则得到的输出流会将其所有操作委托给通道
                      OutputStream os = st.getOutputStream();
                      byte[] bt = "哥们儿, 给我来一张背景图片!".getBytes();
                      os.write(bt);
                      
                      //返回套接字具有关联的通道输入流,则得到的输入流会将其所有操作委托给通道
                      InputStream is = st.getInputStream();
                      int len = is.read(bt);
                      System.out.println(new String(bt, 0, len));
                      
                      //将输入流按照下面方式处理, 根据Iterator<ImageReader> itImage是否能
                      //成功的返回一个ImageReader对象确认该流文件是否是一个图片文件!
                      //并ImageReader类中的getFormatName()得到文件的格式!
                      //通过最后可以通过ImageIcon的byte[]构造函数建立ImageIcon对象!
                      //最后将图片显示在面板上!
                      ImageInputStream iis = ImageIO.createImageInputStream(is);
                      Iterator<ImageReader> itImage = ImageIO.getImageReaders(iis);
                      if(itImage.hasNext()){
                          ImageReader reader = itImage.next();
                          byte[] imageByte = new byte[102400*10];
                          iis.read(imageByte);
                          ImageIcon ii = new ImageIcon(imageByte, reader.getFormatName());
                          add(new MyPanel(ii));
                      }
                      
                  }finally{
                        st.close();
                  }
              }catch(IOException e){
                  e.printStackTrace();
              }
              setSize(300, 400);
              setVisible(true);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          }
          
          public static void main(String[] args){
              new SocketDemo();
          }
    }
    //服务端部分
    package testSix;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerSocketDemo{
        private ServerSocket sst = null;
        private Socket st = null;
        public ServerSocketDemo(){
           try{
                try {
                        //建立服务端
                        sst = new ServerSocket(10000);
                        
                        //侦听并接受到此服务套接字的连接。此方法在进行连接之前一直阻塞。 创建新套接字 
                        st = sst.accept();
                        
                        //得到客户端传输过来的流
                        InputStream is = st.getInputStream();
                        byte[] bt = new byte[1024];
                        int len = is.read(bt);
                        System.out.println(new String(bt, 0, len));
                        OutputStream os  = st.getOutputStream();
                        os.write("好了,知道了!".getBytes());
                        
                        //将图片文件传输过去
                        FileInputStream fis = new FileInputStream(new File("q12.jpg"));
                        while((len = fis.read(bt)) != -1){//先将流文件变成byte[], 然后利用套接字的输出流发送给客户端
                             os.write(bt);
                             os.flush();
                        }
                    
                }finally{
                        st.close();
                        sst.close();
                }
           }catch(IOException e){
               e.printStackTrace();
           }
            
        }
        
        public static void main(String[] args){
             new ServerSocketDemo();
        }
    }
  • 相关阅读:
    《人月神话》阅读笔记03
    《人月神话》阅读笔记02
    《人月神话》阅读笔记01
    《构建之法》阅读笔记03
    《构建之法》阅读笔记02
    蚂蚁通信框架实践
    红黑树
    漫画算法:什么是红黑树
    Java中的锁分类与使用
    JAVA CAS原理深度分析
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3980686.html
Copyright © 2020-2023  润新知