Как управлять компьютером со смартфона по Wi-Fi: пишем Android-приложение на С#
Пример использования инструмента Xamarin.Forms для создания пользовательского интерфейса системного администратора, удаленно управляющего рабочими станциями с телефона.
Введение
Неправильное использование рабочих компьютеров компании является обычной практикой среди пользователей во многих компаниях, где отсутствуют надлежащие механизмы мониторинга. Это приводит к напрасной трате ресурсов и снижает скорость достижения общих целей организации. Таким образом, для достижения желаемых результатов необходим эффективный механизм, с помощью которого системный администратор может отслеживать и контролировать рабочие станции сотрудников.
Целью рассматриваемого проекта является разработка приложения на основе Xamarin.Forms, которое позволит системному администратору проводить удаленное наблюдение и контроль рабочих станций на рабочем месте. Проект будет включать разработку двух приложений: одно будет работать на рабочих станциях, другое – на мобильном телефоне администратора. Внедрение механизма позволит администратору не только следить за действиями пользователей, но и даст возможность удаленно контролировать конкретные рабочие станции.
Идея проекта
Итак, в проекте мы создадим два приложения, серверное и клиентское.
Серверное приложение будет постоянно работать на каждой рабочей станции. Приложение сервера будет связано с клиентским приложением через Wi-Fi соединение. Программа делает скриншот активности пользователя по требованию администратора и отправляет его в клиентское приложение. Серверное приложение будет принимать, интерпретировать и выполнять команды, полученные от мобильного (клиентского) приложения.
Клиентское приложение на Xamarin.Forms – Android-приложение на смартфоне администратора, предоставляющее интерфейс, через который администратор может управлять серверным приложением. С помощью клиентского приложения администратор даёт команду серверному приложению сделать скриншот и отправить изображение на смартфон. С помощью клиентского приложения администратор может контролировать каждую рабочую станцию, отправлять сообщения, выключать или переводить компьютер в спящий режим и т. д.
1. Серверное приложение
1.1. Создаем консольное приложение
Начнём с создания проекта консольного приложения с .NET Framework.
1.2. Добавляем соответствующее пространство имен
Создаем экземпляр TcpClient
и TcpListener
. Объявляем строку локальной переменной с именем ipString
.
1.3. Узнаем IP адрес вашей машины
Напишем метод внутри функции Main
, который будет перехватывать и возвращать IP-адрес машины.
1.4. Слушаем порт 1234
Теперь мы готовы принимать сообщения, например, по порту 1234
. Этот порт и IP-адрес текущего компьютера будет использоваться в качестве конечных точек. Тогда мы сможем связаться с клиентом по TCP.
1.5. Создаем соединение с клиентом
Создадим функцию приема и обработки сообщения о том, что рабочая станция должна быть переведена в спящий режим. В качестве команды от клиента мы должны получить строку “
. SLP2
”
1.6. Пишем метод Sleep
Расширяем пространство имён проекта. Добавляем внутри функции Main
метод Sleep
:
2. Клиентское приложение
2.1. Создаем проект Xamarin.Forms
Открываем Visual Studio и переходим в New Project-> Cross-platform-> Xamarin.Forms-> Blank app
. Даем ему имя, например, XamarinFormsClient
.
2.2. Создаем класс соединения
Далее в нашем проекте нужно определить класс соединения для создания экземпляра TCP Client. Создаем новый класс с именем Connection.cs
и записываем в него следующий код.
2.3. Создание пользовательского интерфейса
Нам нужны два редактируемых текстовых поля для IP-адреса и порта, и одна кнопка для соединения с сервером. Откроем файл макета MainPage
и заменим код на следующий:
2.4. Описываем метод соединения
Опишем взаимосвязь элементов управления пользовательского интерфейса с классом MainPage
. Далее свяжемся с приложением сервера, используя IP-адрес и порт рабочей станции.
2.5. Обновление класса приложения
Открываем файл App.xaml
внутри этого класса и добавляем следующий код в конструктор класса App.
3. Проверка соединения
Давайте проверим соединение сервера и клиентского приложения, которое мы только что создали. Основной модуль запуска приложения Xamarin.Forms отобразит главную страницу. Запустим серверное приложение, скопируем IP-адрес и порт рабочей станции из серверного приложения. Поместим в клиентское приложение и нажимаем Connect.
4. Работаем с функцией скриншота и выключения
Поговорим о том, как будет работать функция скриншота. Клиент запрашивает скриншот, отправляет команду в виде строки "TSC1"
, на рабочей станции серверное приложение делает скриншот. Размер изображения может быть большим, поэтому мы преобразуем данные снимка экрана в пакеты байтового типа и отправляем клиентскому приложению. Когда клиент получит пакеты байтового типа, он преобразует их в исходную форму.
Добавим функцию выключения рабочей станции. Если клиент отправляет команду “SHTD3”
серверному приложению, сервер выполнит функцию выключения компьютера.
5. Возвращаемся к серверному приложению
Вернемся к серверному приложению и опишем функции снимка экрана выключения рабочей станции. Откроем файл program.cs и запишем следующий код внутри цикла while
, который мы реализовали ранее.
6. Функции съемки экрана и выключения
Добавим в серверное приложение следующие пространства имен. Иначе Visual Studio не распознает ключевое слово graphics
функции снимка экрана.
Вернемся к program.cs
и поместите эти функции в основной класс.
Итак, мы закончили с серверным приложением.
7. Возвращаемся к клиентскому приложению
7.1. Создаем страницу операций
Возвращаемся в клиентское приложение (Xamarin.Forms) и добавляем новый ContentPage
с именем OperationsPage
. Внутри этого макета добавим следующий код, чтобы создать больше кнопок.
7.2. Добавляем в класс операций методы ожидания
Открываем файл OperationPage.xaml
и переносим следующий код.
8. Тестируем!
Запускаем оба приложения – сервер и клиент. Вводим IP-адрес и порт рабочей станции, которые вы видите на экране вывода приложения сервера, в клиентское приложение и нажимаем Connect
.
После подключения к серверу теперь мы можем выполнять различные команды.
Ура! Всё работает. При нажатии на Sleep
рабочая станция переходит в спящий режим. При нажатии на Take Screenshot
через пару мгновений скриншот рабочей станции оказывается внутри клиентского приложения.
Если вы любите C#, мы также советуем вам обратить внимание на другие статьи тега C#, например, недавние:
- Что нового будет в C# 9? Результаты исследования Proposals на GitHub
- 10 самых популярных алгоритмов сортировки на C#
- Исчерпывающий видеокурс: структуры данных C#