Я пытаюсь подключиться к telnet без рутированного Droid. У меня активировано разрешение INTERNET
, мое устройство подключено к той же сети, что и моя коробка Mac OS X
через WiFi, и я могу пропинговать открытый порт.
В первоначальных экспериментах я заставлял его работать на рутованном тестовом устройстве, но обработчики сокетов выполнялись на UI Thread
, а не в отдельном потоке. Теперь, когда у меня есть сетевые модули в отдельном потоке, я не могу получить ServerSocket.accept ()
для возврата. Он работает на версии Android от Google (vanilla), но не на Samsung или Sony-Ericsson.
Когда я обращаюсь к нему по телнету, моя попытка истекает, и logcat
не выводит никаких исключений или ошибок.
Вот ссылка на репо моего кода с Google-кодом: Хранилище Google-кода
Я запускаю ServerScoket.accept ()
в отдельном потоке и запускаю потоковые процессоры также в другом потоке. Комментарии к моему дизайну (то есть я должен использовать Handler
s или AsyncTasks
) крайне приветствуются. Прямо сейчас, чтобы Toast сообщения, полученные через telnet, я использую Обработчик с петлителем, полученным через Context
.
Вот что я получаю, когда запускаю netstat -n
в оболочке adb на нерабочих устройствах:
~$ adb shell netstat -n
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:7777 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:7203 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:47609 127.0.0.1:7777 ESTABLISHED
tcp 0 0 127.0.0.1:7777 127.0.0.1:47609 ESTABLISHED
tcp 0 0 127.0.0.1:47610 127.0.0.1:7777 ESTABLISHED
tcp 0 0 127.0.0.1:7777 127.0.0.1:47610 ESTABLISHED
Разница в том, что на работающих устройствах они перечисляют IP с моим открытым портом в состоянии LISTEN.
ОБНОВЛЕНИЕ : Установив <uses-permission android:name="INTERNET"/>
в моем android_manifest
, я попытался изменить номер порта на 689
. Это не сработало; Я получил BindException
, сказав, что мне, возможно, не хватает разрешения ИНТЕРНЕТ. Итак, я изменил его на 1989
и вернулся к тому, что все работало до accept ()
. Я предполагаю, что это потому, что я запустил его на телефоне без полномочий root, и у меня нет доступа к портам 1024
и ниже.
ОБНОВЛЕНИЕ : я запустил очень похожую программу на своем Mac, и она работала нормально, когда я пытался подключиться к своему Mac с помощью telnet, используя назначенный мне IP-адрес. Это не сработало, когда я попробовал телнетить с другого Mac, но, похоже, не подключилось; соединение будет прервано. Это действительно работало по специальной сети, все же. Я все еще должен попробовать это, используя дроида, но я обновлю это как можно скорее.
ОБНОВЛЕНИЕ : мне удалось заставить приложение работать на 3 отдельных дроидах под управлением Vanilla (Android выпущен Google). Он работал на Nexus, Apanda A60 (мое первое устройство; adb по какой-то причине перестал его обнаруживать) и на заказном планшете без бренда. Тем не менее, поскольку я уже предложил довольно большую награду, я планирую довести это до конца.
Как уже говорилось ранее, мое приложение работает с версиями Android для Vanilla, но не с модифицированными версиями. Три телефона, которые не смогли его запустить, были моделями среднего класса; 2 Samsung GT-i5503
с и Sony-Ericcson E16i
.