SSLSocket зависает на getInputStream, когда Android-устройство находится в Wi-Fi

Я хочу иметь TCP-зашифрованный SSL-сервер на устройстве Android и клиент на компьютере, который будет подключаться к устройству.

Я создаю SSLServerSocket на устройстве Android с собственным хранилищем ключей.

final KeyStore localTrustStore = KeyStore.getInstance("BKS"); //NON-NLS
final InputStream in = context.getResources().openRawResource(R.raw.syncapp);
localTrustStore.load(in, "secret".toCharArray()); //Keystore pw
in.close();

final SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); //NON-NLS

final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(localTrustStore);

final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(localTrustStore, "secret".toCharArray()); //privat key pw

sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);

serverSocket = sslContext.getServerSocketFactory().createServerSocket(SERVER_PORT);
((SSLServerSocket) serverSocket).setNeedClientAuth(true);

Затем я жду, пока клиент подключится. Когда клиент хочет подключиться, запускается новый поток, и потоки становятся востребованными:

final DataInputStream input = new DataInputStream(this.clientSocket.getInputStream());
final DataOutputStream output = new DataOutputStream(new BufferedOutputStream(clientSocket.getOutputStream()));

Сначала я использовал этот код с USB-Tethering, чтобы установить соединение между компьютером и устройством Android. Таким образом, Wi-Fi / Сеть не была включена. Все работало отлично.

Затем я активировал Wi-Fi на устройстве Android и подключиться к WLAN без Интернета. Но теперь вызов getInputStream () кажется занимает от 5 до 10 секунд. Если я деактивирую SSL, он работает отлично. Если WLAN действительно подключается к Интернету, задержки также нет. Я проверял это с Android 4.2 и 5.1. Обновление: теперь я могу протестировать эту проблему с Android 6. И проблема, кажется, там исправлена ​​...

Рукопожатие завершено правильно, но после этого на устройстве Android появляется некоторая задержка. (Вызов getInputStream потребляет это время) Некоторые разработчики говорят, что он выполнит обратный поиск DNS, который приведет к истечению времени ожидания.

Посмотрите на захват, первое соединение было установлено, когда Wi-Fi был отключен. Передача данных заняла 0,3 секунды. Затем я просто активировал Wi-Fi, я не подключился через Wi-Fi, он все еще общается через USB. И это заняло 5 секунд.

Я также нашел проблему здесь, но они используют клиентский сокет. Мне нужен сокет сервера. У кого-нибудь есть идеи, как решить эту проблему?

TLS-соединение с использованием SSLSocket медленное в ОС Android

Ответы на вопрос(1)

Ваш ответ на вопрос