Nexus 5X 上的 TCP 连接被拒绝
TCP connection refused on 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.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.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 似乎阻止了对服务器的访问(它是 LAN 的一部分并通过 wifi 连接到 phone)。此网络没有互联网连接。在其他 android 设备上,您会收到通知 "Wifi has no Internet access - This network has no Internet access. Stay connected? (Yes/No)",但您仍然可以在局域网内进行通信。在 Nexus 上,除非用户已接受他们希望保持与网络的连接,否则所有通信都会被阻止。
连接是通过本机函数实现的 connect()
。 man connect
说:
ECONNREFUSED No-one listening on the remote address.
这意味着你应该检查你的服务器在指定的地址和端口是否真的可用,并且能够接受新的连接。
目前没有针对此问题的编程解决方案。用户必须手动允许网络。由于这是用于检测强制门户的安全功能,因此只有系统应用程序可以禁用它。
This post 描述了更多细节
我有一个简单的应用程序,我在其中打开到服务器的 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.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.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 似乎阻止了对服务器的访问(它是 LAN 的一部分并通过 wifi 连接到 phone)。此网络没有互联网连接。在其他 android 设备上,您会收到通知 "Wifi has no Internet access - This network has no Internet access. Stay connected? (Yes/No)",但您仍然可以在局域网内进行通信。在 Nexus 上,除非用户已接受他们希望保持与网络的连接,否则所有通信都会被阻止。
连接是通过本机函数实现的 connect()
。 man connect
说:
ECONNREFUSED No-one listening on the remote address.
这意味着你应该检查你的服务器在指定的地址和端口是否真的可用,并且能够接受新的连接。
目前没有针对此问题的编程解决方案。用户必须手动允许网络。由于这是用于检测强制门户的安全功能,因此只有系统应用程序可以禁用它。
This post 描述了更多细节