Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.IOException;
- import java.net.*;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- import java.net.SocketTimeoutException;
- import java.nio.ByteBuffer;
- import java.util.*;
- public class Main {
- public static void main(String[] args) throws IOException {
- String message = "pugs_do_drug_uuu_vatrushki";
- byte[] sendPacket = new byte[32];
- byte[] rcvPacket = new byte[32];
- UUID uuid = UUID.nameUUIDFromBytes(message.getBytes());
- UUID uuidUnique = UUID.randomUUID();
- ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
- bb.putLong(uuid.getMostSignificantBits());
- bb.putLong(uuid.getLeastSignificantBits());
- byte[] sendFirstPart = bb.array();
- bb = ByteBuffer.wrap(new byte[16]);
- bb.putLong(uuidUnique.getMostSignificantBits());
- bb.putLong(uuidUnique.getLeastSignificantBits());
- byte[] sendSecondPart = bb.array();
- 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 = 2000;
- 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;
- }
- //String inetRcvAddress = datagramRcvPacket.getAddress().getHostAddress();
- 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];
- }
- ByteBuffer byteBuffer = ByteBuffer.wrap(firstPartRcv);
- Long high = byteBuffer.getLong();
- Long low = byteBuffer.getLong();
- UUID uuidFirst = new UUID(high, low);
- byteBuffer = ByteBuffer.wrap(secondPartRcv);
- high = byteBuffer.getLong();
- low = byteBuffer.getLong();
- UUID uuidSecond = new UUID(high, low);
- if (!uuidSecond.equals(uuidUnique) && uuidFirst.equals(uuid)) {
- System.out.println("Clone appeared!!!");
- } else System.out.println("No clone appeared!!!");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement