Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - murdoc_87_1

#1
gracias por la respuesta biribau pero era otro problema, un error más humano: mezclar datos de otra clase en otra. Me explico: debería haber creado una clase cronómetro y en otra clase hacer los send y receive para que no se trabara, es decir tener 2 hilos. Así pude solucionarlo, gracias
#2
Hola que tal, tengo la siguiente duda: cómo logro que un contador que tengo, siga "corriendo" o que no se detenga por un receive, pero tal receive debe estar al pendiente por si el servidor (servidor activo, puesto que envía datos a todos sus clientes, pues estoy haciendo el algoritmo de berkeley de sincronización de relojes) le envía un dato que, en este caso, es el tiempo que actual que tiene el cronómetro.
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();}
    }
   
   
    }
}

Este código actual lo que hace es cada incremento sucede por cada receive que se recibe, lo que quiero es que el contador siga de corrido, es decir, los incrementos no se detengan por el receive, pero el receive esté al pendiente y despliegue el mensaje recibido. Espero haberme explicado, saludos
#3
Así es, debería iniciar en 0, quería guardar los caracteres a partir del 33. Mi error consistía en otra función que ya validé bien. Gracias por la observación
#4
public string[] quitaDemas(string cadena){
char[] delimiterChars= new char[11];
for(int i=33;i<10;i++){
int v=Numero((char)i);
if(v==33&&i>159||v==33&&i<128){delimiterChars[i]=(char)i;
Console.WriteLine("char="+delimiterChars[i].ToString()+" No.:"+i);
}
}
cadena = cadena.Replace("\r\n\t", "");//Quitamos llamadas de escape como \n y \r (saltos de línea)
string[] arr = cadena.Split(delimiterChars);//Ignoramos espacios, comas,punto y comas, puntos; para almacenar un arreglo con palabras y para cada salto de línea, un string vacío
return arr;
}


Hola que tal, ando muy engorrado con esta función que quiero implementar, quiero almacenar en la matriz delimeterChars los caracteres ASCII que no sean de 'a' a la 'z' y las minúsculas acentuadas, la ñ y la ü. la función "Numero" me regresa un 33 si el caracter mandado es diferente de lo anterior. La matriz me almacena los caracteres que quiero quitar, pero al poner la variable delimeterChars en split me provoca error de "Índice fuera de los límites" incluso si almaceno solo 10 caracteres... he calado la función split poniendo 5 chars ahí mismo y funciona el código pero con dichos chars. Me gustaría saber que error tengo o que limitante rebaso... Saludos