0
我想知道是否有使用DatagramPacket的UDP消息的OnMessage()類型的功能類型?我希望能夠確保在遇到問題時能夠收到所有消息,這樣我就不會浪費資源隨機抓取定時器。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);
}
}
請參閱OP編輯。 – Tacitus86
然後,你應該全部設置,因爲socket.receive()將使JVM訂閱OS套接字,並且一旦到達就會獲取數據。 沒有計時器參與,沒有資源「浪費」。 – zeppelin
問題是我似乎缺少數據包。他們來得太快或什麼? – Tacitus86