Я получаю сообщение (я использую этот способ, потому что я делаю что-то во время ожидания сообщений). Но я тестировал это соединение, и я отправляю сообщения очень близко к друг другу, но кажется, что один из них потерялся. Я не знаю, как это исправить. как я могу включить параметр «read buffer» или что-то подобное?Буфер для сообщений async Udp
спасибо .. вот код:
// функция для получения UDP сообщение
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")
}
Я имею u.close, потому что эта функция вызывается более после этого один. У меня есть цикл while, поэтому программа считывает сообщения и делает что-то с сообщением, а затем, когда это делается, он возвращается назад и вызывает функцию ReceiveMessages, чтобы начать читать другое сообщение. И в основном, когда программа не получила сообщение, она выкрикивает «Hello»
Это работает как шарм. Однако я понял, что при одновременном получении двух или нескольких сообщений, только чтение одного из них, и я теряю другие
Вы выполняете 'u.Close()' в 'ReceiveCallback', почему вы ожидаете, что он будет работать более одного раза? –
Извините, я только что обновил .. – George