Advertisement
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.nio.ByteBuffer;
- import java.util.UUID;
- public class CopyFinder {
- private String message = "pugs_do_drug_uuu_vatrushki";
- private byte[] sendPacket = new byte[32];
- byte[] rcvPacket = new byte[32];
- byte[] UUIDtoByte(UUID uuid) {
- ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
- bb.putLong(uuid.getMostSignificantBits());
- bb.putLong(uuid.getLeastSignificantBits());
- return bb.array();
- }
- UUID BytetoUUID(byte[] bb) {
- ByteBuffer byteBuffer = ByteBuffer.wrap(bb);
- Long high = byteBuffer.getLong();
- Long low = byteBuffer.getLong();
- return new UUID(high, low);
- }
- void findCopy() throws IOException {
- UUID uuid = UUID.nameUUIDFromBytes(message.getBytes());
- UUID uuidUnique = UUID.randomUUID();
- byte[] sendFirstPart = UUIDtoByte(uuid);
- byte[] sendSecondPart = UUIDtoByte(uuidUnique);
- for (int i = 0; i < sendPacket.length; i++) {
- sendPacket[i] = i < sendFirstPart.length ? sendFirstPart[i] : sendSecondPart[i - sendFirstPart.length];
- }
- 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);
- long timeout = 3000;
- while (true) {
- multicastSocket.send(datagramSendPacket);
- long sendTime = System.currentTimeMillis();
- while (timeout - (System.currentTimeMillis() - sendTime) > 0) {
- multicastSocket.setSoTimeout((Long.valueOf(timeout - (System.currentTimeMillis() - sendTime))).intValue() + 1);
- try {
- multicastSocket.receive(datagramRcvPacket);
- } catch (SocketTimeoutException exception) {
- continue;
- }
- rcvPacket = datagramRcvPacket.getData();
- byte[] firstPartRcv = new byte[16];
- byte[] secondPartRcv = new byte[16];
- for (int i = 0; i < rcvPacket.length / 2; i++) {
- firstPartRcv[i] = rcvPacket[i];
- secondPartRcv[i] = rcvPacket[i + rcvPacket.length / 2];
- }
- UUID uuidFirst = BytetoUUID(firstPartRcv);
- UUID uuidSecond = BytetoUUID(secondPartRcv);
- if (!uuidSecond.equals(uuidUnique) && uuidFirst.equals(uuid)) {
- System.out.println("Clone appeared!!!");
- }
- else if (uuidSecond.equals(uuidUnique) && uuidFirst.equals(uuid)) {
- System.out.println("It's me!!!");
- }
- else System.out.println("No clone appeared!!!");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement