Управление подключениями по сети с андроида

Взаимодействие Android-устройств в локальной сети

Предположим, мы пишем игру для Android, которая подразумевает некое сетевое взаимодействие между устройствами. Причем наши устройства находятся в одной сети и мы хотим, чтобы взаимодействие между ними осуществлялось быстро, а значит вариант с обменом данными через интернет нам не подходит. Ах да, еще одна маленькая ложка дегтя — мы хотим охватить максимально возможную аудиторию, для чего нам необходимо поддерживать Android 2.3.
Что же нам делать? Давайте поговорим об этом, а заодно рассмотрим относительно новые возможности Android SDK для соединения двух и более устройств.

О чем это и для кого это?

Как-то раз, уйдя с предыдущего места работы и погрузившись в заслуженный отдых, я принялся писать сетевую игру, в которую могут играть люди, находящиеся в одной локальной сети. И сразу же столкнулся с тем, что для нормального функционирования подобной игры нам мало соорудить сетевое взаимодействие — нам нужно сделать нормальное и быстрое обнаружение устройств в сети. Собственно, в данной статье я поделюсь своим опытом в реализации решения для данной задачи.
Сразу оговорюсь, что статья предназначена в большей мере для тех, кто имеет опыт Android-разработки, написал несколько приложений и хочет расширить свой кругозор, а также улучшить профессиональные навыки.

Какие возможные способы решения существуют?

  1. Android Network Service Discovery. Простой и эффективный способ обнаружения устройств. На Android Developer есть пошаговое руководство по подключению NSD, есть пример NsdChat, который можно скачать там же. Но есть один существенный минус — данный метод поддерживается только начиная с API Level 16, то есть с Android 4.1 Jelly Bean;
  2. Второе решение, предлагаемое нам на сайте Android Developer — Wi-Fi Peer-to-Peer. Проблема этого метода та же самая — поддерживается он только начиная с API Level 16;
  3. Есть странное решение, которое предлагается некоторыми программистами на Stack Overflow — самостоятельно сканировать локальную сеть на предмет наличия сервера. То есть проходить по всем адресам сети. Это уже сейчас звучит как странный велосипед, а теперь представьте, что порт нашего сервера назначается автоматически. Таким образом, сканирование даже самую небольшой сети становится достаточно долгой и трудоемкой задачей;
  4. Наконец, мы можем обратить внимание на Java-библиотеки и написать что-нибудь с их использованием. Например, JmDNS.

Последний способ выглядит вполне адекватным и, кажется, может обеспечить нас требуемой скоростью и удобством обнаружения устройств в сети для конечного пользователя.

Я вооружился JmDNS и решил попробовать соорудить несколько классов, которые по максимуму упростят написание описанных выше приложений. Но для начала пришлось немного повырезать дубликаты .class-файлов из jar-пакета JmDNS (проблема описана здесь):

Далее я взял исходный код NsdChat с Android Developer и изменил его служебный класс, который отвечает за инициализацию сокетов и организацию сетевого взаимодействия. Также я написал wrapper для JmDNS

Здесь размещены 4 основные функции для работы Network Discovery:

  1. startServer для создания сервера и регистрации соответствующего сервиса в локальной сети;
  2. findServers для поиска серверов;
  3. reset для окончания работы с Network Discovery и последующего освобождения ресурсов;
  4. wifiLock для запроса блокировки Wi-Fi.

В завершении я написал универсальный класс ConnectionWrapper для полноценной организации обнаружения, а также обмена сообщениями в локальной сети. Таким образом, создание сервера в конечном приложении выглядит следующим образом:

А вот и mServerHandler, использующийся для приема и обработки сообщений:

Отправка сообщений еще проще:

И, наконец, метод для обнаружения и подключения к серверу:

Как видите, все очень просто. А главное, все это работает в любой версии Android для максимум двух устройств. Но сделать так, чтобы это работало для условно неограниченного числа устройств очень легко, и очевидное решение придет к вам почти сразу после детального изучения класса Connection. Пусть это будет в качестве домашнего задания.
Ах, да, весь код доступен для изучения и использования всеми желающими в моем репозитории на GitHub.. И, конечно, не исключаю то, что некоторые вещи можно сделать лучше и проще, поэтому не стесняйтесь форкать и делать pull request’ы.

Читайте также:  Обнаружены наложения android как убрать

Источник

Управление подключениями по сети с андроида

Новые темы необходимо создавать только в корневом разделе! В дальнейшем они будут обработаны модераторами.

