java - 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”。如果我收到一个数据包,我将打印数据包的有效负载。
或者
我可以把接收功能放在后台吗?当我收到一个数据包时,我会立即打印它。
解决方案
对于这种情况,您可以使用线程。您将主线程提供给无限循环,这样您就无法在循环之外执行任何操作。如果您再创建一个线程并将其用于接收数据包,那么您的主线程可以做其他工作。
推荐阅读
- excel - 每次将公式中的数字加 2
- android - 无法使用 AndroidViewModel 超类和 Room 获取数据库的实例
- php - 如何根据其输入显示小数位数?
- amazon-web-services - 将 dockerfile 部署到 AWS Fargate(在 AWS 上构建 docker 映像)
- global-variables - 我想在创建日期搜索变量后进行新的变量搜索,但使用搜索日期中的搜索结果
- ios - Travis CI,Xcode - 使用 xcpretty 时未进一步传递退出命令
- memory - WebAssembly 中最大内存限制的含义是什么?
- azure-devops - VSTS SonarQube 端点失败取决于创建它的用户
- javascript - AngularJS - 在模块中检索 localStorage
- list - 如何获得列表序言中元素数量的一半