Transcript PPS

Slide 1

Java Advanced

Работа с сетью


Slide 2

Содержание
Введение
 Адреса
 TCP-сокеты
 UDP-сокеты
 URI и URL
 Соединения
 Заключение


Georgiy Korneev

Java Advanced / Работа с сетью

2


Slide 3

Часть 1

Введение


Slide 4

Стек протоколов

Приложения
HTTP, FTP, ...

Интерпретация

Транспортные

Управление
потоком

TCP, UDP, ...

Сетевые
IP, ...

Сеть
(маршрутизация)

Соединения

Провод

Device Protocol, ...
Georgiy Korneev

Java Advanced / Работа с сетью

4


Slide 5

Internet Protocol


Идентификация
адресата



IP-адрес
Порт

Клиент

Сервер

Приложение 1

Порт 1
Порт 2

Приложение 2

Порт 3
Порт 4
Порт 5
...

Georgiy Korneev

Java Advanced / Работа с сетью

5


Slide 6

Transmission Control Protocol


Двусторонний
канал с гарантией
доставки

Компьютер 1

Компьютер 2
Georgiy Korneev

Java Advanced / Работа с сетью

6


Slide 7

User Datagram Protocol


Односторонний
канал без гарантии
доставки

Клиент

Сервер
Georgiy Korneev

Java Advanced / Работа с сетью

7


Slide 8

Часть 2

Адреса


Slide 9

Интернет-адрес


Представляет пару IP-адрес – доменное
имя

InetAddress

Inet4Address
Georgiy Korneev

Inet6Address

Java Advanced / Работа с сетью

9


Slide 10

Получение интернет-адресов


Фабричные методы класса InetAddress







InetAddress getByName(String) – любой по
доменному имени
InetAddress[] getAllByName(String) – все по
доменному имени
InetAddress getByAddress(byte[]) – по IP-адресу
InetAddress getByAddress(String, byte[]) – по
доменному имени и IP-адресу
InetAddress getLocalHost() – адрес текущего
компьютера

Georgiy Korneev

Java Advanced / Работа с сетью

10


Slide 11

Методы интернет-адресов


Работа с DNS





Работа с IP-адресом





String getHostName() – получение доменного
имени
String getCanonicalHostName() – получение
полного доменного имени

byte[] getAddress() – получение IP-адреса
String getHostAddress() – получение IP-адреса
в текстовой форме

Прочие


isReachable(int timeout) – проверка
достижимости

Georgiy Korneev

Java Advanced / Работа с сетью

11


Slide 12

Адрес порта


Представляет пару интернет-адрес – порт

SocketAddress

InetSocketAddress
Georgiy Korneev

Java Advanced / Работа с сетью

12


Slide 13

Создание адресов порта
 Конструкторы

класса
InetSocketAddress



InetSocketAddress(InetAddress, int port) – по
адресу и порту
InetSocketAddress(String, int port) – по
доменному имени и порту

Georgiy Korneev

Java Advanced / Работа с сетью

13


Slide 14

Методы адресов портов


Информация об адресе




getAddress() – получение интернет-адреса
getHostName() – получение имени
getPort() – получение порта

Georgiy Korneev

Java Advanced / Работа с сетью

14


Slide 15

Часть 3

TCP-сокеты


Slide 16

TCP-сокеты
Применяются для связи по протоколу TCP
 Образуют два независимых потока данных
 Классы






Socket – представляет TCP-соединение,
создает TCP-соединение на стороне
пользователя
ServerSocket – создает TCP-соединения на
стороне сервера

Georgiy Korneev

Java Advanced / Работа с сетью

16


Slide 17

Создание соединения на клиенте


Конструкторы класса Socket







Socket(InetAddress, port) – по интернет-адресу
Socket(String host, port) – по доменному имени
Socket(InetAddress, port, InetAddress, port) – по
заданному локальному адресу и порту
Socket() – без установления соединения

Методы класса Socket


connect(SocketAddress, timeout?) – установить
соединение

Georgiy Korneev

Java Advanced / Работа с сетью

17


Slide 18

Ввод-вывод
 Потоки
 getInputStream() – входящий поток
 getOutputStream() – исходящий поток


Закрытие потоков






shutdownInput() – закрытие входящего потока и
отбрасывание полученных данных
shutdownOutput() – закрытие исходящего
потока

Проверка потоков



isInputShutdown() – входящего потока
isOutputShutdown() – исходящего потока

Georgiy Korneev

Java Advanced / Работа с сетью

18


Slide 19

Получение информации


Об удаленном конце






getInetAddress() – интернет адрес
getPort() – порт
getRemoteSocketAddreess() – адрес порта

Об локальном конце




getLocalAddress() – интернет адрес
getLocalPort() – порт
getLocalSocketAddreess() – адрес порта

Georgiy Korneev

Java Advanced / Работа с сетью

19


Slide 20

Закрытие соединения
 Соединение закрывается
 Методом close() сокета
 Методом close() потоков сокета
 При закрытии с удаленной стороны

Georgiy Korneev

Java Advanced / Работа с сетью

20


Slide 21

Создание соединений на сервере


Конструкторы класса ServerSocket






ServerSocket(port) – по порту
ServerSocket(port, backlog) – по порту, с
указанием размера очереди
ServerSocket() – без привязки

Методы класса ServerSocket



bind(SocketAddress) – по адресу порта
bind(SocketAddress, backlog) – по адресу
порта, с указанием размера очереди

Georgiy Korneev

Java Advanced / Работа с сетью

21


Slide 22

Прием соединений на сервере


Методы класса ServerSocket





