首页 > 解决方案 > DatagramSocket如何每次都接收数据包并且不卡住

问题描述

我创建了一个 DatagramSocket。当我在等待数据包时,在收到数据包之前我什么都做不了。如果我想做一些事情,比如在等待数据包时打印一些东西。我该怎么做?

这是我的代码。

private DatagramSocket socket = new DatagramSocket(8080);
private DatagramPacket packet = new DatagramPacket();
bool b = true;
int x = 0;

do {
  socket.receive(packet);
  //if I receive a packet, print the payload of the packet
  System.out.println(x);
  x++;
} while (b);

我想继续打印“x”。如果我收到一个数据包,我将打印数据包的有效负载。

或者

我可以把接收功能放在后台吗?当我收到一个数据包时,我会立即打印它。

标签: javasocketsudp

解决方案


对于这种情况,您可以使用线程。您将主线程提供给无限循环,这样您就无法在循环之外执行任何操作。如果您再创建一个线程并将其用于接收数据包,那么您的主线程可以做其他工作。


推荐阅读