关于远程桌面客户端桌面截图用流传输,跪求求大神指点

小小小小叶 2015-08-10 08:41:14
我在做一个远程桌面,原来用socket传输时候图片在服务器端显示了,但是经常会出现闪烁服务器端的显示是花的。。。。。
所以我想用流来传输,但是现在用来传输遇到这几个问题
(1).因为我是每隔100毫秒就要传输一张图片,所以我如何判断当前这张图片是否读取完毕,服务器端如何处理
(2)我原来学过一点java,知道java中的图片传输有专门的流,但是c#中应该用哪种


跪求大神指教啊,有源码更好,小弟我刚学c#没多久
...全文
392 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小小小叶 2015-08-12
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
既然只把差异的部分保存成图片了,那么接收到之后判断一下有点就赋值,没有就不赋值呗 还是循环把bmpSave里的点赋值给图像对象就好了啊
哦哦,谢谢,我去试试,我客户端的代码那样写没问题吧??? 尤其是将位图bitmap转换成image
於黾 2015-08-12
  • 打赏
  • 举报
回复
既然只把差异的部分保存成图片了,那么接收到之后判断一下有点就赋值,没有就不赋值呗 还是循环把bmpSave里的点赋值给图像对象就好了啊
小小小小叶 2015-08-12
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
没有压缩下,一个中等的屏幕需要1024 * 768 * 3 = 2.3兆字节 每秒十次,就是23兆字节,就是184兆bit。就是说百兆(bit)网络完全支撑不了。 因此,远程桌面图像的难点,不太在于如何传输,而是在于如何有效地压缩数据。优化方法比如有 一、差分传输: 前后两桢的图像的差别不多,传输差别就可以了(可能就50字节)。 二、描述传输: 传输视窗的各种属性,包括大小位置颜色等,由客户端重构显示。 如果你想锻炼自己,不妨做一些研究。 如果你想做一个产品,建议你好好考虑那些市场上的现有产品。
大神,我在客户端通过差异压缩得到一张差异压缩之后的图片,传到服务器端,怎么用这张压缩之后的图片去更新修改远程桌面上的图片 img = GetScreenMethod();//截屏方法 newBmp = new Bitmap(img); Bitmap bmpSave = new Bitmap(newBmp.Width, newBmp.Height); // Boolean isSame = true; for (int x = 0; x < oldBmp.Width; x++) { for (int y = 0; y < oldBmp.Height; y++) { if (newBmp.GetPixel(x, y) != oldBmp.GetPixel(x, y)) { bmpSave.SetPixel(x, y, newBmp.GetPixel(x, y)); } } } img = (Image)bmpSave; // pictureBox1.Image = bmpSave; byte_img = ImgToByt(img); //图片转换成字节 //mid_byte = ImgToByt(img);// 图片转换成字节 // byte_img = Compress(mid_byte); //将字节数据压缩 try { socket.Send(byte_img, byte_img.Length, SocketFlags.None); //发送数据给服务器 bmpSave.Dispose(); oldBmp.Dispose(); oldBmp = newBmp; newBmp.Dispose(); System.GC.Collect(); } 这是我客户端的代码
小小小小叶 2015-08-11
  • 打赏
  • 举报
回复
引用 2 楼 xian_wwq 的回复:
(1).因为我是每隔100毫秒就要传输一张图片,所以我如何判断当前这张图片是否读取完毕,服务器端如何处理 图片数据是否传完,需要client告诉server。具体来说client发送的数据包,首先要发送完整的数据长度, server根据这个长度,接收数据,完成业务层的数据解析。 (2)我原来学过一点java,知道java中的图片传输有专门的流,但是c#中应该用哪种 传输图片和传输文件个人感觉原理上没啥差异 楼上已经说了,如果数据不压缩,网络带宽就是瓶颈, 数据压缩感觉内容还是挺多,之前接触过网络视频服务器,是借助硬件进行移动捕捉和压缩
我原来也学过一点java,java专名有这方面的图片传输流
小小小小叶 2015-08-11
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
没有压缩下,一个中等的屏幕需要1024 * 768 * 3 = 2.3兆字节 每秒十次,就是23兆字节,就是184兆bit。就是说百兆(bit)网络完全支撑不了。 因此,远程桌面图像的难点,不太在于如何传输,而是在于如何有效地压缩数据。优化方法比如有 一、差分传输: 前后两桢的图像的差别不多,传输差别就可以了(可能就50字节)。 二、描述传输: 传输视窗的各种属性,包括大小位置颜色等,由客户端重构显示。 如果你想锻炼自己,不妨做一些研究。 如果你想做一个产品,建议你好好考虑那些市场上的现有产品。
我去网上找找差分传输的资料,谢谢
xian_wwq 2015-08-11
  • 打赏
  • 举报
回复
(1).因为我是每隔100毫秒就要传输一张图片,所以我如何判断当前这张图片是否读取完毕,服务器端如何处理 图片数据是否传完,需要client告诉server。具体来说client发送的数据包,首先要发送完整的数据长度, server根据这个长度,接收数据,完成业务层的数据解析。 (2)我原来学过一点java,知道java中的图片传输有专门的流,但是c#中应该用哪种 传输图片和传输文件个人感觉原理上没啥差异 楼上已经说了,如果数据不压缩,网络带宽就是瓶颈, 数据压缩感觉内容还是挺多,之前接触过网络视频服务器,是借助硬件进行移动捕捉和压缩
Forty2 2015-08-11
  • 打赏
  • 举报
回复
没有压缩下,一个中等的屏幕需要1024 * 768 * 3 = 2.3兆字节 每秒十次,就是23兆字节,就是184兆bit。就是说百兆(bit)网络完全支撑不了。 因此,远程桌面图像的难点,不太在于如何传输,而是在于如何有效地压缩数据。优化方法比如有 一、差分传输: 前后两桢的图像的差别不多,传输差别就可以了(可能就50字节)。 二、描述传输: 传输视窗的各种属性,包括大小位置颜色等,由客户端重构显示。 如果你想锻炼自己,不妨做一些研究。 如果你想做一个产品,建议你好好考虑那些市场上的现有产品。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