Разработка сетевых приложений на Java · 1 Сокеты 2...

19
Разработка сетевых приложений на Java Алексей Владыкин 9 декабря 2013 Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 1 / 19

Transcript of Разработка сетевых приложений на Java · 1 Сокеты 2...

Page 1: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Разработка сетевых приложений на Java

Алексей Владыкин

9 декабря 2013

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 1 / 19

Page 2: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

1 Сокеты

2 Сериализация

3 URL и URI

4 Netty

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 2 / 19

Page 3: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сокеты

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 3 / 19

Page 4: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сокеты

Низкоуровневый API для пересылки байтов по сети

Поддерживаются протоколы TCP и UDP

Поддерживается адресация IPv4 (213.180.204.3)и IPv6 (2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d)

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 4 / 19

Page 5: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сокеты

java.net.DatagramSocket (клиент)

try (DatagramSocket s = new DatagramSocket ()) {DatagramPacket p = new DatagramPacket(

buf , buf.length , remoteAddress );s.send(p);

}

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 5 / 19

Page 6: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сокеты

java.net.DatagramSocket (сервер)

try (DatagramSocket s = new DatagramSocket(port )){byte[] buf = new byte [1024];DatagramPacket p = new DatagramPacket(

buf , buf.length );s.receive(p);

}

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 6 / 19

Page 7: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сокеты

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 );

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 7 / 19

Page 8: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сокеты

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 ();

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 8 / 19

Page 9: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сериализация

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 9 / 19

Page 10: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Сериализация

Стандартный механизм сохранения и передачи состоянияобъектов

Serializable и Externalizable

ObjectOutput и ObjectInput

Демо

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 10 / 19

Page 11: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

URL и URI

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 11 / 19

Page 12: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

URL и URI

java.net.URI

Uniform Resource Identifier

Примеры:mailto:[email protected]:isbn:096139210xhttp://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28

Синтаксические операции: resolve, relativize

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 12 / 19

Page 13: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

URL и URI

java.net.URL

Uniform Resource Locator

Примеры:http://java.sun.com/j2se/1.3/file:/home/av/projects/

Поддерживает операции доступа:openConnection(), openStream()

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 13 / 19

Page 14: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Netty

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 14 / 19

Page 15: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Netty

Удобная библиотека для разработки сетевых приложений

Инкапсулирует низкоуровневую работу с сетью и потоками

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 15 / 19

Page 16: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Netty

Channel

org.jboss.netty.channel.Channel

Аналог java.net.Socket

Представляет конкретное подключение

Позволяет писать и читать данные (асинхронно)

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 16 / 19

Page 17: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Netty

ChannelPipeline

org.jboss.netty.channel.ChannelPipeline

Цепочка обработчиков ChannelHandler, связанная с каналом

Upstream — направление из сети в программу,downstream — направление из программы в сеть

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 17 / 19

Page 18: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Netty

ChannelEvent

org.jboss.netty.channel.ChannelEvent

Событие, связанное с каналом

Upstream: messageReceived, exceptionCaught, channelOpen,channelClosed

Downstream: write, connect, disconnect, close

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 18 / 19

Page 19: Разработка сетевых приложений на Java · 1 Сокеты 2 Сериализация 3 URLиURI 4 Netty Алексей Владыкин Разработка

Netty

ChannelFuture

org.jboss.netty.channel.ChannelFuture

Аналог java.util.concurrent.Future

Представляет результат асинхронной операции

Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 19 / 19