masha_mmk

Untitled

Sep 13th, 2021
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.31 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.IOException;
  4. import java.net.DatagramPacket;
  5. import java.net.InetAddress;
  6. import java.net.MulticastSocket;
  7. import java.net.SocketTimeoutException;
  8. import java.util.HashMap;
  9. import java.util.Map;
  10.  
  11. public class Main {
  12.  
  13.     public static void main(String[] args) throws IOException {
  14.         String message = "Hi, there!";
  15.         byte[] sendPacket = message.getBytes();
  16.         byte[] rcvPacket = new byte[0];
  17.  
  18.         //сохраняем инет-адрес + время получения сообщения
  19.         Map<String, Long> messageMap = new HashMap<>();
  20.  
  21.         MulticastSocket multicastSocket = new MulticastSocket(8000);
  22.         InetAddress inetGroupAddress = InetAddress.getByName("224.1.1.1");
  23.         multicastSocket.joinGroup(inetGroupAddress);
  24.  
  25.         DatagramPacket datagramSendPacket = new DatagramPacket(sendPacket, sendPacket.length, inetGroupAddress, 8000 );
  26.         DatagramPacket datagramRcvPacket = new DatagramPacket(rcvPacket, rcvPacket.length);
  27.         //System.out.println(multicastSocket.getLocalAddress());
  28.         //пускаем в цикл
  29.         long timeout = 2000;
  30.         multicastSocket.setSoTimeout((int)timeout);
  31.        // multicastSocket.setTimeToLive(20);
  32.         while (true) {
  33.             multicastSocket.send(datagramSendPacket);
  34.             //получаем время последнего отправления пакета
  35.             long sendTime = System.currentTimeMillis();
  36.  
  37.             //multicastSocket.setSoTimeout((int) (timeout - (System.currentTimeMillis() - sendTime)));
  38.  
  39.             try {
  40.                 multicastSocket.receive(datagramRcvPacket);
  41.             } catch (SocketTimeoutException exception) {
  42.                // continue;
  43.                 exception.printStackTrace();
  44.                 throw new IllegalStateException("Can't set socket timeout", exception);
  45.             }
  46.  
  47.             String inetRcvAddress = datagramRcvPacket.getAddress().getHostAddress();
  48.             Long appearedEarlier = messageMap.put(inetRcvAddress, System.currentTimeMillis());
  49.             if ( appearedEarlier == null) {
  50.                 System.out.println("Another clone appeared!!");
  51.             } else System.out.println("No clone appeared!");
  52.  
  53.  
  54.         }
  55.        // multicastSocket.leaveGroup(inetAddress);
  56.  
  57.     }
  58. }
  59.  
Add Comment
Please, Sign In to add comment