Работа с сетью java advanced. 2georgiy korneevjava advanced / Работа с сетью...
Post on 20-Dec-2015
259 views
TRANSCRIPT
Java Advanced / Работа с сетью 2Georgiy Korneev
Содержание
ВведениеАдресаTCP-сокетыUDP-сокетыURI и URLСоединенияЗаключение
Java Advanced / Работа с сетью 4Georgiy Korneev
Стек протоколов
ПриложенияHTTP, FTP, ...
ТранспортныеTCP, UDP, ...
СетевыеIP, ...
СоединенияDevice Protocol, ...
Провод
Сеть (маршрутизация)
Управление потоком
Интерпретация
Java Advanced / Работа с сетью 5Georgiy Korneev
Internet Protocol
Идентификация адресата IP-адрес Порт
Сер
вер
Порт 1
Порт 2
Порт 3
Порт 4
Приложение 1
Приложение 2
Порт 5
...
Клиент
Java Advanced / Работа с сетью 6Georgiy Korneev
Transmission Control Protocol
Двусторонний канал с гарантией доставки Компьютер 1
Компьютер 2
Java Advanced / Работа с сетью 7Georgiy Korneev
User Datagram Protocol
Односторонний канал без гарантии доставки Клиент
Сервер
Java Advanced / Работа с сетью 9Georgiy Korneev
Интернет-адрес
Представляет пару IP-адрес – доменное имя
InetAddress
Inet4Address Inet6Address
Java Advanced / Работа с сетью 10Georgiy Korneev
Получение интернет-адресов
Фабричные методы класса InetAddress InetAddress getByName(String) – любой по
доменному имени InetAddress[] getAllByName(String) – все по
доменному имени InetAddress getByAddress(byte[]) – по IP-адресу InetAddress getByAddress(String, byte[]) – по
доменному имени и IP-адресу InetAddress getLocalHost() – адрес текущего
компьютера
Java Advanced / Работа с сетью 11Georgiy Korneev
Методы интернет-адресов
Работа с DNS String getHostName() – получение доменного
имени String getCanonicalHostName() – получение
полного доменного имениРабота с IP-адресом
byte[] getAddress() – получение IP-адреса String getHostAddress() – получение IP-адреса
в текстовой формеПрочие
isReachable(int timeout) – проверка достижимости
Java Advanced / Работа с сетью 12Georgiy Korneev
Адрес порта
Представляет пару интернет-адрес – порт
SocketAddress
InetSocketAddress
Java Advanced / Работа с сетью 13Georgiy Korneev
Создание адресов порта
Конструкторы класса InetSocketAddress InetSocketAddress(InetAddress, int port) – по
адресу и порту InetSocketAddress(String, int port) – по
доменному имени и порту
Java Advanced / Работа с сетью 14Georgiy Korneev
Методы адресов портов
Информация об адресе getAddress() – получение интернет-адреса getHostName() – получение имени getPort() – получение порта
Java Advanced / Работа с сетью 16Georgiy Korneev
TCP-сокеты
Применяются для связи по протоколу TCPОбразуют два независимых потока данныхКлассы
Socket – представляет TCP-соединение, создает TCP-соединение на стороне пользователя
ServerSocket – создает TCP-соединения на стороне сервера
Java Advanced / Работа с сетью 17Georgiy Korneev
Создание соединения на клиенте
Конструкторы класса Socket Socket(InetAddress, port) – по интернет-адресу Socket(String host, port) – по доменному имени Socket(InetAddress, port, InetAddress, port) – по
заданному локальному адресу и порту Socket() – без установления соединения
Методы класса Socket connect(SocketAddress, timeout?) – установить
соединение
Java Advanced / Работа с сетью 18Georgiy Korneev
Ввод-вывод
Потоки getInputStream() – входящий поток getOutputStream() – исходящий поток
Закрытие потоков shutdownInput() – закрытие входящего потока и
отбрасывание полученных данных shutdownOutput() – закрытие исходящего
потокаПроверка потоков
isInputShutdown() – входящего потока isOutputShutdown() – исходящего потока
Java Advanced / Работа с сетью 19Georgiy Korneev
Получение информации
Об удаленном конце getInetAddress() – интернет адрес getPort() – порт getRemoteSocketAddreess() – адрес порта
Об локальном конце getLocalAddress() – интернет адрес getLocalPort() – порт getLocalSocketAddreess() – адрес порта
Java Advanced / Работа с сетью 20Georgiy Korneev
Закрытие соединения
Соединение закрывается Методом close() сокета Методом close() потоков сокета При закрытии с удаленной стороны
Java Advanced / Работа с сетью 21Georgiy Korneev
Создание соединений на сервере
Конструкторы класса ServerSocket ServerSocket(port) – по порту ServerSocket(port, backlog) – по порту, с
указанием размера очереди ServerSocket() – без привязки
Методы класса ServerSocket bind(SocketAddress) – по адресу порта bind(SocketAddress, backlog) – по адресу
порта, с указанием размера очереди
Java Advanced / Работа с сетью 22Georgiy Korneev
Прием соединений на сервере
Методы класса ServerSocket Socket accept() – ждет следующего клиента и
создает соединение setSoTimeout() – установка времени ожидания getSoTimeout() – получение времени ожидания close() – окончание ожидание клиентов
Java Advanced / Работа с сетью 24Georgiy Korneev
UDP-сокеты
Применяются для связи по протоколу UDPКлассы
DatagramPacket – UDP пакет DatagramSocket – UDP-сокет для приема и
отсылки пакетов
Java Advanced / Работа с сетью 25Georgiy Korneev
Создание UDP-пакетов
Для приема DatagramPacket(byte[], offset?, length) – по
буферу
Для отправки DatagramPacket(byte[], offset?, length,
InetAddress, port) – по интернет-адресу и порту DatagramPacket(byte[], offset?, length,
SocketAddress) – по адресу порта
Java Advanced / Работа с сетью 26Georgiy Korneev
Операции с UDP-пакетами
Работа с данными getData()/setData() – буфер данных getOffset()/setOffset() – смещение данных getLength()/setLength() – длина данных
Работа с адресами getAddress()/setAddress() – интернет-адрес getPort()/setPort() – порт getSocketAddress()/setSocketAddress() – адрес
порта
Java Advanced / Работа с сетью 27Georgiy Korneev
Создание UDP-сокета
Конструкторы класса DatagramSocket DatagramSocket(port) – по порту DatagramSocket(InetAddress, port) – по порту и
адресу DatagramSocket(SocketAddress) – по адресу
порта DatagramSocket() – без привязки
Методы класса DatagramSocket bind(SocketAddress) – привязывает к адресу
Java Advanced / Работа с сетью 28Georgiy Korneev
Прием и отсылка UDP-пакетов
Прием пакета receive(DatagramPacket) – ожидает получения
пакета
Отсылка пакета send(DatagramPacket) – отсылает пакет
Java Advanced / Работа с сетью 30Georgiy Korneev
Uniform Resource Identifier
Идентифицирует ресурсОбщий URI
[scheme:]scheme-specific-part[#fragment]
Иерархический URI [scheme:][//[user-info@]host[:port]][path][?query]
[#fragment]
Класс URI
Java Advanced / Работа с сетью 31Georgiy Korneev
Создание 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
Java Advanced / Работа с сетью 32Georgiy Korneev
Получение частей URI
getScheme() scheme
getSchemeSpecificPart() sheme-specific pat
getAuthority() [user-info@]host[:port]
getUserInfo() userInfo
getHost() host
getPort() port
getPath() path
getQuery() query
getFragment() fragment
Java Advanced / Работа с сетью 33Georgiy Korneev
Операции над URI
Нормализация URI normalize() – нормалиовать URI
“Откладывание” от базового URI URI resolve(URI base) URI resolve(String base)
Взятие относительного URI URI relativize(URI base)
Сравнение equals(Object)
Java Advanced / Работа с сетью 34Georgiy Korneev
Uniform Resource Locator
Указывает местоположение ресурсаПодмножество иерархических URIКласс URL
Java Advanced / Работа с сетью 35Georgiy Korneev
Создание URL
Конструкторы класса URL URL(String) – по строке URL(protocol, host, file) – из крупных частей URL(protocol, host, port, file, path, query,
fragment) – из мелких частей
Из других объектов file.toURL() – из дескриптора файла uri.toURL() – из URI
Исключение MalformedURLException
Java Advanced / Работа с сетью 37Georgiy Korneev
Соединения
Позволяют оперировать с ресурсами, заданными URL
URLConnection
HttpURLConnection JarURLConnection
Java Advanced / Работа с сетью 38Georgiy Korneev
Жизненный цикл соединения
1. Открытие соединения url.openConnection()
2. Установка свойств соединения3. Установка соединения
connect()
4. Оперирование с соединением getInputStream()/getOutputStream()
5. Закрытие соединения close()
Java Advanced / Работа с сетью 39Georgiy Korneev
Поддерживаемые протоколы
http – HTTP-ресурсhttps – HTTPS-ресурс ftp – FTP-файл file – локальный файл jar – файл внутри Jar
Java Advanced / Работа с сетью 41Georgiy Korneev
Ссылки
Networking Fatures (guide) // http://java.sun.com/j2se/1.5.0/docs/guide/net/
Custom Networking (tutorial) // http://java.sun.com/docs/books/tutorial/networking/index.html
Uniform Resource Locators (URL) // http://www.ietf.org/rfc/rfc1738.txt
Uniform Resource Identifiers (URI) // http://www.ietf.org/rfc/rfc2396.txt