//客户端部分
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. Android onTouch事件传递机制

    Android onTouch事件介绍: Android的触摸事件:onClick, onScroll, onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION ...

  2. javaweb回顾第一篇servlet的学习和理解

    前言:关于servlet相信学过java的都不会陌生,我最近又把这些基础知识整理一遍,便于自已能更好的理解ssm或者ssh,下面开始 1:Servlet接口 servlet有5个方法下面分别简单的介绍 ...

  3. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  4. 转:XBMC源代码分析

    1:整体结构以及编译方法 XBMC(全称是XBOX Media Center)是一个开源的媒体中心软件.XBMC最初为Xbox而开发,可以运行在Linux.OSX.Windows.Android4.0 ...

  5. 嵌入式OS的现状、智能的物联网与未来的机器人

    嵌入式开发是一个低调的领域.相比Web开发和企业级开发,嵌入式开发这一领域似乎很少在互联网上发出声音.随着智能设备的兴起,智能手环.手表.眼镜.灯泡等产品成为互联网企业的下一个目标,而物联网这一概念再 ...

  6. C++/Php/Python/Shell 程序按行读取文件或者控制台

    写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下.方便使用 1. C++ 读取文件 #include<stdio.h> #include<string.h> i ...

  7. Scrum介绍

    Scrum介绍 摘要 如今,项目管理的步伐越来越快.项目管理需要更灵活.更积极地,向应客户的需求.使用敏捷项目管理方法,项目经理可以在不影响价值.质量和商业规则的前提下实现所有目标,Scrum是一种迭 ...

  8. nginx内置全局变量及含义

    名称        版本        说明(变量列表来源于文件 ngx_http_variables ) $args        1.0.8        请求中的参数; $binary_remo ...

  9. mybatis中传入String类型参数异常

    在使用mybatis时,写了一条sql语句,只有一个String类型的参数, 示例代码 <select id="getApplyNum" parameterType=&quo ...

  10. Lotus开发之Lotus Notes中域的验证

    一:介绍       Lotus中的域主要有以下的类型:文本,日期/时间,对话框列表,复选框,单选按钮,RTF等等.Lotus中域的验证方式有很多种公式,lotusscript,javascript等 ...