Программирование на java, осень 2016: Разработка сетевых...
TRANSCRIPT
![Page 1: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/1.jpg)
Разработка сетевых приложений на Java
Алексей Владыкин
5 декабря 2016
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 1 / 21
![Page 2: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/2.jpg)
1 Как компьютеры общаются между собой?
2 Сокеты
3 URL и URI
4 Пишем свой HTTP-сервер
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 2 / 21
![Page 3: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/3.jpg)
Как компьютеры общаются между собой?
Стек протоколов:Прикладной уровень(HTTP, FTP, SSH, . . . )Транспортный уровень(TCP, UDP, . . . )Сетевой уровеньКанальный уровень
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 3 / 21
![Page 4: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/4.jpg)
Как компьютеры общаются между собой?
TCP
Transmission Control Protocol
Протокол транспортного уровняС установлением соединенияС гарантиями доставки и порядка
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 4 / 21
![Page 5: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/5.jpg)
Как компьютеры общаются между собой?
UDP
User Datagram Protocol
Протокол транспортного уровняБез установления соединенияБез гарантий доставки и порядкаНо зато минимизируются задержки
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 5 / 21
![Page 6: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/6.jpg)
Как компьютеры общаются между собой?
HTTP
Request:
GET / HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0)
Gecko/20100101 Firefox/50.0
Response:
HTTP/1.1 200 OKContent-Type: text/html
<h1>Hello world</h1>
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 6 / 21
![Page 7: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/7.jpg)
Как компьютеры общаются между собой?
Поддержка в Java
TCP:java.net.Socket и java.net.ServerSocket
UDP:java.net.DatagramSocket
HTTP:java.net.URL (но лучше сторонние библиотеки)
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 7 / 21
![Page 8: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/8.jpg)
Сокеты
Низкоуровневый API для пересылки байтов по сети
Поддерживаются протоколы TCP и UDP
Поддерживается адресация IPv4 (213.180.204.3)и IPv6 (2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d)
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 8 / 21
![Page 9: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/9.jpg)
Сокеты
java.net.DatagramSocket (клиент)
try (DatagramSocket s = new DatagramSocket ()) {DatagramPacket p = new DatagramPacket(
buf , buf.length , remoteAddress );s.send(p);
}
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 9 / 21
![Page 10: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/10.jpg)
Сокеты
java.net.DatagramSocket (сервер)
try (DatagramSocket s = new DatagramSocket(port )){byte[] buf = new byte [1024];DatagramPacket p = new DatagramPacket(
buf , buf.length );s.receive(p);
}
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 10 / 21
![Page 11: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/11.jpg)
Сокеты
java.net.Socket
Клиентский сокет, устанавливает TCP соединение с сервером
Socket socket = new Socket("localhost", 11111);
OutputStream os = socket.getOutputStream ();os.write(requestBytes );os.flush ();
InputStream is = socket.getInputStream ();is.read(responseBytes );
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 11 / 21
![Page 12: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/12.jpg)
Сокеты
java.net.ServerSocket
Серверный сокет, ожидает подключений от клиентов
ServerSocket server = new ServerSocket (11111);Socket socket = server.accept ();
InputStream is = socket.getInputStream ();is.read(requestBytes );
OutputStream os = socket.getOutputStream ();os.write(responseBytes );os.flush ();
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 12 / 21
![Page 13: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/13.jpg)
URL и URI
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 13 / 21
![Page 14: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/14.jpg)
URL и URI
java.net.URI
Uniform Resource Identifier, RFC 3986
Примеры:mailto:[email protected]:isbn:096139210xhttp://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28
Синтаксические операции:разбор на компонентыresolverelativize
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 14 / 21
![Page 15: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/15.jpg)
URL и URI
java.net.URL
Uniform Resource Locator, RFC 1738
Примеры:http://java.sun.com/j2se/1.3/file:/home/av/projects/
Поддерживает операции доступа:openConnection(), openStream()
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 15 / 21
![Page 16: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/16.jpg)
Пишем свой HTTP-сервер
HTTP-сервер на «голых» сокетах
См. пример
Ручной разбор заголовковОтдельный Thread на каждого клиента – организуем вручную
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 16 / 21
![Page 17: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/17.jpg)
Пишем свой HTTP-сервер
HTTP-сервер на Netty
См. пример
Особенности протокола HTTP и многопоточность скрыты NettyПишем только бизнес-логику
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 17 / 21
![Page 18: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/18.jpg)
Пишем свой HTTP-сервер
Сервлеты
Сервлет — Java-класс, унаследованный отjavax.servlet.http.HttpServlet
Работает под управлением контейнера сервлетов (IoC)Tomcat, Jetty, . . .
Часть Java Enterprise Edition
См. пример
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 18 / 21
![Page 19: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/19.jpg)
Пишем свой HTTP-сервер
Сервлеты
Требуется конфигурационный файл WEB-INF/web.xmlЛибо аннотация @WebServlet
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 19 / 21
![Page 20: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/20.jpg)
Пишем свой HTTP-сервер
Сервлеты
Особенности HTTP и организацию многопоточности берет насебя контейнер сервлетовПоддержка пользовательской сессии
В одном war’е может быть много сервлетовВ одном контейнере может быть развернуто много war’овКонтейнер обеспечивает мониторинг и управление
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 20 / 21
![Page 21: Программирование на Java, осень 2016: Разработка сетевых приложений на Java](https://reader034.vdocuments.net/reader034/viewer/2022042600/587c5f981a28ab633c8b59cf/html5/thumbnails/21.jpg)
Пишем свой HTTP-сервер
JSP
HTML с элементами Java-кодаКомпилируются в Java-классы специальным сервлетом
Алексей Владыкин Разработка сетевых приложений 5 декабря 2016 21 / 21