Класс умеет отправлять широковещательные udp сообщения. Как сделать так, чтобы он не принимал отправленные самим собой сообщения?
package com.company.Network;
import java.io.*;
import java.net.*;
import java.util.LinkedList;
import Old.Message.Message;
import Tubes.Tube;
/**
* @class Network
* класс-поток для работы с сетью
*/
public class Network implements Runnable {
private Tube m_in;
private Tube m_out;
private final int m_port = 1300;
private DatagramSocket m_socket;
public Network() {
}
public void setTubes(Tube in, Tube out) {
m_in = in;
m_out = out;
}
///отправить сообщение в сеть
private void sendData(byte [] data) throws Exception {
if(m_socket == null) {
return;
}
DatagramPacket dp = new DatagramPacket(data, data.length,
InetAddress.getByName("255.255.255.255"),
m_port);
m_socket.send(dp);
}
///сериализовать
public byte[] serialize (Message msg) throws Exception {
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
ObjectOutputStream oos =
new ObjectOutputStream(baos);
oos.writeObject(msg);
return baos.toByteArray();
}
///десериализовать
public Message deSerialize(byte[] serialized) throws Exception {
ByteArrayInputStream bais =
new ByteArrayInputStream(serialized);
ObjectInputStream ois =
new ObjectInputStream(bais);
return (Message)ois.readObject();
}
///принять данные из сети
private void receiveData() {
DatagramPacket dp;
byte [] data = new byte[1024];
dp = new DatagramPacket(data, data.length);
try {
m_socket.receive(dp);
m_in.enqueue(deSerialize(data));
} catch (Exception e) {
System.out.println(e.toString());
}
}
///основнойметод потока
@Override
public void run() {
//открытие сокета
try {
m_socket = new DatagramSocket(m_port);
} catch (Exception e) {
System.out.println(e.toString());
m_socket.close();
return;
}
//чтение полученных сообщений
while (true) {
//есть что отправлять
if(!m_out.isEmpty()) {
try {
sendData(serialize(m_out.dequeue()));
} catch(Exception e) {
System.out.println(e.toString());
}
}
//получить данные
receiveData();
}
}
}