Копировать файлы с компьютера или ноутбука (далее ПК) на мобильное устройство (далее Андроид) и обратно требуется часто и (в случае больших файлов) проще всего это делать, используя Wi-Fi.

Основное требование: Все устройства (один или несколько ПК, Андроиды) должны быть подключены к одной сети!

    Простейший способ — SHARE it
    Установите на все устройства SHARE it. Программа доступна на Андроид и Windows.
    Логика интерфейса программы практически идентична на всех платформах.
    На принимающем устройстве выберите «Принять», на отправляющем «Отправить», выберите необходимые для передачи данные и выберите устройство, на которое данные необходимо передать.

Получаем доступ с Андроида к файлам на ПК.
Для этого потребуется установить на Андроид файл-менеджер с поддержкой SMB (Samba). Я пользуюсь ES File Explorer, альтернативы: ASTRO File Manager с плагином Astro SMB Module, eFile, X-plore.
В ES File Explorer все несложно. Нужно перейти на вкладку «LAN», нажать кнопку Меню>Создать>Сканировать. После этого программа проверит весь диапазон IP-адресов и отобразит адреса компьютеров, имеющих папки с общим доступом. Также можно не сканировать сеть, а добавить сервер вручную, указав его IP, и, при необходимости, имя пользователя и пароль.

    Samba-сервер
    Для примера используем Samba Server for Android, он позволяет работать с SD-картой коммуникатора, как с расшаренной папкой ПК. Для работы программы требуются root-права.
    Устанавливаем и запускаем программу. При первом запуске будет выдана краткая инструкция по использованию. Первый шаг — задать пароль для доступа к ресурсам мобильного устройства. Для этого нажмите Menu>Settings>Password и введите пароль. Там же можно при желании сменить имя пользователя, а также указать рабочую группу (имя должно совпадать с именем рабочей группы в настройках ПК) и NetBIOS-имя Андроида (то, что будет отображаться в сетевом окружении на ПК). После настройки вернемся в главное окно программы и нажмем Menu>Enable. Это запустит сервер SAMBA на Андроиде.

  1. Часто проблемы с соединением ПК и Андроида вызваны блокировкой мультикаста (Block multicast) в настройках роутера. Отключите это ограничение.
  2. Для упрощения доступа можно настроить фиксированные IP-адреса для всех устройств локальной сети.[/b]
    Если ПК (ноутбук) и Андроид получают IP-адреса по DHCP от роутера, то адреса при каждом включении могут отличаться. Этого бы не хотелось, т.к. ПК с ноутбуком между собой разберутся и найдут друг друга по именам, а вот у Андроида это может не получиться, т.к. он работает с IP-адресами. Тут есть два способа:

Подключение по локальной сети — Ethernet адаптер:

DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
Физический адрес. . . . . . . . . : 00-1F-D0-D4-53-2D
Dhcp включен. . . . . . . . . . . : нет
IP-адрес . . . . . . . . . . . . : 192.168.5.2
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз . . . . . . . . . . : 192.168.5.1
DNS-серверы . . . . . . . . . . . : 192.168.5.1

Ребрендинг шапки любезно предоставлен Fidelich — тыц.

Сообщение отредактировал Gridzilla — 22.02.16, 11:53

skunsofob,
Имя и пароль пользователя Windows.
Т.е. можно либо вписать имя и пароль того пользователя под которым заходишь в Windows, либо создать отдельного, назвать его, например, Android.

Возможно проблема также в том, что у пользователя Windows отсутствует пароль.
Насчет Win 7 не знаю, но Win XP Pro запрещает доступ к расшаренным папкам пользователям без пароля.

Еще вариант — попробовать поставить в настройках сервера галку «Анонимный вход».

Галку Анонииный вход ставил — не помогает. А паролей у меня действительно нет как на ПК с ХР, так и на ноуте с Win7. Неужеле придется отдельного пользователя создавать под паролем? По проводам сеть делал — паролей не требовалось.

Сообщение отредактировал Бодтэк — 11.10.11, 11:11

Т.е. доступ с ПК на ноут с Win 7 есть и без пароля?
Имя пользователя Win 7 и пустой пароль в настройках ES проводника не срабатывает?

Читайте также:  911 operator android полная версия

Проверь настройки Win7 в Панель управления -> Сети и Интернет -> Центр управления сетями и общим доступом ->Изменить дополнительные параметры общего доступа (Control Panel -> All Control Panel Items -> Network and Sharing Center-> Change advanced sharing settings), там в самом низу еще раз дополнительные параметры и указать «Отключить защиту паролем». После этого анонимный вход с Андроида должен заработать.

