2012-01-08 4 views
1

Каков наилучший способ выполнения неблокирующего TCP-соединения в Java? Я хочу иметь возможность использовать сокет с обычными потоками (иногда SSL). Я также должен настроить таргетинг на Android 2.1, поэтому я не могу позволить себе последнее и самое лучшее.Неблокируемое соединение в Java

+1

Используйте блокируемое TCP-соединение, но поместите код, который управляет им в отдельном потоке? – aroth

+0

Я делаю это, но соединение может блокироваться довольно долго, в зависимости от сетевых условий. Особенно, когда телефон поддерживает переключение между gsm и umts, например. –

ответ

2

Вы можете использовать SocketChannel и configureBlocking(false). Если у вас более одного неблокирующего канала ввода-вывода, и вы намерены использовать их все из одного потока, вы, вероятно, найдете также Selector.

Обратите внимание, что в большинстве случаев проще и менее подвержено ошибкам использовать блокирующие сокеты и использовать несколько потоков, чтобы ваше приложение продолжало выполнять полезную работу, пока оно заблокировано, ожидая завершения ввода-вывода.

+0

+1: Полностью согласен. Режим блокировки по умолчанию, и вам не нужно вызывать configureBlocking для его использования. NIO был представлен на Java 1.4 в 2002 году и предваряет Android на несколько лет. ;) –

+0

Я думал об использовании NIO, но он не очень хорошо работает с SSL, не так ли? –

+0

На самом деле, похоже, проблемы с передачей SSLSocketChannel в Selector. Если вы используете Selector, см. [Этот вопрос] (http://stackoverflow.com/questions/867751/ssl-and-socketchannel). К сожалению, ссылка в первом ответе кажется нарушенной. –

Смежные вопросы