Advertisement
masha_mmk

Untitled

Sep 14th, 2021
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.25 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.IOException;
  4. import java.net.*;
  5. import java.net.InetAddress;
  6. import java.net.MulticastSocket;
  7. import java.net.SocketTimeoutException;
  8. import java.nio.ByteBuffer;
  9. import java.util.*;
  10.  
  11. public class Main {
  12.  
  13.     public static void main(String[] args) throws IOException {
  14.         String message = "pugs_do_drug_uuu_vatrushki";
  15.         byte[] sendPacket = new byte[32];
  16.         byte[] rcvPacket = new byte[32];
  17.  
  18.         UUID uuid = UUID.nameUUIDFromBytes(message.getBytes());
  19.         UUID uuidUnique = UUID.randomUUID();
  20.  
  21.         ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
  22.         bb.putLong(uuid.getMostSignificantBits());
  23.         bb.putLong(uuid.getLeastSignificantBits());
  24.         byte[] sendFirstPart = bb.array();
  25.  
  26.         bb = ByteBuffer.wrap(new byte[16]);
  27.         bb.putLong(uuidUnique.getMostSignificantBits());
  28.         bb.putLong(uuidUnique.getLeastSignificantBits());
  29.         byte[] sendSecondPart = bb.array();
  30.  
  31.         for ( int i =0; i < sendPacket.length; i++){
  32.             sendPacket[i] = i < sendFirstPart.length ? sendFirstPart[i] : sendSecondPart[i - sendFirstPart.length];
  33.         }
  34.  
  35.  
  36.         MulticastSocket multicastSocket = new MulticastSocket(8000);
  37.         InetAddress inetGroupAddress = InetAddress.getByName("224.1.1.1");
  38.         multicastSocket.joinGroup(inetGroupAddress);
  39.  
  40.         DatagramPacket datagramSendPacket = new DatagramPacket(sendPacket, sendPacket.length, inetGroupAddress, 8000 );
  41.         DatagramPacket datagramRcvPacket = new DatagramPacket(rcvPacket, rcvPacket.length);
  42.  
  43.         long timeout = 2000;
  44.         while (true) {
  45.             multicastSocket.send(datagramSendPacket);
  46.             long sendTime = System.currentTimeMillis();
  47.  
  48.             while (timeout - (System.currentTimeMillis() - sendTime) > 0) {
  49.                 multicastSocket.setSoTimeout((Long.valueOf(timeout - (System.currentTimeMillis() - sendTime))).intValue() + 1);
  50.  
  51.                 try {
  52.                     multicastSocket.receive(datagramRcvPacket);
  53.                 } catch (SocketTimeoutException exception) {
  54.                     continue;
  55.                 }
  56.  
  57.                 //String inetRcvAddress = datagramRcvPacket.getAddress().getHostAddress();
  58.  
  59.                 rcvPacket = datagramRcvPacket.getData();
  60.                 byte[] firstPartRcv = new byte[16];
  61.                 byte[] secondPartRcv = new byte[16];
  62.                 for ( int i = 0; i < rcvPacket.length/2; i++){
  63.                     firstPartRcv[i] = rcvPacket[i];
  64.                     secondPartRcv[i] = rcvPacket[i+rcvPacket.length/2];
  65.                 }
  66.  
  67.                 ByteBuffer byteBuffer = ByteBuffer.wrap(firstPartRcv);
  68.                 Long high = byteBuffer.getLong();
  69.                 Long low = byteBuffer.getLong();
  70.                 UUID uuidFirst = new UUID(high, low);
  71.  
  72.                 byteBuffer = ByteBuffer.wrap(secondPartRcv);
  73.                 high = byteBuffer.getLong();
  74.                 low = byteBuffer.getLong();
  75.                 UUID uuidSecond = new UUID(high, low);
  76.  
  77.                 if (!uuidSecond.equals(uuidUnique) && uuidFirst.equals(uuid)) {
  78.                     System.out.println("Clone appeared!!!");
  79.                 } else System.out.println("No clone appeared!!!");
  80.             }
  81.         }
  82.     }
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement