Чтение онлайн

на главную - закладки

Жанры

Программирование на Java
Шрифт:

В ОС Windows с помощью команды netstat –an можно получить список всех открытых портов (параметр –n не определяет DNS-имя, а выводит только IP-адрес). Из примера выше видно, что установленных соединений нет, а все открытые порты находятся в состоянии "прослушивания", т.е. к этому порту можно обратиться для установки соединения. TCP-порт 139 отвечает за установку Netbios-сессий (например, для передачи

данных через "сетевое окружение").

В ОС Solaris для получения информации об используемых портах также применяется утилита netstat. Формат вывода практически одинаков.

Пакет java.net

Перейдем к рассмотрению средств Java для работы с сетью.

Классы, работающие с сетевыми протоколами, располагаются в пакете java.net, и простейшим из них является класс URL. С его помощью можно сконструировать uniform resource locator (URL), который имеет следующий формат:

protocol://host:port/resource

Здесь protocol – название протокола, используемого для связи; host – IP-адрес, или DNS-имя сервера, к которому производится обращение; port – номер порта сервера (если порт не указан, то используется значение по умолчанию для указанного протокола);

resource – имя запрашиваемого ресурса, причем, оно может быть составным, например:

ftp://myserver.ru/pub/docs/Java/JavaCourse.txt

Затем можно воспользоваться методом openStream, который возвращает InputStream, что позволяет считать содержимое ресурса. Например, следующая программа при помощи LineNumberReader считывает первую страницу сайтаи выводит ее на консоль.

import java.io.*;

import java.net.*;

public class Net {

public static void main(String args[]) {

try {

URL url = new URL("http://www.ru");

LineNumberReader r =

new LineNumberReader(new

InputStreamReader(url.openStream));

String s = r.readLine;

while (s!=null) {

System.out.println(s);

s = r.readLine;

}

System.out.println(r.getLineNumber);

r.close;

}

catch (MalformedURLException e) {

e.printStackTrace;

}

catch (IOException e) {

e.printStackTrace;

}

}

}

Из примера мы видим, что работа с сетью, как и работа с потоками, требует дополнительной работы с исключительными ситуациями. Ошибка MalformedURLException появляется в случае, если строка c URL содержит ошибки.

Более функциональным классом является URLConnection, который можно получить с помощью метода класса URL.openConnection. У этого класса есть два метода – getInputStream (именно с его помощью работает URL.openStream ) и getOutputStream, который можно использовать для передачи данных на сервер, если он поддерживает такую операцию (многие публичные web-серверы закрыты для таких действий).

Класс URLConnection является абстрактным. Виртуальная машина предоставляет реализации этого класса для каждого протокола, например, в том же пакете java.net определен класс HttpURLConnection. Понятно, что классы URL

и URLConnection предоставляют возможность работы через сеть на прикладном уровне с помощью высокоуровневых протоколов.

Пакет java.net также предоставляет доступ к протоколам более низкого уровня – TCP и UDP. Для этого сначала надо ознакомиться с классом InetAddress, который является Internet-адресом, или IP. Экземпляры этого класса создаются не с помощью конструкторов, а с помощью статических методов:

InetAddress getLocalHost

InetAddress getByName(String name)

InetAddress[] getAllByName(String name)

Первый метод возвращает IP-адрес машины, на которой исполняется Java- программа. Второй метод возвращает адрес сервера, чье имя передается в качестве параметра. Это может быть как DNS-имя, так и числовой IP, записанный в виде текста, например, "67.11.12.101". Наконец, третий метод определяет все IP-адреса указанного сервера.

Для работы с TCP-протоколом используются классы Socket и ServerSocket. Первым создается ServerSocket – сокет на стороне сервера. Его простейший конструктор имеет только один параметр – номер порта, на котором будут приниматься входящие запросы. После создания вызывается метод accept, который приостанавливает выполнение программы и ожидает, пока какой-нибудь клиент не инициирует соединение. В этом случае работа сервера возобновляется, а метод возвращает экземпляр класса Socket для взаимодействия с клиентом:

try {

ServerSocket ss = new ServerSocket(3456);

Socket client=ss.accept;

// Метод не возвращает

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

}

catch (IOException e) {

e.printStackTrace;

}

Клиент для подключения к серверу также использует класс Socket. Его простейший конструктор принимает два параметра - адрес сервера (в виде строки, или экземпляра InetAddress ) и номер порта. Если сервер принял запрос, то сокет конструируется успешно и далее можно воспользоваться методами getInputStream или getOutputStream.

try {

Socket s = new Socket("localhost", 3456);

InputStream is = s.getInputStream;

is.read;

}

catch (UnknownHostException e) {

e.printStackTrace;

}

catch (IOException e) {

e.printStackTrace;

}

Обратите внимание на обработку исключительной ситуации UnknownHostException, которая будет генерироваться, если виртуальная машина с помощью операционной системы не сможет распознать указанный адрес сервера в случае, если он задан строкой. Если же он задан экземпляром InetAddress, то эту ошибку надо обрабатывать при вызове статических методов данного класса.

На стороне сервера класс Socket используется точно таким же образом – через методы getInputStream и getOutputStream. Приведем более полный пример:

import java.io.*;

import java.net.*;

public class Server {

public static void main(String args[]) {

try {

ServerSocket ss = new ServerSocket(3456);

System.out.println("Waiting...");

Socket client=ss.accept;

System.out.println("Connected");

client.getOutputStream.write(10);

Поделиться:
Популярные книги

Город Богов 4

Парсиев Дмитрий
4. Профсоюз водителей грузовых драконов
Фантастика:
юмористическое фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Город Богов 4

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

Замуж с осложнениями. Трилогия

Жукова Юлия Борисовна
Замуж с осложнениями
Фантастика:
фэнтези
юмористическая фантастика
космическая фантастика
9.33
рейтинг книги
Замуж с осложнениями. Трилогия

Идеальный мир для Лекаря 17

Сапфир Олег
17. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 17

Вернуть Боярство 6

Мамаев Максим
6. Пепел
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Вернуть Боярство 6

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

Противостояние

Демидов Джон
3. Система компиляции
Фантастика:
героическая фантастика
рпг
5.00
рейтинг книги
Противостояние

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10

Вернуть Боярство 5

Мамаев Максим
5. Пепел
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Вернуть Боярство 5

Кодекс Охотника. Книга XXVI

Винокуров Юрий
26. Кодекс Охотника
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVI

Мастер Разума

Кронос Александр
1. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
6.20
рейтинг книги
Мастер Разума

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер