您的位置:首页 > 编程语言 > Java开发

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: