Java одноранговый чат UDP

Я новичок в программировании сокетов Java, и в настоящее время я занимаюсь разработкой небольшого однорангового приложения для UDP-чата, которое позволяет нескольким клиентам общаться друг с другом.

У меня вопрос: как заставить клиента обнаруживать все остальные подключенные клиенты, когда он нажимает кнопку подключения, предоставляя только один из ip и порта подключенных клиентов? Программа работает только в локальной сети.

3 ответа

Решение

Вы можете использовать уникальную функцию UDP, которая вещает

На IPv4 (который вы, вероятно, используете) адрес для вещания - 255.255.255.255. Любая датаграмма, отправленная на этот адрес, будет отправлена ​​всем UDP-клиентам в сети для этого порта.

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

Вот пример отправки дейтаграммы для трансляции:

    DatagramSocket s = new DatagramSocket();
    s.setBroadcast(true);
    DatagramPacket dp = new DatagramPacket("insert data here".getBytes(), "insert data here".length(), new InetSocketAddress("255.255.255.255", 5000));
    s.send(dp);

Другой клиент может получить это так:

DatagramSocket s = new DatagramSocket();
s.setBroadcast(true);
DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);
s.receive(dp);

Полученный DatagramPacket будет содержать IP-адрес и порт клиента, который его передал.

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

Не забывайте аутентифицировать своих сверстников. Вы можете попробовать использовать OpenSSL (очень просто), чтобы сгенерировать некоторые сертификаты и использовать его вместе с ssl.

Другие вопросы по тегам