//客户端部分
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. [转]Oracle因安装时未设定字符集导致中文乱码的解决方案

    在CentOS 6.4上安装Oracle 11g没有设定字符集,采用的是操作系统默认字符集:WE8MSWIN1252,将字符集修改为:AL32UTF8. SQL> select userenv( ...

  2. Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtil、GetterUtil使用

    与其闭门造车,不如直接开动原装.进口.免费的法拉利. -- 作者说 不多说废话,直接上代码. ParamUtil ParamUtil.GetterUtil是Liferay最重要的帮助类 ParamUt ...

  3. SqlServer 查看事务锁及执行语句

    一.查看当前锁定的事务 ,) ,用户机器名称,) ,是否被锁住),blocked) ,数据库名称,),cmd 命令,waittype as 等待类型 ,last_batch 最后批处理时间,open_ ...

  4. 幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境

    1. 首先下载官方GO語言安装包: https://code.google.com/p/go/wiki/Downloads?tm=2 2. 设置 GOPATH 在任意磁盘根目录新建一个文件夹,名字随意 ...

  5. Simple-RTMP-Server 服务器搭建

    Simple-RTMP-Server 服务器搭建 1. 服务器镜像获取 github源码地址 git clone https://github.com/winlinvip/simple-rtmp-se ...

  6. Jmeter之JDBC Request使用方法(oracle)

    JDBC Request: 这个sampler可以向数据库发送一个jdbc请求(sql语句),它经常需要和JDBC Connection Configuration 配置元件一起配合使用. 目录: 一 ...

  7. Ubuntu server解决不能访问外网问题

    Ubuntu server解决不能访问外网问题 在Ubuntu Server上设置访问外网时,需要设置dns,通常是将dns添加到/etc/resolv.conf文件中. 但是将dns添加至/etc/ ...

  8. C# 模拟鼠标(mouse_event)

    想必有很多人在项目开发中可能遇见需要做模拟鼠标点击的小功能,很多人会在 百度过后采用mouse_event这个函数,不过我并不想讨论如何去使用mouse_event 函数怎么去使用,因为那没有多大意义 ...

  9. Windows 8 图标前面的勾选

    http://bbs.pcbeta.com/viewthread-999730-1-1.html 不管是桌面的图标还是资源管理器中的图标之前都出现了一个小小的方框.选中图标的时候会自动勾选那个框,如果 ...

  10. mac OSX 上 brew install hive

    本文介绍brew install hive并修改默认的metastore存储方案,改Derby数据库为mysql的方法以及可能遇到的问题的解决方案. 1. 通过homebrew安装hive 1 bre ...