如何避免调用冗余函数
How to avoid call a function in redundancy
我编写了一个代码,允许我在客户端和服务器之间交换消息。我 运行 在 class 服务器中的 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 协议上做到这一点的方法?
The problem in your code is that it allows to receive a packet from
client only once as far now.
而且,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() 函数
我编写了一个代码,允许我在客户端和服务器之间交换消息。我 运行 在 class 服务器中的 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 协议上做到这一点的方法?
The problem in your code is that it allows to receive a packet from client only once as far now.
而且,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() 函数