ign="justify">} catch (IOException e) {
e.printStackTrace ();
}
// Т.к. буфер даних, в який записується повідомлення
// з пакету, що прийшов, завжди доповнюється до максимуму,
// необхідно виділити з нього лише значиму частину.
byte [] shortBuf = new byte [packet.getLength ()];. arraycopy (buf, 0, shortBuf, 0, packet.getLength ()); mes = new String (shortBuf);
// Виводимо в консоль прийшло повідомлення з пакету .. out.println (mes);
// Передаємо повідомлення та адресу, звідки воно прийшло, в
// спеціальний метод для подальшого аналізу даних.
parseMessage (packet.getAddress (). getHostAddress (), mes);
}
}
}). start ();// Запуск нитки
}
Щоб щось прийняти, потрібно щось відправити. Для відправки UDP пакетів служить методи sendMessage (), описаний нижче:
/**
* Даний метод передає UDP пакети через UDP сокет.
*
* @ param message повідомлення для передачі. Може бути null
* при типах повідомлення відмінних від CMD_MESSAGE.
* @ param roomName кімната, в яку необхідно передати повідомлення.
* Може бути null, тоді повідомлення буде передано широкомовно.
* @ param type тип повідомлення.
*/public void sendMessage (String message, String roomName, String type) {packet = null; (type == null | | (message == null && type == CMD_MESSAGE)) new NullPointerException (); (message == null)
message = ""; {
// Подготовліваем повідомлення в залежності від його типу.
message = prepareMessage (message, roomName, type);
// Перевіряємо, чи знаходиться користувач в тій кімнаті,
// в яку потрібно передати сообщеніе.room = getRoomByName (roomName);
// Необхідно визначити список адрес, на які
// будемо посилати UDP пакети. addrs = null;
if (room! = null) {
// Якщо повідомлення адресовано в конкретну кімнату, то
// виділяємо список тих, хто в ній знаходиться. = room.getAddresses ();
} else {
// Інакше встановлюємо список у широкомовний. = BROADCAST;
}
// Послідовно в циклі передаємо пакет по всіх потрібних адресах. (String addr: addrs) {
// Перетворення адреси з символьного подання до
// зрозумілий программе.inetAdd...