См. Эту статью под названием: Как работает VNC, Fog Creek Copilot и другое программное обеспечение для дистанционного управления .
Я приведу некоторые дополнительные подробности из того, что говорится в этом посте, но это более конкретно относится к исходному коду Fog Creek Copilot. Все эти данные были взяты из просмотра исходного кода.
По сути, Copilot не был написан с нуля на C ++, а был построен на основе TightVNC под GPL. Да, это означает, что основной источник Copilot также должен быть выдан. Вы можете получить исходный код Fog Creek для второго пилота здесь . И, насколько я понимаю, вы могли бы построить свое решение на основе исходного кода этого проекта, если вы также сделали его GPL.
Проект разделен на версию для Mac и версию для Windows. Версия для Mac встроена в цель C, а версия для Windows - в Win32 C ++ (не MFC). Для версии Windows есть решение Helper, созданное в VS 2008, и решение Host (хост - человек, которому помогают), созданное в VS 2008. Я думаю, что они не использовали Qt от Trolltech из-за большого размера ссылок, это было важно для них, чтобы сохранить загрузку очень маленькой, так как она должна была изначально загружаться всеми, кто помогает кому-то, и каждый, кто нуждался в помощи каждый раз
Конфигурации x64 и IA64 отсутствуют, поэтому весь код в Windows выполняется только как процесс x86. Он может работать в 64-битных окнах через WOW64, как и любой другой 32-битный процесс.
Как я понимаю, разработка была сделана с Хостом, работающим на ВМ, по большей части. Разработка Помощника была сделана на их рабочем столе.
Исходный код Copilot использует boost 1.38 и несколько других сторонних библиотек. Эти библиотеки включают STUNT для обхода NAT, MatrixSSL, libntlm (библиотека для проверки подлинности Microsoft NTLM) и omnithread (библиотека потоков и синхронизации).
По большей части он использует сокеты в стиле bsd, но также имеет некоторый сетевой код в boost :: asio. Это проблематично, потому что в boost :: asio 1.38 есть много ошибок, которые исправлены в boost 1.40. Проект также имеет Windows-хук для подключения клавиатуры, мыши и других оконных сообщений на хосте.
Существует проект оболочки, который не похож на оболочку Windows, но в основном содержит 3 двоичных файла: хост, удалитель и перехватывает DLL. Это извлекает это.
Что они не выдают, так это исходный код Reflector и веб-сайта, который, как я понимаю из некоторых сообщений в блоге на projectaardvark.com , они оба в C #, все остальное в C ++. Цель отражателя - помочь в прохождении NAT. Новый блог, который заменяет projectaardvark.com , кстати, называется Воздушное движение .
VNC основывается на протоколе удаленного кадрового буфера. Сам протокол RFB не так сложен, если у вас большой опыт работы с протоколами.