socket中传输图片的问题
功能实现:两个Socket建立连接后,
server 发送,client 接收。
然后server向client发送图片,第一张可以正常接受,第二张就不行了。
代码:
//ser.java
import com.sun.image.codec.jpeg.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
import java.net.*;
import java.awt.*;
public class Ser extends Thread {
public Ser() {
}
public void run () {
try {
output = new ByteArrayOutputStream();
ss = new ServerSocket(2222);
s = ss.accept();
os = s.getOutputStream();
bi = ImageIO.read(new File("k08.jpg"));
param = JPEGCodec.getDefaultJPEGEncodeParam(bi);
encoder = JPEGCodec.createJPEGEncoder(output, param);
encoder.encode(bi);
output.writeTo(os);
os.flush();
output.flush();
Thread.sleep(1000);
bi = ImageIO.read(new File("k09.jpg"));
param = JPEGCodec.getDefaultJPEGEncodeParam(bi);
encoder = JPEGCodec.createJPEGEncoder(output, param);
encoder.encode(bi);
output.writeTo(os);
os.flush();
output.flush();
System.out.println("Server thread start.");
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
os.close();
encoder.getOutputStream().close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
new Ser().start();
}
private BufferedImage bi = null;
private ServerSocket ss = null;
private Socket s = null;
private OutputStream os = null;
private ByteArrayOutputStream output = null;
private JPEGEncodeParam param = null;
private JPEGImageEncoder encoder = null;
}
//Cli.java
import com.sun.image.codec.jpeg.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
class MyFrame extends JFrame {
private MyPanel panel = null;
public MyFrame() {
panel = new MyPanel();
add(panel);
}
public void drawScr(BufferedImage bi) {
panel.draw(bi);
}
private class MyPanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bi, 0, 0, null);
}
public void draw(BufferedImage bi) {
this.bi = bi;
this.updateUI();
}
private BufferedImage bi = null;
}
}
public class Cli extends Thread {
public Cli() {
try {
//ip = InetAddress.getByName("10.100.101.36");
ip = InetAddress.getLocalHost();
s = new Socket(ip, 2222);
is = s.getInputStream();
}
catch (Exception ex) {
ex.printStackTrace();
System.err.println("public Client.");
}
}
public void run() {
frame = new MyFrame();
frame.setSize(500, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(is);
BufferedImage bi = decoder.decodeAsBufferedImage();
if (bi != null) {
frame.drawScr(bi);
System.out.println("drawScr.");
}
Thread.sleep(3000);
decoder = JPEGCodec.createJPEGDecoder(is);
bi = decoder.decodeAsBufferedImage();
if (bi != null) {
frame.drawScr(bi);
System.out.println("drawScr.");
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
new Cli().start();
}
private InetAddress ip = null;
private Socket s = null;
private InputStream is = null;
private MyFrame frame = null;
}