«SocketTimeoutException: не удалось подключиться» только с устройства Samsung S5 - PullRequest
0 голосов
/ 03 января 2019

У меня очень странная проблема с моим коммуникационным приложением TCP.Я сделал это давным-давно, и у меня никогда не возникало никаких проблем.Это простая отправка и получение пакетов через сокет TCP.

Но я не знаю, как, на этой неделе я запустил его на Samsung 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

, но самая сумасшедшая вещь в том, что ему удается найти IP-адрес сервера через обнаружение сетевых служб (UDP).Таким образом, проблема не исходит от сети Wi-Fi, и это происходит только с этим устройством (Samsung S5).Очень странно.Есть идеи?

1 Ответ

0 голосов
/ 03 января 2019

Если вы используете старые устройства, вам может потребоваться включить TLS версии 1.2.

Вы можете сделать это с помощью Okhttpclient builder.

 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;
    }
...