Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- import java.net.SocketTimeoutException;
- import java.util.HashMap;
- import java.util.Map;
- public class Main {
- public static void main(String[] args) throws IOException {
- String message = "Hi, there!";
- byte[] sendPacket = message.getBytes();
- byte[] rcvPacket = new byte[0];
- //сохраняем инет-адрес + время получения сообщения
- Map<String, Long> messageMap = new HashMap<>();
- MulticastSocket multicastSocket = new MulticastSocket(8000);
- InetAddress inetGroupAddress = InetAddress.getByName("224.1.1.1");
- multicastSocket.joinGroup(inetGroupAddress);
- DatagramPacket datagramSendPacket = new DatagramPacket(sendPacket, sendPacket.length, inetGroupAddress, 8000 );
- DatagramPacket datagramRcvPacket = new DatagramPacket(rcvPacket, rcvPacket.length);
- //System.out.println(multicastSocket.getLocalAddress());
- //пускаем в цикл
- long timeout = 2000;
- multicastSocket.setSoTimeout((int)timeout);
- // multicastSocket.setTimeToLive(20);
- while (true) {
- multicastSocket.send(datagramSendPacket);
- //получаем время последнего отправления пакета
- long sendTime = System.currentTimeMillis();
- //multicastSocket.setSoTimeout((int) (timeout - (System.currentTimeMillis() - sendTime)));
- try {
- multicastSocket.receive(datagramRcvPacket);
- } catch (SocketTimeoutException exception) {
- // continue;
- exception.printStackTrace();
- throw new IllegalStateException("Can't set socket timeout", exception);
- }
- String inetRcvAddress = datagramRcvPacket.getAddress().getHostAddress();
- Long appearedEarlier = messageMap.put(inetRcvAddress, System.currentTimeMillis());
- if ( appearedEarlier == null) {
- System.out.println("Another clone appeared!!");
- } else System.out.println("No clone appeared!");
- }
- // multicastSocket.leaveGroup(inetAddress);
- }
- }
Add Comment
Please, Sign In to add comment