Разработка сетевых приложений на Java · 1 Сокеты 2...
Transcript of Разработка сетевых приложений на Java · 1 Сокеты 2...
Разработка сетевых приложений на Java
Алексей Владыкин
9 декабря 2013
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 1 / 19
1 Сокеты
2 Сериализация
3 URL и URI
4 Netty
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 2 / 19
Сокеты
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 3 / 19
Сокеты
Низкоуровневый API для пересылки байтов по сети
Поддерживаются протоколы TCP и UDP
Поддерживается адресация IPv4 (213.180.204.3)и IPv6 (2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d)
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 4 / 19
Сокеты
java.net.DatagramSocket (клиент)
try (DatagramSocket s = new DatagramSocket ()) {DatagramPacket p = new DatagramPacket(
buf , buf.length , remoteAddress );s.send(p);
}
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 5 / 19
Сокеты
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
Сокеты
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
Сокеты
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
Сериализация
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 9 / 19
Сериализация
Стандартный механизм сохранения и передачи состоянияобъектов
Serializable и Externalizable
ObjectOutput и ObjectInput
Демо
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 10 / 19
URL и URI
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 11 / 19
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
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
Netty
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 14 / 19
Netty
Удобная библиотека для разработки сетевых приложений
Инкапсулирует низкоуровневую работу с сетью и потоками
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 15 / 19
Netty
Channel
org.jboss.netty.channel.Channel
Аналог java.net.Socket
Представляет конкретное подключение
Позволяет писать и читать данные (асинхронно)
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 16 / 19
Netty
ChannelPipeline
org.jboss.netty.channel.ChannelPipeline
Цепочка обработчиков ChannelHandler, связанная с каналом
Upstream — направление из сети в программу,downstream — направление из программы в сеть
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 17 / 19
Netty
ChannelEvent
org.jboss.netty.channel.ChannelEvent
Событие, связанное с каналом
Upstream: messageReceived, exceptionCaught, channelOpen,channelClosed
Downstream: write, connect, disconnect, close
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 18 / 19
Netty
ChannelFuture
org.jboss.netty.channel.ChannelFuture
Аналог java.util.concurrent.Future
Представляет результат асинхронной операции
Алексей Владыкин Разработка сетевых приложений 9 декабря 2013 19 / 19