Как это работает
ServerSR - позволяет получить доступ к рабочему столу Вашего компьютера через Интернет. Подключившись к удаленному компьютеру используя свой мобильный телефон, Вы сможете видеть экран компьютера, управлять мышью и передавать ввод текста и нажатие управляющих клавиш как при использовании клавиатуры компьютера. Программа работает с мобильными телефонами, поддерживающими Java. Программа бесплатная с открытым исходным кодом и распространяется как есть.
Система состоит из трех программных компонент: ServerSR – консольная программа на C++ под Windows, функционирует на компьютере к которому осуществляется удаленный доступ; JMClientSR – java приложение для мобильного телефона; Интернет сервер, написанный на PHP. Эти компоненты выполняют следующие функции:
ServerSR – основу составляет север, принимающий запрос от клиента а в ответ отправляющий упакованную картинку с экрана компьютера. В запросе содержится информация, о том какую часть экрана копировать, и какие события клавиатуры и мышки имитировать. Номер порта, который прослушивает сервер указывается в файле serversr.cfg в первой строке параметров. Для каждой следующей строки параметров динамически создается модуль, который является клиентом для внутреннего сервера и клиентом Интернет сервера. Этот модуль опрашивает Интернет сервер на предмет появления внешнего запроса и если такой имеется, он принимается по протоколу http и транслируется внутреннему серверу, а ответ отсылается Интернет серверу. Каждая, строка параметров в файле serversr.cfg начинается с символа двоеточия, за которым через пробелы идут параметры.
JMClientSR - java приложение для мобильного телефона, исходя из разрешения экрана и положения указателя, формирует запрос, какую часть экрана отображать на телефоне или в сжатом виде весь экран компьютера на экране телефона. Так же информация о нажатиях на клавиши телефона транслируются в события клавиатуры и мышки на компьютере. В ответе на запрос содержится графическая информация, которая отображается на экране телефона. Таким образом осуществляется удаленное управление рабочим столом компьютера.
Интернет сервер(PHPServer) - решает проблему серых ip-адресов, т.к. клиент на телефоне соединяется не с компьютером, а с Интернет сервером, так же как и ServerSR. Т.к. обмен происходит посредством протокола http в текстовом виде, система может работать при любых ограничения, если вообще возможен просмотр Интернет страниц. Алгоритм взаимодействия JMClientSR клиента и ServerSR сервера с PHPServer сервером следующий: JMClientSR формирует http запрос и отправляет на PHPServer, там он сохраняется в файл1 и PHPServer ожидает пока в файл0 будет помещен ответ от ServerSR, тем временем ServerSR формирует http запрос содержащий ответ на предыдущий запрос и отправляет его на PHPServer, там он сохраняется в файл0 тем самым прекращая состояние ожидания ответа на JMClientSR этот ответ передается на JMClientSR в теле http странички, а запрос от ServerSR переводится в состояние ожидания до появления данных в файле1. После того как файл прочитан противоположной стороной он обнуляется. Этот процесс повторяется циклически, и если сбоев передачи данных нет, то он самосинхронизируется. Если данные потерялись, процесс повторяется сначала по тайм-ауту, что может вызвать заметную задержку реакции программы. В теле запроса которые формируют JMClientSR и ServerSR содержится PHPServerRecord, ее пользователь получает при регистрации на PHPServer, это позволяет Интернет серверу давать уникальные имена файлу0 и файлу1 в пределах регистрационной записи, другими словами соединять ваш телефон именно с вашим компьютером. На рисунке показан принцип взаимодействия.
Алгоритм работы сервера (ServerSR)
Стартует сервер и для каждого клиента работает следующий протокол типа запрос-ответ:
- запрос означает требование данных для прорисовки. В нем указан тип данных (растровые или векторные) и содержится указание координат и размер окна, данные из которого затребованы, а так же размер окна, в котором эти данные будут прорисованы. В запросе содержится размер данных идущих вслед за запросом. Эти данные о нажатии клавиш и имитации мышки.
- ответ формирует сервер в виде такой же структуры, как и в запросе, только данные идущие за ней кодируют графическую информацию в затребованном окне.
Структура запроса на языке C:
struct IRequest
{
public:
static const int TYPE_STRUCT = 1;
public:
const int size; // size struct
const int type_struct; // type struct
unsigned short X, Y;
unsigned short W, H;
unsigned short sW, sH;
unsigned char Color;
unsigned char type_map;
int dsize;
int cnt;
};
Где:
size – размер структуры в байтах;
type_struct – константа, обозначающая тип структуры;
X, Y – координаты запрашиваемого окна;
W, H – размер запрашиваемого окна;
sW, sH – в запросе эти поля обозначают размер окна в котором будет отображаться запрашиваемая информация а в ответе разрешение монитора на сервере;
Color – первоначально это поле должно было означать требуемую глубину цвета, но для уменьшения трафика, цвета кодируются всегда одним байтом, а в этом поле старшие четыре бита передают дополнительное управление. Бит 4 – требует от сервера вписать весь монитор в требуемое окно, бит 5 – перерисовать все окно не зависимо от предшествующих данных;
type_map – ‘A’ – запрос векторных данных, ‘B’ – запрос растровых;
dsize – размер данных идущих за структурой запроса;
cnt – номер запроса / ответа;
Проблема “серых” ip
Для того что-бы подключится к интернету каждый компьютер должен иметь уникальный ip-адрес, их выдают pегиональные интернет-регистраторы (Regional Internet Registry, RIR) провайдерам. Эти адреса часто называют белыми. Но в последнее время адресов на всех не хватает да и проблематично это поэтому провайдеры часто используют NAT. Маршрутизатор подменяет ip адрес клиента на свой, а клиента запоминает по порту источника. При этом клиенту выдаётся адрес из адресов для изолированных сетей 192.168.0.0/16, 172.16.0.0/12 или 10.0.0.0/8. А потом возвращаемые пакеты преобразует обратно. Проблема в том, что из интернета достучаться до клиента невозможно, видно только маршрутизатор. Такие адреса обычно называются серыми.
Большинство компьютеров подключенных к Интернету имеют серые IP адреса, что зачастую становиться проблемой для многих сидящих за NAT'ом. Необходимость регистрации внешних IP адресов и переадресации портов устраняет Интернет сервер(PHPServer), поскольку клиент на телефоне соединяется не с компьютером, а с Интернет сервером (имеющий внешний статический IP адрес), так же как и сервер на компьютере.
Если ваш компьютер
имеет белый ip-адрес, можно разместить PHPServer прямо на нем, необходимым
условием в этом случае – наличие web-сервера (я использую WampServer). В случае
если ip-адрес динамический, можно воспользоваться бесплатным сервисом –
Динамический DNS, например здесь