我想做一个远程桌面控制的程序,则要涉及图片传输,反感有以下几个:一、利用robot获得桌面的BufferedImage对象,利用ImageIO方法进行读和写,
但是ImageIO.read()的时候经常出错,而且不能判断什么时候读完了,
这样不能判断传送过来的是图像还是其他信息。二、将BufferedImage序列化,利用ObjectInputStream进行接收,但似乎数据
没有压缩,传输量太大,延迟太大。三、导出BufferedImage中的象素矩阵,压缩后直接使用socket的输入输出流传输,
但这样取出和压缩的时间又太长。所以又很多问题:
1、ImageIO.read()经常读取图片出错,而且好像一次不能把传过来的数据一次读完,
导致我无法判断是否已经读完,并且,读出来的图片经常出错。
2、BufferedImage如何序列化?3、有没有更好的方法实现桌面图像和控制信息的发送和接收?
但是ImageIO.read()的时候经常出错,而且不能判断什么时候读完了,
这样不能判断传送过来的是图像还是其他信息。二、将BufferedImage序列化,利用ObjectInputStream进行接收,但似乎数据
没有压缩,传输量太大,延迟太大。三、导出BufferedImage中的象素矩阵,压缩后直接使用socket的输入输出流传输,
但这样取出和压缩的时间又太长。所以又很多问题:
1、ImageIO.read()经常读取图片出错,而且好像一次不能把传过来的数据一次读完,
导致我无法判断是否已经读完,并且,读出来的图片经常出错。
2、BufferedImage如何序列化?3、有没有更好的方法实现桌面图像和控制信息的发送和接收?
楼主用JAVA加上Robot类,我也做过。不过当时是用UDP做的。抓一屏,传输一屏(当时没有进行数据压缩与还原)。
若楼主的实时性要求不是很高,可以抓一屏,高效数据压缩,UDP传输一屏,UDP接收,数据解压缩,显示。
在传输的时候, 加上个标志, 区分字符串与图片.无法知道图片传输何结束.
试试把图片用一个包一次性传输.
如果分段传输, 因为UDP的包到达顺序是不定的, 而且容易丢包, 所以确定结束是比较困难的(除非你自己处理, 如接收了几个包, 一共是几个包, 某个包丢了等等, 如果这样, 那还不如直接使用TCP)