r = InetAddress.getByName (addr);
// Пропускаємо передачу пакету себе ж.
if (inetAddr.getHostAddress (). equals (localAddress))
continue;
// Формуємо UDP пакет для передчі. Методу передаються повідомлення
// у вигляді байтового масиву, довжина повідомлення, мережеву адресу
// призначення, а також порт. = new DatagramPacket (message.getBytes (), message.length (),
inetAddr, port);
// Відсилаємо пакет через сокет.
sendingSocket.send (packet);
}
} catch (SocketException e) {. printStackTrace ();
} catch (UnknownHostException e) {. printStackTrace ();
} catch (IOException e) {
e.printStackTrace ();
}
}
Перед відправленням повідомлення, воно формується таким способом, щоб було зрозуміло іншим подібним програмам клієнтам. Цим формуванням займається метод prepareMessage (), описаний нижче:
/**
* Даний метод призначений для підготовки повідомлення до
* передачі залежно від його типу.
*
* @ param message повідомлення для передачі. Може бути null
* при типах повідомлення відмінних від CMD_MESSAGE.
* @ param roomName кімната, в яку необхідно передати повідомлення.
* Може бути null, тоді повідомлення буде передано широкомовно.
* @ param type тип повідомлення.
* @ return подготовленнное до передачі повідомлення.
*/String prepareMessage (String message, String roomName, String type) {mes = null;
// Тип повідомлення CMD_PRESENT
// Приклад: PRSN: nick (type.equals (CMD_PRESENT)) {
// Додаємо до ідентифікатора нік користувача.
mes = CMD_PRESENT + ":" + nick;
}
// Тип повідомлення CMD_SYNC
// Приклад: SYNC: room_1: @ room_2 ... if (type.equals (CMD_SYNC)) {
mes = CMD_SYNC;
// Додаємо до ідентифікатора список всіх кімнат,
// в яких знаходиться користувач. (NetRoom r: rooms) + = ":" + r.getName ();
}
// Тип повідомлення CMD_NICK
// Приклад: NICK: nickif (type.equals (CMD_NICK)) {
// Додаємо до ідентифікатора нік користувача. = CMD_NICK + ":" + nick;
}
// Тип повідомлення CMD_QUIT
// Приклад...