2012-03-11 2 views
4

Я установил sl4a и Python на свою Galaxy Tab на Android. Я столкнулся с проблемами, используя модуль ppython для связи между моим ноутбуком и телефоном.Сокетная связь с Python на Android

Этот example всегда работал хорошо для меня, когда я писал только программы на компьютере только для питона, но не работает так, как ожидалось, на компьютере/вкладке. Вот код, я бегу на вкладке:

import socket, android 
droid=android.Android() 
droid.makeToast('Running...') 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(('', 50111)) 
droid.makeToast('Socket has been bound') 
s.listen(1) 
conn, addr = s.accept() 
droid.makeToast('Connection has been accepted') 

И кода я выполняющихся на ноутбуке (где <Tab IP Address> является IP-адрес вкладки):

import socket 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('<Tab IP address>', 50111)) 

клиентский сценарий (на ноутбуке) с:

socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 

И в сценарии на вкладке отображается все, кроме последнего сообщения Toast.

Я получаю IP-адрес вкладки с сайта www.whatismyip.org.

Локальное программирование сокетов (т. Е. Подключение к IP-адресу «localhost» и запуск как клиента, так и сервера на вкладке) отлично работает.

Я использовал руководство here для передачи файлов на свою вкладку.

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

EDIT: [Добавлено 21/03/12] Оказалось, что приведенный выше код отлично работает (связь между Tab и ноутбуком), если я подключаю Tab к моей сети Wi-Fi и использую адрес 192.168.0.xx. Это заставляет меня думать, что проблема заключается в том, что IP-адрес, который я использую для подключения к Tab, а не сам код. Я буду продолжать пытаться. Любые советы по наилучшему обнаружению IP-адреса для подключения или ошибок, которые я мог бы сделать, будут оценены.

ИЗМЕНИТЬ СНОВА: От чтения this question и this link я пришел к выводу, что IP-адреса смартфонов (и планшетов) не являются статическими, и поэтому обращение с мобильным устройством в качестве сервера в этой ситуации - неправильный способ сделать это , Я переосмыслию свою структуру программы. Хотя я знаю, что это был неправильный способ структурирования взаимодействия, я до сих пор не совсем понимаю, почему это не удалось. Я подозреваю, что, прочитав предыдущие ссылки, IP-адрес, который я получал с www.whatismyip.org, не был уникальным для моей вкладки, но был скорее «массовым IP», принадлежащим моему сетевому провайдеру, из которого затем можно подключить перенаправляется на отдельные устройства (таким же образом, что сетевой маршрутизатор может перенаправлять соединения на себя на отдельные устройства в сети). Тем не менее, я не уверен в этом и не могу придумать ни малейшего способа проверить его (не дожидаясь, чтобы люди в той же сети, что и я, которые живут в одной и той же области сотовой связи, и спрашивали их о своих мобильных IP-адресах). Если бы кто-то мог прояснить этот момент, я был бы очень благодарен.

ответ

1

Вы были правы относительно вещи «массового IP». Когда вы подключаете свой телефон через Wi-Fi, он получит случайный IP-адрес из пула IP-адресов маршрутизатора.

Обычно он получает тот же IP-адрес, если у вас есть постоянное количество устройств, подключенных к маршрутизатору. Например, если у вас есть 3 компьютера, подключенных через кабель и 1 смартфон, тогда телефон всегда будет получать IP-адреса 192.168.1.5 (192.168.1.2 - .4) для ваших компьютеров).

В зависимости от вашего маршрутизатора вы можете настроить его таким образом, чтобы каждый раз, когда вы подключаете его к Wi-Fi, вы можете указать тот же адрес на свой смартфон. И IP, который вы использовали от www.whatismyip.org, - это тот, который используется провайдером, который использует сеть для доступа к «общедоступному интернету» (но это уже другая история).

Вы должны проверить свой локальный IP-адрес на вашем планшете (Настройки-> Wi-Fi-> Настройки Wi-Fi-> и нажмите соединение. На вашем IP-адресе должно появиться небольшое информационное окно).

Вы должны использовать это в своем коде для сервера.

Надеюсь, это помогло.

+0

@scubbo Рад, что это было полезно. –

Смежные вопросы