Ich verwende den folgenden Code, um eine Nachricht zu empfangen (ich benutze diesen Weg, weil ich etwas mache, während ich auf die Nachrichten warte) Aber ich habe diese Verbindung getestet und sende Nachrichten sehr nahe einander, aber es scheint, als ob einer von ihnen verloren geht. Ich habe keine Ahnung, wie ich das beheben kann. Wie kann ich die Option 'Puffer lesen' oder etwas Ähnliches aktivieren?Puffer für asynchrone Udp-Nachrichten
Dank .. hier ist der Code:
// Funktion UDP-Nachricht
public static void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
//IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;
Byte[] receiveBytes = u.EndReceive(ar, ref IpEndPoint_groupEP);
received_data_from_client = Encoding.ASCII.GetString(receiveBytes);
messageReceived = true;
Logger("Received a message from : " + IpEndPoint_groupEP.ToString());
u.Close();
}
public static void ReceiveMessages()
{
IpEndPoint_groupEP.Address = (IPAddress.Any);
IpEndPoint_groupEP.Port = listenPort;
//IPEndPoint e = new IPEndPoint(IPAddress.Any, listenPort);
UdpClient u = new UdpClient(IpEndPoint_groupEP);
UdpState s = new UdpState();
s.e = IpEndPoint_groupEP;
s.u = u;
u.BeginReceive(new AsyncCallback(ReceiveCallback), s);
while (!messageReceived)
{
Thread.Sleep(50);
Console.writeLine("Hello")
}
Ich habe die u.close zu erhalten, da diese Funktion mehr als ein aufgerufen wird. Ich habe eine while-Schleife, also liest das Programm die Nachrichten und macht etwas mit der Nachricht. Wenn es fertig ist, springt es zurück und ruft die Funktion ReceiveMessages auf, um mit dem Lesen einer anderen Nachricht zu beginnen. Und im Grunde, wenn das Programm keine Nachricht erhalten hat, ruft es "Hallo"
Es funktioniert wie ein Charme. Allerdings merkte ich, wenn zwei oder mehr Nachrichten zur gleichen Zeit ankommen, es liest nur eine von ihnen und ich verliere die anderen
Sie 'u.Close()' in 'ReceiveCallback', warum erwarten Sie, dass es mehr als einmal funktioniert? –
Sorry, ich habe gerade aktualisiert .. – George