Advertisement
masha_mmk

Untitled

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