//客户端部分
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();
}
}

java中图片文件的传输及显示(Socket以及ServerSocket演示)的更多相关文章

  1. java中图片文件的判断

    javax.imageio 类 ImageIO BufferedImage bi = ImageIO.read(resFile);//resFile --- InputStream if(bi == ...

  2. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  3. 3,Java中的文件IO流

    1,File类 ··· 概念:File对象可以表示一个文件或目录.可以对其进行增删改查. ··· 常用方法:     File f = new File(".");     判断是 ...

  4. Java中删除文件、删除目录及目录下所有文件(转)

    原文链接:Java中删除文件.删除目录及目录下所有文件 知识点:File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,具体代码示例如下: ...

  5. Java中的文件操作

    在使用计算机编程中,常常会用到对于文件的操作,以下是我对于Java中文件的相关内容学习之后的一个总结和在学习过程中遇到的一些问题. 一.什么是文件 对于文件进行操作,首先我们要知道什么是文件.在此之前 ...

  6. Java中读取文件

    Java中读取文件,去除一些分隔符,保存在多维数组里面 public void readFile(String filePath) { File file=new File(filePath); Ar ...

  7. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  8. Java中获取文件路径

    Java中获取文件路径 1.实例说明 (1)得到 ClassPath的绝对URI路径 Thread.currentThread().getContextClassLoader().getResourc ...

  9. java中常量文件的配置与读取

    java中常量文件的配置与读取: package com.floor.shop.user.util; import java.io.InputStream; import java.io.InputS ...

随机推荐

  1. MRBS, meeting room manager system,会议预定管理系统

    MRBS,会议管理软件,新增权限控制,周期性例会管理等. 下载地址 http://www.dotnetcms.org/mrbs/mrbs.rar

  2. 解决连接MySql速度慢的方法

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢.解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve. 原因是 ...

  3. Delphi 2 Unleashed (一) 介绍

    原书作者是作者是 Charles Calvert,国内翻译为<Delphi 2 程序设计大全>,由横空翻译组翻译,机械工业出版社1997年12月出版,看网上评论和介绍,该书是系统学习 De ...

  4. webService发布和调用--Axis2

    一.工具 1.下载 Axis2以及eclipse的Axis2插件.http://axis.apache.org/axis2/java/core/download.cgi 2.axis2-1.7.1-w ...

  5. 解决 The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

    到 http://tomcat.heanet.ie/native/ 下载最新的tcnative-1.dll放到相应目录即可,我目前下载的是 http://tomcat.heanet.ie/native ...

  6. Android开发(二十七)——android:layout_weight的真实含义

    android:layout_weight的真实含义是:一旦View设置了该属性(假设有效的情况下),那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比! ...

  7. [知识库分享系列] 四、ASP.NET MVC and Winform

    知识库分享系列: [知识库分享系列] 三.Web(高性能Web站点建设) [知识库分享系列] 二..NET(ASP.NET) [知识库分享系列] 一.开篇 分享介绍本篇分享两个知识库节点,分别为“AS ...

  8. 如何升级TeX Live 2014宏包

    转:人大经济论坛 LATEX论坛 版,详细出处参考: http://bbs.pinggu.org/forum.php?mod=viewthread&tid=3370640&page=1 ...

  9. WinForm数据源分页技术

    1.编写分页存储过程 USE [Contacts]GO create procedure [dbo].[GetPageData] (@startIndex int,@endIndex int)asbe ...

  10. 解决CSS移动端1px边框问题

    移动项目开发中,安卓或者IOS等高分辨率屏幕会把1px的border渲染成2px来显示,网上搜了一下,解决方法如下: 一.利用css中的transform的缩放属性解决,推荐这个.如下面代码. < ...