Работа с сетью Java Advanced
2Georgiy KorneevJava Advanced / Работа с сетью Содержание Введение Адреса TCP-сокеты UDP-сокеты URI и URL Соединения Заключение
Введение Часть 1
4Georgiy KorneevJava Advanced / Работа с сетью Стек протоколов
5Georgiy KorneevJava Advanced / Работа с сетью Internet Protocol Идентификация адресата IP-адрес Порт
6Georgiy KorneevJava Advanced / Работа с сетью Transmission Control Protocol Двусторонний канал с гарантией доставки
7Georgiy KorneevJava Advanced / Работа с сетью User Datagram Protocol Односторонний канал без гарантии доставки
Адреса Часть 2
9Georgiy KorneevJava Advanced / Работа с сетью Интернет-адрес Представляет пару IP-адрес – доменное имя
10Georgiy KorneevJava Advanced / Работа с сетью Получение интернет-адресов Фабричные методы класса InetAddress InetAddress getByName(String) – любой по доменному имени InetAddress[] getAllByName(String) – все по доменному имени InetAddress getByAddress(byte[]) – по IP-адресу InetAddress getByAddress(String, byte[]) – по доменному имени и IP-адресу InetAddress getLocalHost() – адрес текущего компьютера
11Georgiy KorneevJava Advanced / Работа с сетью Методы интернет-адресов Работа с DNS String getHostName() – получение доменного имени String getCanonicalHostName() – получение полного доменного имени Работа с IP-адресом byte[] getAddress() – получение IP-адреса String getHostAddress() – получение IP-адреса в текстовой форме Прочие isReachable(int timeout) – проверка достижимости
12Georgiy KorneevJava Advanced / Работа с сетью Адрес порта Представляет пару интернет-адрес – порт
13Georgiy KorneevJava Advanced / Работа с сетью Создание адресов порта Конструкторы класса InetSocketAddress InetSocketAddress(InetAddress, int port) – по адресу и порту InetSocketAddress(String, int port) – по доменному имени и порту
14Georgiy KorneevJava Advanced / Работа с сетью Методы адресов портов Информация об адресе getAddress() – получение интернет-адреса getHostName() – получение имени getPort() – получение порта
TCP-сокеты Часть 3
16Georgiy KorneevJava Advanced / Работа с сетью TCP-сокеты Применяются для связи по протоколу TCP Образуют два независимых потока данных Классы Socket – представляет TCP-соединение, создает TCP-соединение на стороне пользователя ServerSocket – создает TCP-соединения на стороне сервера
17Georgiy KorneevJava Advanced / Работа с сетью Создание соединения на клиенте Конструкторы класса Socket Socket(InetAddress, port) – по интернет-адресу Socket(String host, port) – по доменному имени Socket(InetAddress, port, InetAddress, port) – по заданному локальному адресу и порту Socket() – без установления соединения Методы класса Socket connect(SocketAddress, timeout?) – установить соединение
18Georgiy KorneevJava Advanced / Работа с сетью Ввод-вывод Потоки getInputStream() – входящий поток getOutputStream() – исходящий поток Закрытие потоков shutdownInput() – закрытие входящего потока и отбрасывание полученных данных shutdownOutput() – закрытие исходящего потока Проверка потоков isInputShutdown() – входящего потока isOutputShutdown() – исходящего потока
19Georgiy KorneevJava Advanced / Работа с сетью Получение информации Об удаленном конце getInetAddress() – интернет адрес getPort() – порт getRemoteSocketAddreess() – адрес порта Об локальном конце getLocalAddress() – интернет адрес getLocalPort() – порт getLocalSocketAddreess() – адрес порта
20Georgiy KorneevJava Advanced / Работа с сетью Закрытие соединения Соединение закрывается Методом close() сокета Методом close() потоков сокета При закрытии с удаленной стороны
21Georgiy KorneevJava Advanced / Работа с сетью Создание соединений на сервере Конструкторы класса ServerSocket ServerSocket(port) – по порту ServerSocket(port, backlog) – по порту, с указанием размера очереди ServerSocket() – без привязки Методы класса ServerSocket bind(SocketAddress) – по адресу порта bind(SocketAddress, backlog) – по адресу порта, с указанием размера очереди
22Georgiy KorneevJava Advanced / Работа с сетью Прием соединений на сервере Методы класса ServerSocket Socket accept() – ждет следующего клиента и создает соединение setSoTimeout() – установка времени ожидания getSoTimeout() – получение времени ожидания close() – окончание ожидание клиентов
UDP-сокеты Часть 4
24Georgiy KorneevJava Advanced / Работа с сетью UDP-сокеты Применяются для связи по протоколу UDP Классы DatagramPacket – UDP пакет DatagramSocket – UDP-сокет для приема и отсылки пакетов
25Georgiy KorneevJava Advanced / Работа с сетью Создание UDP-пакетов Для приема DatagramPacket(byte[], offset?, length) – по буферу Для отправки DatagramPacket(byte[], offset?, length, InetAddress, port) – по интернет-адресу и порту DatagramPacket(byte[], offset?, length, SocketAddress) – по адресу порта
26Georgiy KorneevJava Advanced / Работа с сетью Операции с UDP-пакетами Работа с данными getData()/setData() – буфер данных getOffset()/setOffset() – смещение данных getLength()/setLength() – длина данных Работа с адресами getAddress()/setAddress() – интернет-адрес getPort()/setPort() – порт getSocketAddress()/setSocketAddress() – адрес порта
27Georgiy KorneevJava Advanced / Работа с сетью Создание UDP-сокета Конструкторы класса DatagramSocket DatagramSocket(port) – по порту DatagramSocket(InetAddress, port) – по порту и адресу DatagramSocket(SocketAddress) – по адресу порта DatagramSocket() – без привязки Методы класса DatagramSocket bind(SocketAddress) – привязывает к адресу
28Georgiy KorneevJava Advanced / Работа с сетью Прием и отсылка UDP-пакетов Прием пакета receive(DatagramPacket) – ожидает получения пакета Отсылка пакета send(DatagramPacket) – отсылает пакет
URI и URL Часть 4
30Georgiy KorneevJava Advanced / Работа с сетью Uniform Resource Identifier Идентифицирует ресурс Общий URI [scheme:]scheme-specific-part[#fragment] Иерархический URI [#fragment] Класс URI
31Georgiy KorneevJava Advanced / Работа с сетью Создание URI Конструкторы класса URI URI(String) – по строке URI(scheme, ssp, fragment) – из крупных частей URI(sheme, userInfo, host, port, path, query, fragment) – из мелких частей Фабричные методы класса URI create(String) – по строке Из других объектов file.toURI() – из дескриптора файла url.toURI() – из URL Исключение URISyntaxException
32Georgiy KorneevJava Advanced / Работа с сетью Получение частей URI getScheme()scheme getSchemeSpecificPart()sheme-specific pat getUserInfo()userInfo getHost()host getPort()port getPath()path getQuery()query getFragment()fragment
33Georgiy KorneevJava Advanced / Работа с сетью Операции над URI Нормализация URI normalize() – нормалиовать URI Откладывание от базового URI URI resolve(URI base) URI resolve(String base) Взятие относительного URI URI relativize(URI base) Сравнение equals(Object)
34Georgiy KorneevJava Advanced / Работа с сетью Uniform Resource Locator Указывает местоположение ресурса Подмножество иерархических URI Класс URL
35Georgiy KorneevJava Advanced / Работа с сетью Создание URL Конструкторы класса URL URL(String) – по строке URL(protocol, host, file) – из крупных частей URL(protocol, host, port, file, path, query, fragment) – из мелких частей Из других объектов file.toURL() – из дескриптора файла uri.toURL() – из URI Исключение MalformedURLException
Соединения Часть 5
37Georgiy KorneevJava Advanced / Работа с сетью Соединения Позволяют оперировать с ресурсами, заданными URL
38Georgiy KorneevJava Advanced / Работа с сетью Жизненный цикл соединения 1. Открытие соединения url.openConnection() 2. Установка свойств соединения 3. Установка соединения connect() 4. Оперирование с соединением getInputStream()/getOutputStream() 5. Закрытие соединения close()
39Georgiy KorneevJava Advanced / Работа с сетью Поддерживаемые протоколы http – HTTP-ресурс https – HTTPS-ресурс ftp – FTP-файл file – локальный файл jar – файл внутри Jar
Заключение Часть 6
41Georgiy KorneevJava Advanced / Работа с сетью Ссылки Networking Fatures (guide) // Custom Networking (tutorial) // rking/index.html rking/index.html Uniform Resource Locators (URL) // Uniform Resource Identifiers (URI) //
42Georgiy KorneevJava Advanced / Работа с сетью Вопросы