DatagramPacket(byte[] buf, int offset, int length)
DatagramPacket(byte[] buf, int offset, int length,
InetAddress address, int port)
DatagramPacket(byte[] buf, int offset, int length,
SocketAddress address)
DatagramPacket(byte[] buf, int length,
SocketAddress address)
Первый конструктор используется в тех случаях когда датаграмма только принимает в себя пришедшие данные, так как созданный с его помощью объект не имеет информации об адресе и порте получателя. Остальные конструкторы используются для отправки датаграм.
Класс DatagramSocket может выступать в роли клиента и сервера, то есть он способен получать и отправлять пакеты. Отправить пакет можно с помощью метода send(DatagramPacket pac), для получения пакета используется метод receive(DatagramPacket pac).
/* пример # 9: отправка файла по UDP протоколу: Sender.java */
package chapt15;
import java.io.*;
import java.net.*;
public class Sender {
public static void main(String[] args) {
try {
byte [] data = new byte [1000];
DatagramSocket s = new DatagramSocket();
InetAddress addr =
InetAddress.getLocalHost();
/*файл с именем toxic.mp3 должен лежать в корне проекта*/
FileInputStream fr =
new FileInputStream(
new File("toxic.mp3"));
DatagramPacket pac;
while (fr.read(data)!= -1) {
//создание пакета данных
pac = new DatagramPacket(data, data.length, addr, 8033);
s.send(pac); //отправление пакета
}
fr.close();
System. out. println("Файл отправлен");
} catch (UnknownHostException e) {
// неверный адрес получателя
e.printStackTrace();
} catch (SocketException e) {
// возникли ошибки при передаче данных
e.printStackTrace();
} catch (FileNotFoundException e) {
// не найден отправляемый файл
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/* пример # 10: прием данных по протоколу UDP: Recipient.java */
package chapt15;
import java.io.*;
import java.net.*;
public class Recipient {
public static void main(String[] args) {
File file = new File("toxic2.mp3");
System. out. println("Прием данных...");
try { // прием файла
acceptFile (file, 8033, 1000);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void acceptFile (File file, int port,
int pacSize) throws IOException {
byte data[] = new byte[pacSize];
DatagramPacket pac =
new DatagramPacket(data, data.length);
DatagramSocket s = new DatagramSocket(port);
FileOutputStream os =
new FileOutputStream(file);
try {
/* установка времени ожидания: если в течение 10 секунд
не принято ни одного пакета, прием данных заканчивается*/
s.setSoTimeout(60000);
while (true) {
s.receive(pac);
os.write(data);
os.flush();
}
} catch (SocketTimeoutException e) {
// если время ожидания вышло
os.close();
System. out. println(
"Истекло время ожидания, прием данных закончен");
}
}
}
Задания к главе 15
Вариант А
Создать на основе сокетов клиент/серверное визуальное приложение:
1. Клиент посылает через сервер сообщение другому клиенту.
2. Клиент посылает через сервер сообщение другому клиенту, выбранному из списка.
3. Чат. Клиент посылает через сервер сообщение, которое получают все клиенты. Список клиентов хранится на сервере в файле.
4. Клиент при обращении к серверу получает случайно выбранный сонет Шекспира из файла.
5. Сервер рассылает сообщения выбранным из списка клиентам. Список хранится в файле.
6. Сервер рассылает сообщения в определенное время определенным клиентам.
7. Сервер рассылает сообщения только тем клиентам, которые в настоящий момент находятся в on-line.
8. Чат. Сервер рассылает всем клиентам информацию о клиентах, вошедших в чат и покинувших его.
9. Клиент выбирает изображение из списка и пересылает его другому клиенту через сервер.
10. Игра по сети в “Морской бой”.
11. Игра по сети в “21”.
12. Игра по сети “Го”. Крестики-нолики на безразмерном (большом) поле. Для победы необходимо выстроить пять в один ряд.
13. Написать программу, сканирующую сеть в указанном диапазоне IP адресов на наличие активных компьютеров.
14. Прокси. Программа должна принимать сообщения от любого клиента, работающего на протоколе TCP, и отсылать их на соответствующий сервер. При передаче изменять сообщение.
15. Телнет. Создать программу, которая соединяется с указанным сервером по указанному порту и производит обмен текстовой информацией.
Вариант B
Для заданий варианта В главы 4 на базе сокетных соединений разработать сетевой вариант системы. Для каждого пользователя должно быть создано клиентское приложение, соединяющееся с сервером.
Тестовые задания к главе 15
Вопрос 15.1.
Каким способом будет подключен объект socket, если он объявлен следующим образом:
Socket socket = new Socket("host", 23);
1) POP3;
2) FTP;
3) TCP/IP;
4) IPX;
5) UDP.
Вопрос 15.2.
Как получить содержимое страницы, используя его URL при следующем объявлении:
String url = new String("http://bsu.iba.by");
1) Socket content = new
Socket(new URL(url)).connect();
2) Object content = new URL(url).getContent();
3) String content = new URLHttp(url).getString();
4) Object content = new
URLConnection(url).getContent();
5) String content = new
URLConnection(url).connect().
Вопрос 15.3.
С помощью какого метода можно получить содержимое страницы по определенному адресу в сети интернет?
1) getDocumentBase();
2) getCodeBase();
3) getURLAddress();
4) getCodeAddress();
5) getURLBase().
Вопрос 15.4.
Какие исключительные ситуации возможны при открытии сокетного соединения вида:
Socket s = new Socket("bsu.iba.by", 8080);
1) IOException;
2) MalformedURLException;
3) UnknownHostException;
4) UnknownURLException;
5) UnknownPortException.
Вопрос 15.5.
Дан код:
Socket s = null;
ServerSocket server = new ServerSocket(8080);
s = server.accept();
PrintStream p = new PrintStream(s.getOutputStream());
p.print("привет!");
Как поместить сообщение "привет!" в сокет и дать указание закрыть сокетное соединение после передачи информации?
1) p.flush();
2) p.close();
3) s.flush();
4) s.close();
5) нет правильного.
XML & Java
XML (Extensible Markup Language – расширяемый язык разметки) – рекомендован W3C как язык разметки, представляющий свод общих синтаксических правил. XML предназначен для обмена структурированной информацией с внешними системами. Формат для хранения должен быть эффективным, оптимальным с точки зрения потребляемых ресурсов (памяти, и др.). Такой формат должен позволять быстро извлекать полностью или частично хранимые в этом формате данные и быстро производить базовые операции над этими данными.
XML является упрощённым подмножеством языка SGML. На основе XML разрабатываются более специализированные стандарты обмена информацией (общие или в рамках организации, проекта), например XHTML, SOAP, RSS, MathML.
Основная идея XML – это текстовое представление с помощью тегов, структурированных в виде дерева данных. Древовидная структура хорошо описывает бизнес-объекты, конфигурацию, структуры данных и т.п. Данные в таком формате легко могут быть как построены, так и разобраны на любой системе с использованием любой технологии – для этого нужно лишь уметь работать с текстовыми документами. С другой стороны, механизм namespace, различная интерпретация структуры XML документа (триплеты RDF, microformat) и существование смешанного содержания (mixed content) часто превращают XML в многослойную структуру, в которой отсутствует древовидная организация (разве что на уровне синтаксиса).
Каждый XML-документ должен содержать только один корневой элемент (root element или document element). В примере есть два корневых элемента, один из которых пустой. В отличие от файла XML, файл HTML может иметь несколько корневых элементов и не обязательно <HTML>.
<?xml version="1.0"?> <book><caption>C++</book></caption>Тег должен закрываться в том же теге, в котором был открыт. В данном случае это caption. В HTML этого правила не существует. <?xml version="1.0"?> <book><author>Petrov</book>Любой открывающий тег должен иметь закрывающий. Если тег не имеет содержимого, можно использовать конструкцию вида <author/>. В HTML есть возможность не закрывать теги, и браузер определяет стили по открывающемуся тегу
Наименования тегов являются чувствительные к регистру (case-sensitive),
т.е. например теги, <author>, <Author>, <AuToR> будут совершенно разными при работе с XML:
<author>Petrov</Author>
Программа-анализатор просто не найдет завершающий тег и выдаст ошибку. Язык HTML нетребователен к регистру.
Все атрибуты тегов должны быть заключены либо в одинарные, либо в двойные кавычки:
<book dateOfIssue=”09/09/2007” title=’JAVA in Belarus’/>
В НТМL разрешено записывать значение атрибута без кавычек.
Например: <FORM method=POST action=index.jsp>
Пусть существует XML-документ с данными о студентах:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "students.dtd">
<students>
<student login="mit" faculty="mmf">
<name>Mitar Alex</name>
<telephone>2456474</telephone>
<address>
<country>Belarus</country>
<city>Minsk</city>
<street>Kalinovsky 45</street>
</address>
</student>
<student login="pus" faculty="mmf">
<name>Pashkun Alex</name>
<telephone>3453789</telephone>
<address>
<country>Belarus</country>
<city>Brest</city>
<street>Knorina 56</street>
</address>
</student>
</students>
Каждый документ начинается декларацией – строкой, указывающей как минимум версию стандарта XML. В качестве других атрибутов могут быть указаны кодировка символов и внешние связи.
После декларации в XML-документе могут располагаться ссылки на документы, определяющие структуру текущего документа и собственно XML-элементы (теги), которые могут иметь атрибуты и содержимое. Открывающий тег состоит из имени элемента, например <city>. Закрывающий тег состоит из того же имени, но перед именем добавляется символ ‘ / ’, например </city>. Содержимым элемента (content) называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы.
Инструкции по обработке
XML-документ может содержать инструкции по обработке, которые используются для передачи информации в работающее с ним приложение. Инструкция по обработке может содержать любые символы, находиться в любом месте XML документа и должна быть заключены между <? и ?> и начинаться с идентификатора, называемого target (цель).
Например:
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
Эта инструкция по обработке сообщает браузеру, что для данного документа необходимо применить стилевую таблицу (stylesheet) book.xsl.
Комментарии
Для написания комментариев в XML следует заключать их, как и в HTML, между <!-- и -->. Комментарии можно размещать в любом месте документа, но не внутри других комментариев:
<!-- комментарий <!-- Неправильный --> -->
Внутри значений атрибутов:
<book title=”BLR<!-- Неправильный комментарий -->”/>
Внутри тегов:
<book <!-- Неправильный комментарий -->/>
Указатели
Текстовые блоки XML-документа не могут содержать символов, которые служат в написании самого XML: <, >, &.
<description>
в текстовых блоках нельзя использовать символы <,>,&
</description>
В таких случаях используются ссылки (указатели) на символы, которые должны быть заключены между символами & и;.
Особо распространенными указателями являются:
< – символ <;
> – символ >;
& – символ &;
' – символ апострофа ‘;
" – символ двойной кавычки “.
Таким образом, пример правильно будет выглядеть так:
<description>