BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #20758同步于 2011/11/13
Java机器人发帖

java 求助--如何存储从socket接受到的图片流并播放

zg2000
2011/11/13镜像同步0 回复
大家好,我java不好(说实话,软硬件都不太好),但近期做关于毕设方面的东西,我从客户端可以接受到图片流,但却不能显示出来(播放),只显示最后一张,听别人说是缓存问题,但还不知如何解决,恳请大家帮忙!代码如下: 客户端:package paper; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.ObjectInputStream; import java.net.Socket; import javax.imageio.ImageIO; import javax.net.ssl.SSLSocketFactory; import javax.swing.JFrame; import javax.swing.JPanel; class J_Panel extends JPanel { /** * */ private static final long serialVersionUID = 1L; BufferedImage CaptureScreen0; String ServerIp; int ServerPort; String m;//来自主叫方的消息 public J_Panel() { } protected void paintComponent(Graphics g){ int i=0; try{ Socket s=new Socket("118.229.227.97",5000);//localhost ObjectInputStream dataIn=new ObjectInputStream(s.getInputStream()); s.setSoTimeout(5000); while(true){ Thread.sleep(100); //图像采集时间间隔 BufferedImage CaptureScreen=ImageIO.read(dataIn); else { System.out.println("has new picture input!"); File f=new File("CaptureScreen_From_Cliet.png"); ImageIO.write(CaptureScreen, "png",f);//保存图片 g.drawImage(CaptureScreen,0, 0,1366,768,this);//显示图像 } } } catch(Exception e){ System.err.println("发生异常:"+e); e.printStackTrace(); } } } public class J_Client extends JFrame{ /** * */ private static final long serialVersionUID = 1L; public J_Client(){ super("桌面扑捉显示"); Container c=getContentPane(); c.add(new J_Panel(),BorderLayout.CENTER); pack();//自适应框架大小 } public static void main (String args[]){ try { J_Client app=new J_Client(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(new Dimension()); app.setVisible(true); } catch(Exception e){ System.err.println("发生异常:"+e); e.printStackTrace(); } } } 服务器端: import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import javax.imageio.ImageIO; public class J_Server{ public static void main(String args[]){ try { int i=0; ServerSocket server=new ServerSocket(5000); Socket s=server.accept(); System.out.println("服务器端:接受来自客户端的连接"); s.setSoTimeout(5000);//设置连接超时时间 ObjectOutputStream dataout=new ObjectOutputStream(s.getOutputStream()); BufferedImage image=null; do{ if(dataout!=null) System.out.println("connection"); Rectangle rect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());//全屏区域 Robot robot=new Robot(); robot.setAutoDelay(100); BufferedImage CaptureScreen = robot.createScreenCapture(rect); if(image==CaptureScreen){ System.out.println("no new picture input"); } else { i++; System.out.println("has new picture input!"); ImageIO.write(CaptureScreen, "png", dataout); System.out.println("ROBOT的自动延迟时间是:"+robot.getAutoDelay()); File f=new File("CaptureScreen_from_server.png"); ImageIO.write(CaptureScreen, "png",f);//保存图片 System.out.println("CaptureScreen.getSources:"+CaptureScreen.getSource()); CaptureScreen.flush(); System.out.println("缓冲区大小:"+CaptureScreen.getData()); Thread.sleep(100); //图像采集时间间隔 System.out.println("i:"+i); image=CaptureScreen; } }while(true); // Thread.sleep(100); //图像采集时间间隔 //dataout.writeUTF("获取图片是否成功?"); //dataout.close(); //s.close(); } catch(Exception e){ System.err.println("发生异常:"+e); e.printStackTrace(); } } }
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。