gpt4 book ai didi

java - UDP 的 OnMessage() 功能

转载 作者:行者123 更新时间:2023-12-01 09:20:03 26 4
gpt4 key购买 nike

我想知道是否有一种使用 DatagramPacket 的 UDP 消息的 OnMessage() 类型功能?我希望能够确保在遇到所有消息时都能收到它们,这样我就不会浪费资源随机抓取计时器。

OnMessage我指的是在WebSocketClient中完成的。或者一些类似于.net中的“可用”的功能。

While (rxUdpClient.Available > 0)

我正在监视多个端口,因此调用一个线程,该线程将为每个端口执行 run() 。问题是我的消息传入速度似乎高达 40+/秒。

这是我目前拥有的:

public void run()
{
DatagramSocket sock = null;
sock = new DatagramSocket(port);
byte[] buffer = new byte[DataAdapterFB1.HEADER_SIZE + DataAdapterFB1.MAX_DATA_BYTES];
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);

while (true){
sock.receive(incoming);
byte[] data = incoming.getData();
String s = new String(data, 0, incoming.getLength());
//This is the processing code, but it isn't its own thread...
ScadaMsg newMessage = new ScadaMsg(data);
}
}

最佳答案

DatagramPacket receive() 操作是阻塞的,因此您通常要做的就是启动一个单独的线程,它将循环监听传入的数据报并分派(dispatch)它们以进行进一步处理,就像这样:

void run() {
socket = new DatagramSocket(4445);

while(true) {
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); //JVM will wait here, until there is an incoming packet
onMessage(packet.getData())
}
}

public abstract void onMessage(final byte[] pkt);

关于java - UDP 的 OnMessage() 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40224944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com