仅从三星S5设备获取“ SocketTimeoutException:无法连接”

时间:2019-01-03 09:22:00

标签: android sockets tcp samsung-mobile s5

我的TCP通信应用程序有一个非常奇怪的问题。 我很久以前就做到了,但从未遇到任何问题。 这是一个简单的通过TCP套接字发送和接收数据包。

但是我不知道如何,这周我在三星Galaxy S5上运行它,但是我没有成功建立与服务器的连接。

serverSocket.connect(new InetSocketAddress(mServerIPV6.getHostAddress(), Network.COMMUNICATION_PORT), (int) (3 * DateUtils.SECOND_IN_MILLIS));

总是返回:

java.net.SocketTimeoutException: failed to connect to /fe80::d6ae:5ff:fe43:c6e9%wlan0%23 (port 60001) after 3000ms

但是最疯狂的事情是它通过网络服务发现(UDP)成功找到了服务器的IP地址。因此,问题并非出自Wi-Fi网络,而是仅在此设备(三星S5)上发生。很奇怪。有想法吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是较旧的设备,则可能需要启用TLS版本1.2。

您可以使用Okhttpclient构建器来完成此操作。

 public static OkHttpClient.Builder enableTls12OnPreLollipop(OkHttpClient.Builder client) {
        if (Build.VERSION.SDK_INT >= 16 && Build.VERSION.SDK_INT < 22) {
            try {
                SSLContext sc = SSLContext.getInstance("TLSv1.2");
                sc.init(null, null, null);
                client.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()));

                ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                        .tlsVersions(TlsVersion.TLS_1_2)
                        .build();

                List<ConnectionSpec> specs = new ArrayList<>();
                specs.add(cs);
                specs.add(ConnectionSpec.COMPATIBLE_TLS);
                specs.add(ConnectionSpec.CLEARTEXT);

                client.connectionSpecs(specs);
            } catch (Exception exc) {
                Log.e("OkHttpTLSCompat", "Error while setting TLS 1.2", exc);
            }
        }

        return client;
    }