Как вариант — попробуй временно отключить брандмауэр в Win 7. Возможно он мешает.

Сообщение отредактировал raven6 — 09.08.11, 20:42

Логин и пароль пользователя Windows, имеющего доступ к расшаренным папкам.

Так расшарьте какую-нибудь. Без расшаренных папок на ПК вся эта затея теряет смысл.
Правда в Win XP существуют административные ресурсы — все разделы жесткого диска расшарены автоматически с именами типа C$, D$ и т.п. Для доступа к таким ресурсам нужно указать имя и пароль пользователя этого ПК с правами администратора.

Сообщение отредактировал raven6 — 17.08.11, 09:39

Так я никакой логин и пароль не использую для учетной записи (Windows 7)

Да пробовал (создавал папку и расшаривал к ней доступ), не работает все равно, брандмауэр отключал

и нажмите Enter.
После этого будет выдан список всех имеющихся учетных записей пользователей
Временно (ну или постоянно, хотя это небезопасно) отключите парольную защиту расшаренных папок.

Сообщение отредактировал raven6 — 17.08.11, 10:32

Учетная запись есть, но пароль в ней никакой не используется (если не используется что вводить?), почему запрашивается не пойму

Парольную защиту отключил, при конекте к компьютеру, отображаются папки открытые для общего доступа, но при попытке зайти в любую из расшаренных мною папок выскакивает сообщение о неправильном логине и пароле

Анонимный вход в настройках сервера в ES проводнике попробуйте включить.

Сообщение отредактировал raven6 — 17.08.11, 11:14

Включен анонимный вход, все равно не пускает. Пишет: неправильний пароль, возможные причины: недостаточно прав пользователя

Может есть альтернативное решение со значительно простой настройкой?)

Сообщение отредактировал DeaDia — 17.08.11, 11:06

Попробуйте другие файл-менеджеры с поддержкой сети.
Если не заработает, то включите защиту паролем для расшаренных папок и создайте пользователя (например Android) с паролем.

Сообщение отредактировал raven6 — 17.08.11, 11:17

Разобрался.
Итак, диспозиция: Win 7, статический IP, единственный пользователь, созданный при установке, у которого отсутствует пароль.
Если в Win 7 включен общий доступ с парольной защитой (по умолчанию), то ES проводник даже не сможет просмотреть список расшаренных папок, его сразу пошлют, потому что у него документов нету.
Если общий доступ с парольной защитой отключен, то список расшаренных папок в ES проводнике отображается, но доступ можно получить только к папке Users, т.к. к ней по умолчанию разрешен доступ для всех.
Вариантов — два: либо отключить парольную защиту и предоставлять права на доступ к каждой расшаренной папке пользователю гость/Guest (свойства папки>Доступ, там в списке выбрать Guest и нажать добавить), либо не отключать парольную защиту, а создать пользователя, имеющего пароль, и опять же предоставить ему права на доступ к расшаренной папке в том же диалоге. После этого имя и пароль этого пользователя требуется вводить в настройках сервера в ES Проводнике.
По умолчанию Win 7 дает доступ к расшариваемой папке только единственному нашему пользователю, у которого нет пароля, соответственно авторизоваться по сети он не может.
Если Вам не хочется выбирать пользователя при каждой загрузке, то настройте автоматический вход.

Сообщение отредактировал raven6 — 18.08.11, 22:40

Получилось получить доступ к некоторым папкам на компе с телефона. Только под пользователем «Гость» (другие имена никак не хотят восприниматься). Причем сделать общий доступ ко всему диску C:\ не получается. Только если делать для каждой папки по отдельности. Может можно как-то разрешить доступ ко всему содержимому компа более простым способом?
Также по ссылке выше сделал автоматический вход в систему, но при пробуждении опять надо пользователя выбирать тыканьем на значок. А при обычной загрузки — автоматический вход работает. Как можно Windows 7 «объяснить» что я ОДИН ЕДИНСТВЕННЫЙ пользователь компа, что других нет и не предвидеться? Чтобы не было других пользователей, кроме «Владелец (Администратор)». Удалить все другие учетные записи чтоб не мешались и все лишнее раз и навсегда.

Читайте также:  Экспорт чата whatsapp что это андроид

Сообщение отредактировал skunsofob — 19.08.11, 18:52

Источник

Как подключить Android-устройства к локальной сети

