Прерываемые сокеты Java

Прерываемые сокеты JavaПри подключении с помощью сокета текущий поток блокируется до тех пор, пока соединение не будет установлено, или до истечения времени тайм-аута. Аналогично, если вы пытаетесь передать или прочитать данные посредством сокета, поток приостановит выполнение до успешного завершения операции или до окончания времени тайм-аута.

В реальных приложениях желательно предоставить пользователям возможность прервать слишком затянувшийся процесс установления соединения с помощью сокета. Однако если поток блокирован, поскольку не получает ответа от сокета, вы не можете разблокировать его, вызвав метод interrupt().Для прерывания операции с сокетом используется класс SocketChannel, предоставляемый пакетом java.nio. Объект SocketChannel создается следующим образом:

С каналом не связываются потоки. Вместо этого он предоставляет методы read() и write(), использующие объекты Buffer. Данные методы объявлены в интерфейсах ReadableByteChannel и WriteableByteChannel.

Если вы не хотите работать с буферами, можете использовать для чтения из SocketChannel объект Scanner. В классе Scanner предусмотрен конструктор с параметром ReadableByteChannel:

Для формирования выходного потока на базе канала применяется статический метод Channels.newOutputStream();

Вот и все, что необходимо сделать. Если поток будет прерван в процессе открытия соединения, чтения или записи, соответствующая операция завершится и сгенерирует исключение.

АТС для офиса – это отличное решение для организации офисной телефонной сети. Бесплатно подключив услугу «http://globalhome.su/content/article/office_ats/» Вы экономите на покупке дорогостоящего оборудования и избавляетесь от проблем по настройке и дальнейшем обслуживании. С виртуальной телефонной станцией Вы сможете быстро и фактически без расходов расширить телефонную сеть компании и существенно сократить затраты на связь.