我正在构建一个需要具有屏幕共享功能的客户端/服务器解决方案。我有一些已经“正常工作”但问题是它只适用于内部网络,因为我的方法不够快。
我基本上做的是客户端请求服务器每5秒钟询问一次屏幕图像(例如)。这是收到此请求后处理的代码:
private void GetImage(object networkstream)
{
NetworkStream network = (NetworkStream)networkstream;
Bitmap bitmap = new Bitmap(
SystemInformation.PrimaryMonitorSize.Width,
SystemInformation.PrimaryMonitorSize.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bitmap.Size);
g.Flush();
g.Dispose();
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
bitmap.Dispose();
byte[] array = ms.ToArray();
network.Write(array, 0, array.Length);
network.Flush();
ms.Dispose();
}
我正在尝试做什么的最佳方法是什么?我需要获得至少0.2 FPS(每5秒刷新一次)Obs。:我正在使用Windows Forms,它是通过套接字完成的。
TeamViwer和.rdp文件如何工作?
答案 0 :(得分:2)
您需要优化您的协议,以下是一些建议:
答案 1 :(得分:2)
使用现有实施怎么样?或者从中学习? http://cdot.senecac.on.ca/projects/vncsharp/
答案 2 :(得分:1)
您只能发送当前和最后一张图像之间的差异。看这里:Calculate image differences in C#
如果它不够快,你可以将你的屏幕划分为较小的,如100x100或50x50位图,检查这个区域是否已经改变,如果是,只需将其发送给客户。