Socket accept() – ждет следующего клиента и
создает соединение
setSoTimeout() – установка времени ожидания
getSoTimeout() – получение времени ожидания
close() – окончание ожидание клиентов

Georgiy Korneev

Java Advanced / Работа с сетью

22


Slide 23

Часть 4

UDP-сокеты


Slide 24

UDP-сокеты



Применяются для связи по протоколу UDP
Классы



DatagramPacket – UDP пакет
DatagramSocket – UDP-сокет для приема и
отсылки пакетов

Georgiy Korneev

Java Advanced / Работа с сетью

24


Slide 25

Создание UDP-пакетов


Для приема




DatagramPacket(byte[], offset?, length) – по
буферу

Для отправки



DatagramPacket(byte[], offset?, length,
InetAddress, port) – по интернет-адресу и порту
DatagramPacket(byte[], offset?, length,
SocketAddress) – по адресу порта

Georgiy Korneev

Java Advanced / Работа с сетью

25


Slide 26

Операции с UDP-пакетами


Работа с данными






getData()/setData() – буфер данных
getOffset()/setOffset() – смещение данных
getLength()/setLength() – длина данных

Работа с адресами




getAddress()/setAddress() – интернет-адрес
getPort()/setPort() – порт
getSocketAddress()/setSocketAddress() – адрес
порта

Georgiy Korneev

Java Advanced / Работа с сетью

26


Slide 27

Создание UDP-сокета


Конструкторы класса DatagramSocket








DatagramSocket(port) – по порту
DatagramSocket(InetAddress, port) – по порту и
адресу
DatagramSocket(SocketAddress) – по адресу
порта
DatagramSocket() – без привязки

Методы класса DatagramSocket


bind(SocketAddress) – привязывает к адресу

Georgiy Korneev

Java Advanced / Работа с сетью

27


Slide 28

Прием и отсылка UDP-пакетов


Прием пакета




receive(DatagramPacket) – ожидает получения
пакета

Отсылка пакета


send(DatagramPacket) – отсылает пакет

Georgiy Korneev

Java Advanced / Работа с сетью

28


Slide 29

Часть 4

URI и URL


Slide 30

Uniform Resource Identifier



Идентифицирует ресурс
Общий URI




Иерархический URI




[scheme:]scheme-specific-part[#fragment]
[scheme:][//[user-info@]host[:port]][path][?query]
[#fragment]

Класс URI

Georgiy Korneev

Java Advanced / Работа с сетью

30


Slide 31

Создание URI


Конструкторы класса URI






Фабричные методы класса URI




create(String) – по строке

Из других объектов





URI(String) – по строке
URI(scheme, ssp, fragment) – из крупных частей
URI(sheme, userInfo, host, port, path, query,
fragment) – из мелких частей

file.toURI() – из дескриптора файла
url.toURI() – из URL

Исключение URISyntaxException

Georgiy Korneev

Java Advanced / Работа с сетью

31


Slide 32

Получение частей URI
getScheme()

scheme

getSchemeSpecificPart()

sheme-specific pat

getAuthority()

[user-info@]host[:port]

getUserInfo()

userInfo

getHost()

host

getPort()

port

getPath()

path

getQuery()

query

getFragment()

Georgiy Korneev

fragment
Java Advanced / Работа с сетью

32


Slide 33

Операции над URI


Нормализация




“Откладывание” от базового URI





URI resolve(URI base)
URI resolve(String base)

Взятие относительного URI




URI normalize() – нормалиовать URI

URI relativize(URI base)

Сравнение


equals(Object)

Georgiy Korneev

Java Advanced / Работа с сетью

33


Slide 34

Uniform Resource Locator
Указывает местоположение ресурса
 Подмножество иерархических URI
 Класс URL


Georgiy Korneev

Java Advanced / Работа с сетью

34


Slide 35

Создание URL


Конструкторы класса URL






Из других объектов





URL(String) – по строке
URL(protocol, host, file) – из крупных частей
URL(protocol, host, port, file, path, query,
fragment) – из мелких частей
file.toURL() – из дескриптора файла
uri.toURL() – из URI

Исключение MalformedURLException

Georgiy Korneev

Java Advanced / Работа с сетью

35


Slide 36

Часть 5

Соединения


Slide 37

Соединения


Позволяют оперировать с ресурсами,
заданными URL

URLConnection

HttpURLConnection
Georgiy Korneev

JarURLConnection

Java Advanced / Работа с сетью

37


Slide 38

Жизненный цикл соединения
1.

Открытие соединения


url.openConnection()

Установка свойств соединения
3. Установка соединения
2.



4.

Оперирование с соединением


5.

connect()
getInputStream()/getOutputStream()

Закрытие соединения


close()

Georgiy Korneev

Java Advanced / Работа с сетью

38


Slide 39

Поддерживаемые протоколы
http – HTTP-ресурс
 https – HTTPS-ресурс
 ftp – FTP-файл
 file – локальный файл
 jar – файл внутри Jar


Georgiy Korneev

Java Advanced / Работа с сетью

39


Slide 40

Часть 6

Заключение


Slide 41

Ссылки


Networking Fatures (guide) //
http://java.sun.com/j2se/1.5.0/docs/guide/net/
 Custom Networking (tutorial) //
http://java.sun.com/docs/books/tutorial/netwo
rking/index.html
 Uniform Resource Locators (URL) //
http://www.ietf.org/rfc/rfc1738.txt
 Uniform Resource Identifiers (URI) //
http://www.ietf.org/rfc/rfc2396.txt

Georgiy Korneev

Java Advanced / Работа с сетью

41


Slide 42

Вопросы

Georgiy Korneev

Java Advanced / Работа с сетью

42