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));
}