0
DatagramPacketを使用するUDPメッセージにOnMessage()タイプの機能があるかどうか疑問に思っていましたか?私はすべてのメッセージが届くようにしたいので、タイマーでランダムにリソースを浪費することはありません。UDPのOnMessage()機能
OnMessage私はWebSocketClientで行われたものを指しています。あるいは、.netの "Available"に類似した機能です。
While (rxUdpClient.Available > 0)
いくつかのポートを監視しているので、各ポートに対してrun()を実行するスレッドが呼び出されます。問題は、私は40 +/secという大きな速度でメッセージが入っているようです。
これは私が現在持っているものです。
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