Разъем TIMEOUT, когда телефон работает на 3G, и работает, когда на Wi-Fi. Почему?
Я программирую клиент-серверное приложение, мой клиент - телефон на базе Android, мой сервер - мой ноутбук.
Так что моя проблема в том, что это одна строка кода:
Socket connectionToServerSocket = new Socket(hostName, portNumber);
прекрасно работает, когда мой сотовый телефон подключается к Интернету через домашнее Wi-Fi-соединение, и просто отключается при подключении через 3G (сотового провайдера), например, он блокируется на некоторое время, а затем выдает исключение тайм-аута
Самое интересное, что я вижу (используя OS Monitor), что некоторые приложения подключены через очень общие порты, например, порт № 80, но переключение portNumber (а также порта, который слушает сервер) на 80 не делает 't помощь (например, это все еще истекло), и я пробовал много разных портов - тот же результат.
DNS работает нормально (например, он переводит логическую строку, которую я дал hostName на правильный IP), но он ничего не отправляет серверу... Я потерян, в чем может быть причина? Как я могу проверить и решить это?
3 ответа
Случай 1: Он работает, когда ваш ноутбук и ваш телефон подключен к Wi-Fi не так ли?
Попробуйте это один раз
случай 2:
- подключите свой телефон к 3G.
- включить горячую точку на телефоне.
- подключите ваш ноутбук к точке доступа вашего телефона.
- проверьте IP вашего ноутбука, если он изменился, замените его в объекте Socket.
Socket connectionToServerSocket = new Socket(newIP, portNumber);
- Запустите свой проект.
Просто попробуйте это, как только вы получите то, что я пытаюсь сказать.
Вы получаете исключение тайм-аута, потому что ваш сервер, на котором установлена служба, недоступен из внешней сети.
Надеюсь, это поможет:)
Я столкнулся с этой проблемой, а также делал подобное приложение.
Ваш ноутбук и телефон могут подключаться друг к другу, находясь в одной сети, поскольку они совместно используют поиск IP-адресов через ваш маршрутизатор.
Когда устройство подключено к WIFI, его запрос проходит через маршрутизатор для проверки IP-адресов, он находит IP-адрес вашего ноутбука и сохраняет запрос в DNS, потому что он уже может найти IP-адрес ноутбука. Ноутбук работает так же, он также находит IP-адрес клиента через маршрутизатор.
Однако, когда ваш телефон подключен к сети 3G, он не может точно знать, где находится IP-адрес вашего ноутбука. Вот почему он истекает: он переходит с вашего маршрутизатора на ближайший DNS (где он пытается определить правильный IP-адрес), если он не может найти домен или IP-адрес, который ему подходит, не удастся.
Некоторые шаги, чтобы это исправить.,,
В зависимости от вашего роутера вы можете настроить переадресацию портов для IP вашего ноутбука. Это означает, что входящие запросы к вашему маршрутизатору могут быть переданы на серверную реализацию вашего ноутбука.
Затем перейдите на любой сайт, подобный этому, http://touch.whatsmyip.org/ на своем ноутбуке, чтобы получить IP-адрес вашего ноутбука. Сохраните это, чтобы добавить к своим клиентам настройку сокета.
Для отладки до тех пор, пока ваш портативный компьютер не станет доступен для поиска DNS, перейдите в код своего клиента и добавьте его.
Socket debugSocket = new Socket ("the.laptop.ip", 80);
Некоторые предупреждения:
- В зависимости от вашего роутера ваш ip может меняться при перезагрузках
- С переадресацией портов любой браузер с вашим ip, ex) 178.12.434.01 может зайти на персональный сервер вашего ноутбука
Будущие изменения:
- Как только выделенный сервер запущен и зарегистрирован, зарегистрирован в домене, вы можете изменить вышеуказанный параметр ip на "your.domain.com", и за кулисами фактический IP-адрес вашего сервера будет найден через поиск DNS.
Причина в том, что сервер на вашем ноутбуке по умолчанию закрыт для внешней сети, то, что вам нужно сделать, это так называемая переадресация портов * обратите внимание: переадресация портов подвергает ваш сервер риску кибербезопасности, убедитесь, что вы правильно настроили корректировки, чтобы сохранить ваш сервер в безопасности.