【发布时间】:2013-12-31 08:59:28
【问题描述】:
我最近正在尝试创建一个程序,就像 teamviewer 一样。进展顺利,但我目前面临一个问题。
我正在尝试让我的程序通过套接字发送图像。当我运行这段代码时,它从不输出“应该发送图像!”,所以我认为问题出在 ImageIO.write 行。
BufferedImage screencapture = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
try {
ImageIO.write(screencapture, "jpg", socket.getOutputStream());
System.out.println("Image should be sent!");
} catch (IOException ex){
ex.printStackTrace();
} finally {
if ( socket != null ){
try { socket.close(); } catch (IOException ex){}
}
System.out.println("Image sent and socket closed!");
}
另一端还有一个客户端,正在消费上面代码发送的数据。 执行此操作的代码是:
BufferedImage image = ImageIO.read(socket.getInputStream());
JLabel label = new JLabel(new ImageIcon(image));
f.getContentPane().add(label);
现在我的问题是,这段代码有什么问题,我怎样才能使它工作?
【问题讨论】:
-
不是答案:你为什么不直接使用 VNC?它基本上是一个没有 NAT 遍历的 Teamviewer(所以如果你想要你自己的 TW,你必须在那里修改它。)但就是这样。 UltraVNC、TightVNC 等等。
-
@Shiki 好吧,我只是想添加其他程序没有的其他功能。有些程序可能有一些我能想到的功能,但没有一个具备全部功能。
-
我注意到您没有将图像的长度写入套接字(也许您不需要它);其次,我建议用
BufferedOutputStream包装socket.getOutputStream()。最后,我会关闭 OutputStream(并在之前刷新)我关闭了套接字。 -
您的意思是程序“挂起”在
ImageIO.write的行上,对吧?是否有客户端正在消费 socker 另一端的数据? -
@rzymek 是的,它挂在那条线上。是的,有一个客户端在使用数据。