0

我的 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 网络,它只发生在这个设备 (Samsung S5) 上。很奇怪。任何想法?

4

1 回答 1

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;
    }
于 2019-01-03T09:39:40.200 回答