Язык программирования Java Андрей Дмитриев ©2009
Возможности пакета java.net Клиент и сервер Потоки данных Обзор Java классов Применение к WWW
Клиент и сервер (1/2) Сервер подключается к порту на хосте и ждет соединения с клиентом; Клиент создает сокет и пытается соединить его с портом на хосте; Если создание сокета прошло успешно, то сервер переходит в режим ожидания команд от клиента; Клиент формирует команду и передает ее серверу, переходит в режим ожидания ответа; Сервер принимает команду, выполняет ее и пересылает ответ клиенту.
Клиент и сервер (2/2)
Класс Socket Конструктор Socket(String host, int port) устанавливает соединение между локальной машиной и указанным портом узла Internet, имя которого было передано конструктору. Этот конструктор может возбуждать исключения UnknownHostException и IOException. Конструктор Socket(InetAddress address, int port) То же самое, но: узел, с которым требуется установить соединение, задается не строкой, а объектом InetAddress. Этот конструктор может возбуждать только IOException.
Части адреса соединения Из объекта Socket в любое время можно извлечь информацию об адресе Internet и номере порта, с которым он соединен getInetAddress() возвращает объект InetAddress, связанный с данным объектом Socket getPort() возвращает номер порта на удаленном узле, с которым установлено соединение getLocalPort() возвращает номер локального порта, к которому присоединен данный объект
Потоки данных После того, как объект Socket создан, можно получить доступ к связанным с ним входному и выходному потокам. Эти потоки используются для приема и передачи данных точно так же, как и обычные потоки ввода-вывода (см. слайды «Потоки данных»): getInputStream() возвращает InputStream, связанный с данным объектом getOutputStream() возвращает OutputStream, связанный с данным объектом close() закрывает входной и выходной потоки объекта Socket
Пример: чтение числа import java.net.*; import java.io.*; public class TimeHost { public static void main(String args[]) throws Exception { int c; Socket s = new Socket("timehost.starwave.com", 880); InputStream in = s.getInputStream(); while ((c = in.read()) != -1) { System.out.print( (char) c); } s.close(); }
Класс ServerSocket Используется для создания сервера При создании, объект ServerSocket регистрирует себя в системе У класса есть дополнительный метод accept(), вызов которого блокирует поток исполнения до тех пор, пока какой- нибудь клиент не установит соединение по соответствующему порту После того, как соединение установлено, метод accept() возвращает вызвавшему его потоку объект Socket Конструктор ServerSocket(int port) создает сокет сервера для заданного порта. Конструктор ServerSocket(int port, int count) если этот порт занят, метод будет ждать его освобождения максимум count миллисекунд
Класс URL Uniform Resource Locators являются наиболее фундаментальным компонентом WWW. Класс предоставляет простую абстракцию для доступа к информации в Internet с помощью URL Конструкторы: URL(String spec) URL(String protocol, String host, int port, String file) URL(String protocol, String host, String file) URL(URL context, String spec)
Пример: класс URL import java.net.URL; public class MyURL { public static void main(String args[]) throws Exception { URL hp = new URL(" System.out. println("Protocol: " + hp.getProtocol()); System.out.printin("Port: " + hp.getPort()); System.out.println("Host: " + hp.getHost()); System.out.println("File: " + hp.getFile()); System.out.println("Ext: " + hp.toExternaLForm()); } Для того, чтобы извлечь реальную информацию, адресуемую данным URL, необходимо на основе URL создать объект URLConnection
Пример: класс URLConnection class localURL { public static void main(String args[]) throws Exception { int c; URL hp = new URL("http", " ", 80, "/"); URLConnection hpCon = hp.openConnection(); System.out.println("Date: " + hpCon.getDate()); System.out.println("Type: " + hpCon.getContentType()); System.out.println("Exp: " + hpCon.getExpiration()); System.out.println( "Last M: " + hpCon.getLastModified()); System.out.println("Length: " + hpCon.getContentLength()); InputStream input = hpCon.getInputStream(); int i=hpCon.getContentLength(); while (((c = input. read()) != -1) && (--i > 0)) { System.out.print((char) c); } input.close(); }
Q&A
Спасибо!
Язык программирования Java Андрей Дмитриев ©2009