В данном руководстве я опишу как реализовать:
1) Подключение мобильного устройства к жестким дискам ПК на Windows;
2) Общие принципы создания домашней локальной сети (LAN).

Подключение Android-устройства к LAN

Итак, вот что нам потребуется (типовой набор):

  1. Мобильное устройство (в моем случает планшет Asus Nexus);
  2. Android-приложение ES Проводник;
  3. Компьютер, к жестким дискам которого мы будем подключаться;
  4. Роутер, к которому подключены компьютер и Android-устройство;

Предполагается, что мобильный девайс у вас уже подключен к роутеру через Wi-Fi, так как это тема заслуживает отдельного разговора, рассматривать её в рамках этой статьи не будем.

ES Проводник является одним из наиболее популярных приложений для работы с файлами, которое умеет работать с удаленными сетями из «коробки». Устанавливаем его через Google Play на Android-девайс.

Открываем приложение и переходим на вкладку «Сеть > LAN». Нажимаем «Scan» для запуска поиска устройств в нашей локальной сети.

Если не все ваши устройства определились, то возможны проблемы с открытием доступа к папкам и файлам на компьютерах. Также рекомендуется задать вручную IP-адреса устройств и добавить их в ES Проводнике самостоятельно, кликнув кнопку «Создать» (см. раздел Настройка локальной сети).

Настройка локальной сети

Обычно при подключении через роутер проблем не возникает, всё происходит автоматом, выдаются динамические IP-адреса для устройств. Но важно, чтобы все ваши компьютеры находились в одной рабочей группе. Как это сделать?

Заходим в «Панель управления > Система», ищем раздел «Имя компьютера, имя домена, имя рабочей группы» и жмем «Изменить параметры» и снова «Изменить».

В поле «Рабочая группа» пишем «WORKGROUP». После чего жмем «OK» и перезагружаем ПК.

Общий доступ к файлам

Заходим в «Панель управления > Сеть и Интернет > Центр управления сетями и общим доступом» и расшариваем папки.

Если по каким-то причинам получаем ошибку про недоступность RPC сервера, то заходим в «Управление (правый клик мышки на иконке «Мой компьютер») > Службы и приложения» и запускаем службы:

  • Удаленный вызов процедур (RPC);
  • Сервер;
  • Модуль запуска процессов DCOM-сервера;

Пробуем в EN Проводнике обнаружить наши ПК, если снова неудача, переходим к следующему разделу.

Настройка IP-адресов

При сложностях подключения устройств в локальной сети рекомендуется прописывать IP-адреса устройств вручную. Занятие это утомительное, но не сложное 🙂

1. Заходим на компьютере в «Панель управления > Сеть и Интернет > меняем вид на «Крупные значки» в правом верхнем углу > Центр управления сетями и общим доступом > Изменение параметров адаптера».

Выбираем наше подключение, у меня ноутбук подсоединен к роутеру через Ethernet-кабель («Подключение по локальной сети»), поэтому настраиваю его. Аналогичным образом можно настроить и «Беспроводное соединение».

2. Чтобы упростить себе задачу жмем правой кнопкой мыши по иконке нашего соединения и выбираем пункт «Состояние», в открывшемся окне жмем кнопку «Сведения».

Интересуют нас текущий IP-адрес компьютера и основного шлюза. Они нам понадобятся в следующем пункте. Оставляем пока это окно открытым.

3. Снова кликаем правой кнопкой мыши на «Подключение по локальной сети» (пункт 2). В списке выбираем «Свойства». И переходим к свойствам «Протокол Интернет версии IP (TCP/IPv4)».

Вбиваем значения из окна «Сведения», которые мы оставляли открытым ранее.

Замечу, что основной шлюз должен быть одинаковым у всех устройств, а вот последнее число в IP-адресе должно отличаться. Например, 192.168.0.94; 192.168.0.4; 192.168.0.12 и т.д.

Ура! Самая нудная часть закончена 🙂

Вот, в принципе, и всё. Повторю рассмотрен лишь типовой пример, потому как разнообразие вариантов организации сеток и подключаемых устройств велико. Например, я в домашней сети настроил подключение со своих устройств к сетевому медиацентру с HDD на 1TB, используя его как основное хранилище данных. Проводами подключил все ПК к роутеру (+свитч), а подсоединение планшета осуществляю через Wi-Fi.

Если у вас все же возникнут проблемы с настройкой, пишите в комментариях, попробуем разобраться.

Источник

Оцените статью