gpt4 book ai didi

Android Lollipop Wifi 套接字 java.net.ConnectException ETIMEDOUT

转载 作者:太空狗 更新时间:2023-10-29 14:09:15 25 4
gpt4 key购买 nike

我正在尝试连接到这样的套接字:

    try {
Server = "192.168.0.10";
port = 7000;

System.out.println("SOCKET: Create Socket: " + Server+ ":" + port);

socket = new Socket(Server, port);

System.out.println("SOCKET: Created Socket: " );

out = socket.getOutputStream();
in = socket.getInputStream();
return true;
} catch (IOException ex) {
System.out.println("SOCKET: CATCH: " + ex.getLocalizedMessage());
return false;
}

这在我的 Android 4.2 设备上运行良好。如果我在 Android Lollipop (5.x) 上测试相同的代码,我会得到以下错误:

05-20 08:25:59.592: E/Con(8167): java.net.ConnectException: failed to connect to /192.168.0.10 (port 7000): connect failed: ETIMEDOUT (Connection timed out)
05-20 08:25:59.592: E/Con(8167): at libcore.io.IoBridge.connect(IoBridge.java:124)
05-20 08:25:59.592: E/Con(8167): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
05-20 08:25:59.592: E/Con(8167): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.startupSocket(Socket.java:590)
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.tryAllAddresses(Socket.java:128)
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.<init>(Socket.java:178)
05-20 08:25:59.592: E/Con(8167): at java.net.Socket.<init>(Socket.java:150)

在这两种情况下,我的 Android 设备都通过 wifi 连接到同一台设备。有谁知道 Lollipop 的问题?

谢谢!!

编辑:解决方法:好吧,我注意到一个奇怪的行为:如果我关闭我的移动互联网数据,就会创建套接字!但我只需要移动数据,所以这不是一个令人满意的解决方案......关于如何创建激活移动数据的套接字有什么想法吗?

最佳答案

我们遇到了同样的问题。我们是这样解决的:

ConnectivityManager conMan = (ConnectivityManager) Context.getSystemService(CONNECTIVITY_SERVICE);
NetworkRequest.Builder nb = new NetworkRequest.Builder();
nb.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);

conMan.requestNetwork(nb.build(), new ConnectivityManager.NetworkCallback() {

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onAvailable(Network network) {
Socket s = new Socket();
network.bindSocket(s);

s.bind(new InetSocketAddress(server, port));
}
});

使用 Network.bindSocket(Socket) 您可以主动选择要用于该套接字的网络。这是必要的,因为从 Lollipop 开始,系统默认网络是连接到 Internet 的网络。

关于Android Lollipop Wifi 套接字 java.net.ConnectException ETIMEDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30342006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com