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

时间:2015-01-18 17:52:54

标签: java while-loop udp

我制作了一个允许我在客户端和服务器之间交换消息的代码。我在类服务器中运行一个while循环,检查客户端是否在此时调用Checking()函数向服务器发送了一个数据包。 这个Checking()函数允许我控制一些特定的客户端。但是有一个问题,特别是函数调用在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协议上执行此操作?

1 个答案:

答案 0 :(得分:0)

  

您的代码中的问题是它允许从中接收数据包   客户现在只有一次。

而且,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循环的每次迭代中,它都会一直等到收到数据报包。只有这样它才会打印出数据并调用 checking()函数