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();
    }
}

目录
相关文章
|
1月前
|
Java
java通过commons-fileupload实现多张图片的上传(servlet)
java通过commons-fileupload实现多张图片的上传(servlet)
23 2
|
1月前
|
存储 Java 计算机视觉
Java代码居然可以做出如此高级的图片编辑系统
Java代码居然可以做出如此高级的图片编辑系统
29 0
|
1月前
|
前端开发 Java
java通过commons-fileupload实现多张图片的上传(jsp页面)
java通过commons-fileupload实现多张图片的上传(jsp页面)
16 2
|
4月前
|
Java Linux Windows
java 图片上绘制文字Graphics2D linux 中文乱码
java 图片上绘制文字Graphics2D linux 中文乱码
|
4月前
|
Java Android开发
如何在Java中创建Socket连接?
如何在Java中创建Socket连接?
69 0
|
1月前
|
Java
java中复制图片
java中复制图片
10 2
|
1月前
|
存储 Java Apache
java 读取图片成二进制流
【2月更文挑战第10天】
|
2月前
|
文字识别 Java
Java使用Tess4j识别图片里的文字
Java使用Tess4j识别图片里的文字
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
[Java]Socket套接字(网络编程入门)
38 0
|
2月前
|
Java
Java中把word转换成图片
Java中把word转换成图片
75 0