Мегаобучалка Главная | О нас | Обратная связь


Серверный сокет ServerSocket



2018-07-06 495 Обсуждений (0)
Серверный сокет ServerSocket 0.00 из 5.00 0 оценок




Для создания серверного сокета ServerSocket можно использовать один из следующих конструкторов :

publicServerSocket()throwsIOException;publicServerSocket(int port)throwsIOException;publicServerSocket(int port,int backlog)throwsIOException;publicServerSocket(int port,int backlog,InetAddress bindAddr)throwsIOException;

Первым параметров в конструктор необходимо передать порт port, который будет привязан к серверному сокету. Если порт занят или запрещён к использованию политикой безопасности компьютера, то вызывается исключение IOException. Если значение передавамого порта равно 0, то система сама выделит номер свободного порта. Значение полученного порта можно узнать через вызов функции getLocalPort(). Несвязанный серверный сокет ServerSocket() необходимо «связывать» с IP-адресом и портом (см. ниже метод bind).

Параметр backlog устанавливает максимальное количество клиентских подключений. Если количество подключений достигло предела, то следующему клиенту в подключении будет отказано.

Для работы с IP-адресами в библиотеке Java имеется класс java.net.InetAddress, который используется в третьем конструкторе ServerSocket. С помощью InetAddress можно определить адрес IP локального узла, а также адреса удаленного узла, заданного доменным именем. Наиболеераспространенныеметодыкласса InetAddress :

publicstaticInetAddress getLocalHost();publicstaticInetAddress getByName(String host);publicstaticInetAddress[] getAllByName(String host);publicbyte[] getAddress();publicString toString();publicString getHostName();publicboolean equals(Object obj);

При разработке сетевых приложений на начальном этапе, как правило, используют один компьютер (host). Для этого создатели протокола IP определили специальный адрес, называемый localhost - это IP-адрес "локальной заглушки (local loopback)" для работы приложений без использования сети. Общий порядок получения этого адреса в Java следующий :

InetAddress address =InetAddress.getByName(null);address =InetAddress.getByName("localhost");

Если методу getByName() передать значение null, то по умолчанию будет использоваться localhost. Cодержимым InetAddress нельзя манипулировать. Для создания InetArddress можно использовать один из перегруженных статических методов класса getByName(), getAllByName() или getLocalHost().

Методы серверного сокета

В таблице представлены наиболее часто используемые методы серверного сокета ServerSocket.

Метод Описание
Socket accept() Ожидание подключения клиента
void bind(SocketAddress endpoint) Связывание ServerSocket c определенным адресом (IP-адрес и порт)
void close() Закрытие сокета
ServerSocketChannel getChannel() Получение объекта ServerSocketChannel, связанного с сокетом
InetAddress getInetAddress() Получение локального адреса сокета сервера
int getLocalPort() Получение номера порта, который серверный сокет слушает
SocketAddress getLocalSocketAddress() Получение адреса серверного сокета в виде объекта SocketAddress
int getReceiveBufferSize() Получение размера буфера серверного сокета
boolean isClosed() Проверка, закрыт ли серверный сокет
void setReceiveBufferSize(int size) Определение размера буфера серверного сокета

После создания в приложении серверного сокета ServerSocket необходимо вызвать функцию accept(), которая переводит приложение в режим ожидания подключения клиента. Дальнейший код не выполняется, пока клиент не подключится. Как только клиент подключается функция возвращает объект класса java.net.Socket, который следует использовать для взаимодействия сервера с клиентом.

Клиентский сокет Socket

Коиентский сокет Socket можно создать с использованием одного из следующих конструкторов :

publicSocket()publicSocket(String host,int port)publicSocket(InetAddress address,int port)

В строковой константе host можно указать как IP адрес сервера, так и его DNS имя. При этом программа автоматически выберет свободный порт на локальном компьютере и свяжет его с сокетом. При этом могут быть вызваны одно из двух видов исключений, связанного с неизвестным адресом хоста (в сети компьютер не будет найден) или отсутствием связи с этим сокетом.

Класс Socket имеет один интересный метод setSoTimeout :

publicvoid setSoTimeout(int timeout)throwsSocketException

Метод setSoTimeout устанавливает время ожидания (timeout) для работы с сокетом. Если в течение этого времени никаких действий с сокетом не произведено (получение и отправка данных), то он самоликвидируется. Время задаётся в секундах, при установке timeout равным 0 сокет становится "вечным".

События и слушатели

Событие Event - это объект, описывающий изменение состояния источника, с которым оно связано. Примером события, в котором участвует пользователь, являются нажатие кнопки, выбор элемента из списка, ввод символа с клавиатуры и т.д. Событие может происходить и без участия пользователя при использовании таймера.

Слушатель Listener - это уведомляемый о некотором событии объект. Чтобы слушатель смог реагировать на определенное событие источника он должен быть им зарегистрирован, т.е. подключен к источнику. Listenerдолжен реализовывать определенные методы для получения и обработки уведомлений о событии.

Listener находится в постоянном ожидании, пока в источнике, в котором он зарегистрирован, не наступит соответствующее событие, при возникновении которого слушатель получает управление. Также слушателю передается объект события (источник), чтобы он смог правильно на него отреагировать. Таким образом, источник вызывает метод-обработчик события, определенный в классе, являющемся блоком прослушивания. В качестве блоков прослушивания иногда используют внутренние классы. В этом случае в методе, регистрирующем блок прослушивания в качестве параметра, используется объект этого внутреннего класса.

После обработки события слушатель возвращает управление. Таким образом, для обработки события вызываются только те слушатели, которые на него "подписались", т.е. были зарегистрированы источником.



2018-07-06 495 Обсуждений (0)
Серверный сокет ServerSocket 0.00 из 5.00 0 оценок









Обсуждение в статье: Серверный сокет ServerSocket

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (495)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)