java中图片文件的传输及显示(Socket以及ServerSocket演示)
2014-09-19 09:25
417 查看
//客户端部分 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(); } }
相关文章推荐
- 黑马程序员------演示MP3和图片以及.java文件的复制
- Java使用Socket进行字符串和图片文件同时传输
- Java Socket图片文件传输
- 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中
- java socket通信-传输文件图片
- Java使用Socket进行字符串和图片文件同时传输
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 用C语言写的ISAPI上传文件(图片)、显示图片、图片存储以及可供其它语言调用的方式、和程序源代码
- Git push 出错以及server端没有显示push后的文件的解决方法
- Java使用ExecutorService线程池通过Socket传输AES加密,并在客户端用ServerSocket解密
- java socket 多线程网络传输多个文件
- jsp向页面显示图片,找不到文件时直接使用java画图
- 利用java socket传输文件
- java socket多线程网络传输多个文件
- socket的UDP传输文件java源代码
- 利用socket传输图片或文件的代码实例
- .NET(C#)基于Socket编程实现平行主机之间网络通讯有图片传输的Demo演示
- java Socket传输文件
- Git push 出错以及server端没有显示push后的文件的解决方法
- Java Socket 传输图片的例子