java - 如何从另一个类获取 boolean 值?

标签 java udp datagram

我有一个 UDP 服务,它告诉我们一个号码是否是“capicua”。我有一个带有 boolean 值的服务器类,可以在存在或不存在时设置其值。当我从类 Client 调用告诉我即使使用 getter、setter 或返回实际的 boolean 值也无法获取 boolean 值时,您会怎么想?

//CLIENT CLASS
//TIPICO INFINITY LOOP
        while(true) {
            System.out.println("Introduce un numero de "
                    + "al menos 2 cifras para ver si son capicúas. ");

            //METEMOS EN OUT ALL CONTENT 
            out =intToByteArray(Integer.parseInt(introducirDatos("Numero : "))) ;
            //ESCAPE
            if(byteArrayToInt(out)== 0) {
                System.out.println("Cerramos conexión...");
                break;
            }
            System.out.println("Enviando " + out.length + " bytes al servidor");
            envio = new DatagramPacket(out, out.length, IPServer, port );
            socket.send(envio);
//-------------------------------------------------------------------
            recibo = new DatagramPacket(in, in.length);
            System.out.println("Esperando datagrama...");
            socket.receive(recibo);

            IPOrigin = recibo.getAddress();
            int originPort = recibo.getPort();
            System.out.println("Procedente de: " + IPOrigin + ":" + originPort);

            boolean capicua = Servidor.isCapicua();
            System.out.println(capicua);



        }
        socket.close();
class Servidor{
static boolean capicua = true;

while (true) {

            System.out.println("Esperando datagrama...");

            // CONSTUIMOS NUESTRO DATAGRAMPACKET CON LOS DATOS DEL ARRAY DE BYTES
            recibo = new DatagramPacket(in, in.length);
            // RELLENAMOS EL SOCKET CON ALL CONTENT FROM RECIBO
            socket.receive(recibo);
            // ALMACENAMOS EN 'NUMERO' ALL CONTENT
            numero = new Integer(Cliente.byteArrayToInt(recibo.getData()));

            IPOrigin = recibo.getAddress();
            int port = recibo.getPort();
            System.out.println("Origen: " + IPOrigin + ":" + port);
            System.out.println("Mensaje recibido: " + numero);
            // VISUALIZMOS DATOS
            visualizar(recibo, socket);

            // AQUI ES DONDE TOCAMOS LA INFO RECIBIDA PARA DEVOLVER LA INFO ADULTERADA
            String answr = Integer.toString(capicuar(numero));

            if (numero == capicuar(numero)) {
                capicua = false;
            }
            System.out.println(capicua);

            // METEMOS LA INFO MODIFICADA EN DGP PARA ENVIAR
            // byte[] respuesta = Cliente.intToByteArray(answr);
            out = answr.getBytes();
            // PREPARAMOS EL ENVIO
            envio = new DatagramPacket(out, out.length, IPOrigin, port);
            // ENVIAMOS Y VUELTA A EMPEZAR

            socket.send(envio);
}
public static boolean isCapicua() {
        return capicua;
    }

    public static void setCapicua(boolean capicua) {
        Servidor.capicua = capicua;
    }

最佳答案

您可以按如下方式使用单例类(您可以将单例类重命名为您希望的任何其他名称。)

public class SharedValues{

     private static SharedValues sharedValues = new SharedValues();
     //will always return the same instance of this class
     public static SharedValues getInstance() {
        return sharedValues;
     }

     private boolean capicua;

     public void setCapicua(boolean capicua)
     {
         this.capicua = capicua;
     }

     public boolean getCapicua()
     {
        return this.capicua;
     }
}

然后在类 Servidor 和类 Client 中,执行以下操作:

class Servidor {
    SharedValues sharedValues = SharedValues.getInstance();

    //make sure this while loop code is in a function
    while(true)
    {
        if (numero == capicuar(numero)) {
            sharedValues.setCapicua(false);

        }
    }
}


class Client {
    SharedValues sharedValues = SharedValues.getInstance();

    //make sure this while loop code is in a function
    while(true)
    {
        boolean capicua = sharedValues.getCapicua();
        System.out.println(capicua);
    }
}

简单解释一下,单例类就是只能有一个实例的类。因此,Servidor 类和 Client 类都将访问 SharedValues 类的同一实例。如果您将 Servidor 中的值设置为 setCapicua(false),那么在 Client 类中,如果您调用 getCapicua(),您将得到它为 false。但是,您必须意识到,在 Client 和 Servidor 中,实例化都是 SharedValues sharedValues = SharedValues.getInstance();不要使用 SharedValues sharedValues = new SharedValues (); 这将给出类 SharedValues 的新实例,但不会达到目的。

关于java - 如何从另一个类获取 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56431841/

相关文章:

c# - UDP有时收不到东西

Java InputStream NullPointerException 与 InputStream

java - 将对象本身 (this) 传递给字段的方法是一种糟糕的方法吗?

udp - Netty UDP 服务器引导

java - UDP聊天问题

java - 一些java Datagram Socket问题

sockets - 网络编程中流和数据报有什么区别?

Java ArrayList 将当前项目添加到上一个项目;删除当前项目

java - 无法创建构造函数

xcode - 我正在使用 Xcode 快速编写一个基本的命令行(UDP)服务器/监听器。 #GCDAsyncUdpSocket 不会调用我的任何代表