Я создаю клиент/серверное решение, которое должно иметь функциональность совместного использования экрана. У меня есть что-то уже «работающее», но проблема в том, что он работает только по внутренней сети, потому что моя методология недостаточно быстро.Написание собственного сервера для обмена экранами и протокола
Что я в основном делаю, так это то, что клиент делает запрос на сервер, запрашивая изображение на экране каждые 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 секунд). Обобщение: я использую Windows Forms, и это делается через сокеты.
Как работают файлы TeamViwer и .rdp?
Вы хотите воссоздать, что уже делают RDP, VNC, Citrix? – PinnyM
@PinnyM Да, но он хочет сделать это очень медленно. Предположительно, он только делится презентациями PowerPoint;) –
Это выглядит интересно, из Vista есть API: http://www.teknoportal.gen.tr/english/technology_news.asp?haber=385 –