Tworzę projekt strony, której zadaniem będzie wysyłanie wiadomości do konkretnego IP i portu. Funkcja którą stworzyłem ma wysłać dane, a następnie odebrać wiadomość czy przesłano poprawne parametry.

O ile z wysyłaniem nie ma problemu, to mam problem z samym odbiorem. Ogólnie żeby nie blokować cały czas portu mam funkcję odmierzającą limit czasu, po którym klient zakończy obsługę połączenia. Przed funkcją udpClient.Recieve, korzystam z funkcji udpClient.Available.

Z nią lub z samą funkcją Recieve nic nie odbieram, pomimo że program udpecho zainstalowany na drugim komputerze na pewno wysyła pakiety.

Poniżej wstawiam opisaną funkcję.

public AsyncFeedbackData AsyncSessionMethod(object sender, TelegramEventInfoAgrs infoArgs)
    {

            long lConnectionTimeLimit = 90000000;//ticks
            int iErrorNumber = 0;
            int dlugoscTelegramu = 5;

            UdpClient udpClient = new UdpClient; //nowe
            udpClient.DontFragment = true;
            byte[] rxByteBuffer = new byte[dlugoscTelegramu];
            byte[] txByteBuffer = infoArgs.trescTelegramu;
            try
            {
                while (bCommunicationLock == true)
                {
                    System.Threading.Thread.Sleep(5);
                }
                bCommunicationLock = true;
                if (udpClient.Client == null)
                {
                    udpClient = new UdpClient(CLIENT_PORT_NUMBER);
                    udpClient.DontFragment = true;
                }

                IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
                udpClient.Connect("150.254.145.57",CLIENT_PORT_NUMBER); 
                udpClient.Send(txByteBuffer, txByteBuffer.Length);

                long lTicks = DateTime.Now.Ticks;
                while (true)
                {
                    if ((DateTime.Now.Ticks - lTicks) < lConnectionTimeLimit)
                    {

                        if (udpClient.Available == 3)//dlugoscTelegramu)
                        {
                            rxByteBuffer = udpClient2.Receive(ref RemoteIpEndPoint);
                            break;
                        }
                    }
                    else
                    {
                        iErrorNumber = 1;
                        break;
                    }
                    System.Threading.Thread.Sleep(5);
                }
                udpClient.Close();
            }
            catch (Exception ex)
            {
                iErrorNumber = 2;
            }
            finally
            {
                if (udpClient != null) udpClient.Close();
            }
            if (iErrorNumber != 0) return (new AsyncFeedbackData(infoArgs,rxByteBuffer, iErrorNumber));
            return (new AsyncFeedbackData(infoArgs,rxByteBuffer, iErrorNumber));        
    }