При подключении с помощью сокета текущий поток блокируется до тех пор, пока соединение не будет установлено, или до истечения времени тайм-аута. Аналогично, если вы пытаетесь передать или прочитать данные посредством сокета, поток приостановит выполнение до успешного завершения операции или до окончания времени тайм-аута.
В реальных приложениях желательно предоставить пользователям возможность прервать слишком затянувшийся процесс установления соединения с помощью сокета. Однако если поток блокирован, поскольку не получает ответа от сокета, вы не можете разблокировать его, вызвав метод interrupt().Для прерывания операции с сокетом используется класс SocketChannel, предоставляемый пакетом java.nio. Объект SocketChannel создается следующим образом:
1 |
SocketChannel channel = SocketChannel.open(new InetSocketAddress(host, port)); |
С каналом не связываются потоки. Вместо этого он предоставляет методы read() и write(), использующие объекты Buffer. Данные методы объявлены в интерфейсах ReadableByteChannel и WriteableByteChannel.
Если вы не хотите работать с буферами, можете использовать для чтения из SocketChannel объект Scanner. В классе Scanner предусмотрен конструктор с параметром ReadableByteChannel:
1 |
Scanner in = new Scanner(channel); |
Для формирования выходного потока на базе канала применяется статический метод Channels.newOutputStream();
1 |
OutputStream outStream = Channels.newOutputStream(channel); |
Вот и все, что необходимо сделать. Если поток будет прерван в процессе открытия соединения, чтения или записи, соответствующая операция завершится и сгенерирует исключение.
АТС для офиса – это отличное решение для организации офисной телефонной сети. Бесплатно подключив услугу «http://globalhome.su/content/article/office_ats/» Вы экономите на покупке дорогостоящего оборудования и избавляетесь от проблем по настройке и дальнейшем обслуживании. С виртуальной телефонной станцией Вы сможете быстро и фактически без расходов расширить телефонную сеть компании и существенно сократить затраты на связь.