Java 如何避免在冗余中调用函数

Java 如何避免在冗余中调用函数,java,while-loop,udp,Java,While Loop,Udp,我编写了一个代码,允许我在客户端和服务器之间交换消息。我在类服务器中运行了一个while循环,检查客户端是否在此时向服务器发送了一个数据包调用检查函数。 这个检查功能允许我控制一些特定的客户端。但是有一个问题,特别是函数调用在while循环中,所以即使客户端没有向服务器发送任何东西,代码当然也总是调用Checking函数 我如何避免这种重复回调? 如果客户机真的发送了一条消息来构造一个条件,那么会有一些事情要看吗? 问题示例: While(true) { String messaggio

我编写了一个代码,允许我在客户端和服务器之间交换消息。我在类服务器中运行了一个while循环,检查客户端是否在此时向服务器发送了一个数据包调用检查函数。 这个检查功能允许我控制一些特定的客户端。但是有一个问题,特别是函数调用在while循环中,所以即使客户端没有向服务器发送任何东西,代码当然也总是调用Checking函数

我如何避免这种重复回调? 如果客户机真的发送了一条消息来构造一个条件,那么会有一些事情要看吗? 问题示例:

While(true)
{
    String messaggio = (new String(ricevuta.getData()).trim());
    System.out.println("Client says: " + messaggio);
    Checking();
}
控制台结果:

Client says: hello
10
10
10
10
10
10
10
**infinite loop.**
我的想法是:

if Client send something => run Checking(); function<br>
else continue;
谁能帮我一个忙?在UDP协议上有这样做的方法吗

代码中的问题是它允许从 到目前为止,客户端只运行过一次

而且,while循环只是打印接收到的数据包中的数据。它似乎没有收到新的数据包

while(true)
{
    String messaggio = (new String(ricevuta.getData()).trim());   
    System.out.println("Client says: " + messaggio);
    Checking();
}
相反,它应该类似于下面的示例:

byte[] receiveData = new byte[1024];
DatagramPacket ricevuta= new DatagramPacket(receiveData,receiveData.length);
while(true)
{
    datagramSocket.receive(ricevuta);     //waits here until any packet is received
    String messaggio = (new String(ricevuta.getData()).trim());   
    System.out.println("Client says: " + messaggio);
    Checking();
}

所以,现在在while循环的每次迭代中,它都会等待直到收到一个数据报包。只有这样,它才会打印数据并调用检查函数

当客户端不发送任何内容时,ricevuta.getData返回什么?它还会回来吗如果字符串的长度为0,则跳过检查。我添加了:ifmessaggio.length>0{Checking;}else{continue;}但是循环会继续无限长,否则为什么会停止?您的代码——就像现在一样——永远不会终止,除非抛出异常。