TCP-соединение отклонено на Nexus 5X

У меня есть простое приложение, в котором я открываю соединение TCP-сокета с сервером, а затем отправляю через него некоторые данные. Он работает нормально, но я получаю следующее исключение на устройствах Nexus 5X. Поскольку я могу подключиться к серверу с другими устройствами, это не проблема на стороне сервера.

09:00:05.118+03:00 D/com.testing.android.util.Util getCurrentGatewayIP: 192.168.1.1
09:00:05.120+03:00 D/com.testing.android.util.TCPClient Connect()
09:00:05.121+03:00 D/com.testing.android.util.TCPClient openSocket
09:00:17.162+03:00 E/com.testing.android.util.TCPClient sendInfo
09:00:17.163+03:00 E/com.testing.android.util.TCPClient java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:334)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
    at java.net.Socket.connect(Socket.java:586)
    at com.testing.android.util.TCPClient.openSocket(TCPClient.java:208)
    at com.testing.android.util.TCPClient.connect(TCPClient.java:53)

    at android.os.AsyncTask$2.call(AsyncTask.java:304)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

ОБНОВЛЕНИЕ:

Похоже, Nexus 5X блокирует доступ к серверу (который является частью локальной сети и подключается к телефону через Wi-Fi). Эта сеть не имеет подключения к Интернету. На других устройствах Android вы получите уведомление «У Wi-Fi нет доступа к Интернету. У этой сети нет доступа к Интернету. Оставайтесь на связи? (Да/Нет)», но вы все равно сможете общаться в локальной сети. На Nexus, если пользователь не согласился оставаться на связи с сетью, вся связь блокируется.


person Ubaier Bhat    schedule 14.09.2016    source источник
comment
У меня такая же ошибка, и, немного покопавшись, я понял, что мой телефон недавно применил брандмауэр с приложением AFWall +, лол   -  person Fruit    schedule 11.09.2017


Ответы (2)


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

В этом сообщении описывается несколько дополнительных деталей.

person Ubaier Bhat    schedule 16.09.2016

Подключение реализовано через нативную функцию connect(). man connect говорит:

ECONREFUSED Никто не прослушивает удаленный адрес.

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

person Sergio    schedule 14.09.2016