
- •JAVA-ТЕХНОЛОГИЯ
- •Сетевое программирование на Java (java.net)
- •Уровни сетевых протоколов
- •IP-адрес (InetAddress)
- •Пример использования
- •URL-адрес и обращение по URL (URLConnection)
- •Структура URL
- •Пример: Разбор URL
- •Пример URL-коннекции:
- •Пример URL-коннекции ( 2 / 2)
- •Комментарии к примеру URL-коннекции
- •Сокеты (sockets)
- •Пример сокетного соединения с whois-сервером internic.net
- •Запуск приложения WhoIs и его вывод
- •Комментарии к примеру WhoIs
- •Серверные сокеты (ServerSocket)
- •Обзор других возможностей java.net
- •Новые сетевые возможности Java в JDK 1.4

JAVA-ТЕХНОЛОГИЯ
Сафонов Владимир Олегович
Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)
Email: vosafonov@gmail.com
Лекция 12

Сетевое программирование на Java (java.net)
Возможности Java для работы в сети:
Базовые средства создания Internet-приложений (java.net) : поддержка TCP/IP- и UDP-протоколов, сокетов (sockets), IP-
multicast соединений; http, ftp, email и более “старых” протоколов Internet: whois, finger, gopher (Internet шире, чем WWW)
Java позволяет создать приложение всего из нескольких строк для работы в Internet, без каких-либо специальных настроек, имея лишь JDK и компьютер, подключаемый к Internet через модем (dial-up connection)
Средства создания апплетов (java.applet) – клиентских приложений, “проигрываемых” с помощью браузеров
Средства создания сервлетов (javax.servlet) – серверных приложений для разработки Web-серверов
Средства поддержки распределенного программирования в стандарте CORBA (Common Object Request Broker Architecture)
– org.omg.CORBA, javax.rmi, javax.rmi.CORBA
Java – универсальный язык сетевого программирования
(C) В.О. Сафонов. 2013

Уровни сетевых протоколов
(C) В.О. Сафонов. 2013

IP-адрес (InetAddress)
IP-адрес хоста (host) – компьютера в сети Internet – имеет вид: N1.N2.N3.N4, где все четыре числа – в диапазоне от 0 до 255
java.net поддерживает понятие IP-адреса классом InetAddress. Его основные возможности (конструкторов нет, вместо них –
factory methods) :
-InetAddress.getLocalHost() – выдает IP-адрес локальной машины
-InetAddress.getByName(String hostName) – определяет IP- адрес хоста по его доменному имени, например, www.spbu.ru
-InetAddress.getAllByName(String hostname) – выдает массив всех IP-адресов хоста
(все три static-метода могут бросать UnknownHostException)
- addr.isMulticastAddress() – логическое свойство: “является IP multicast – адресом”
- addr.toString() – преобразование в строку
(C) В.О. Сафонов. 2013

Пример использования
InetAddress: локальный и удаленный IP-адрес
import java.net.*;
public class JavaNetTest {
public static void main(String[] args)
{
InetAddress addr; try {
addr = InetAddress.getLocalHost(); System.out.println(addr);
addr = InetAddress.getByName("www.spbu.ru"); System.out.println(addr);
} catch (Exception e) { System.err.println("JavaNetTest: exception:" + e);
}
}// main
}// JavaNetTest
(C) В.О. Сафонов. 2013

URL-адрес и обращение по URL (URLConnection)
Класс URL – представление Web-ссылки в java.net:
URL url = new URL(urlString); - конструктор класса URL; может бросать MalformedURLException при неверной urlString
Класс URLConnection позволяет установить связь с URL, считывать его свойства (например, content-type), определяемые спецификацией http- протокола, и открывать входной поток для чтения содержимого HTML- документа в текстовой форме и (если позволяет протокол) выходной поток для передачи командной строки Web-серверу по URL-адресу:
-getContentType() – тип содержимого (в виде строки)
-getContentEncoding() – кодировка (в виде строки) и т.д.;
-getHeaderField(int n) , getHeaderField(String s) – выбор значения поля заголовка по его номеру или имени (в виде строки)
-FileInputStream in = urlConnection.getInputStream(); – открытие входного потока; аналогично – getOutputStream()
-чтение из входного потока (java.io) :
int c = in.read(); // c == -1 => конец входного потока (char) c - текущий символ, прочтенный из потока
(C) В.О. Сафонов. 2013

Структура URL
(C) В.О. Сафонов. 2013

Пример: Разбор URL
(из Java Tutorial)
import java.net.*; import java.io.*;
public class ParseURL {
public static void main(String[] args) throws Exception
{ URL aURL = new URL("http://java.sun.com:80/docs/books/" + "tutorial/index.html#DOWNLOADING");
System.out.println("protocol = " + aURL.getProtocol()); System.out.println("host = " + aURL.getHost()); System.out.println("filename = " + aURL.getFile()); System.out.println("port = " + aURL.getPort()); System.out.println("ref = " + aURL.getRef());
}
}
Вывод программы: protocol = http
host = java.sun.com
filename = /docs/books/tutorial/index.html
port = 80
(C) В.О. Сафонов.
ref = DOWNLOADING
2013

Пример URL-коннекции:
чтение свойств и текста HTML ( 1 / 2)
import java.net.*; import java.io.*;
public class URLConnectionTest {
public static void main(String[] args)
{
int c; URL url; try {
url = new URL("http://www.spbu.ru");
System.out.println("URL: " + url);
URLConnection connection = url.openConnection();
System.out.println("Сonnection with host:“ + url.getHost());
System.out.println("Content type: " + connection.getContentType());
(C) В.О. Сафонов. 2013

Пример URL-коннекции ( 2 / 2)
int len = connection.getContentLength(); System.out.println("Content length= " + len); InputStream in = connection.getInputStream(); while ((c = in.read()) != -1) {
System.out.print((char) c);
}
in.close();
} catch (Exception e) {
System.err.println("URLConnectionTest: exception occurred: " + e);
}
}// main
}// URLConnectionTest
(C) В.О. Сафонов. 2013