Código:
public class Client extends Thread
{
private boolean vivo;
private ClientGUI clienteGUI;
int puerto = 3000;
byte[] buffer = new byte[10];
DatagramPacket dato = new DatagramPacket(buffer, buffer.length);// Un DatagramPacket para recibir los mensajes.
//
private int h_p;
private long tiempoinicial;
private float d2p;
private int tiempointerrupcion;
private int n;
private int tipo;
public Client(ClientGUI cliente, MicroKernel nucleo, int id,long tiempoinicial,int h,int d,float p,int tipoReloj)
{
this.clienteGUI = cliente;
this.nucleo = nucleo;
this.id = id;
this.tipo=tipoReloj;
vivo = true;
if(tipoReloj==1){
h_p=h;
}
else if(tipoReloj ==2){
h_p=h-(int)(h*p);
}
else if (tipoReloj == 3){
h_p=h+(int)(h*p);
}
n=1000/h;
d2p=d/(2*p);
this.tiempoinicial=tiempoinicial;
tiempointerrupcion = 1000/h_p;
start();
}
public void stopThread()
{
vivo = false;
}
public void setInicio(int hi) {
tiempoinicial = hi;
}
public synchronized void receive()
{
try{
InetAddress direccion = InetAddress.getLocalHost();// direccion ip del interfaz de red
DatagramSocket socket = new DatagramSocket(puerto, direccion); // Se recibe un dato y se escribe en pantalla.
socket.setBroadcast(true);
socket.receive(dato);
socket.disconnect();
clienteGUI.printMessage("Recibido dato de "+ dato.getAddress().getHostName() + " : ");
// Conversion de los bytes a String
String msg = new String(dato.getData());
clienteGUI.printMessage(msg);
socket.close();
}catch (Exception e) {e.printStackTrace();}
}
public void run()
{
while(vivo){
try{
sleep(tiempointerrupcion);
tiempoinicial += n;
clienteGUI.tiempoActual(String.valueOf(tiempoinicial));
receive();
}catch (InterruptedException e ){e.getMessage();}
catch (Exception e) {e.printStackTrace();}
}
}
}