Witam
Robię sobie programik, który komunikuje się po udp. Czyli tworzę serwer UDP i czekam aż coś przyjdzie na port. Znalazłem rozwiązanie, które pozwala na obsługę jednego klienta w danym czasie, ale potrzebuję obsłużyć w jednym czasie wielu klientów i tutaj mam już problem. Nakombinowałem się sporo, ale ciągle mi nie wychodzi.
Kod metody, która nasłuchuje:
private void Sluchaj()
{
try
{
udpState = new UdpState();//Klasa która przechowuje obiekty: UdpClient, IPEndPoint i tablicę bajtów odebranych danych
udpState.IPEndPoint = new IPEndPoint(IPAddress.Any, port);
udpState.UdpClient = new UdpClient(udpState.IPEndPoint);
while (listening && (udpState.UdpClient.Client != null && udpState.UdpClient.Available <= 0))//czekam kiedy na porcie pojawią się jakieś dane, w przeciwnym razie od razu wchodzi do metody OnClientConnect
{
Thread.Sleep(15);
}
udpState.UdpClient.BeginReceive(new AsyncCallback(OnClientConnect), udpState);
}
}
catch (Exception se)
{
}
}
Metoda OnClientConnect:
private void OnClientConnect(IAsyncResult ar)
{
try
{
UdpState udpStateTMP = (UdpState)ar.AsyncState;
udpStateTMP.buffer = udpStateTMP.UdpClient.EndReceive(ar, ref udpStateTMP.IPEndPoint);
udpStateTMP.UdpClient.Connect(udpStateTMP.IPEndPoint);
ThreadStart threadStart = delegate { new UDPKlient(udpStateTMP); };
Thread watek = new Thread(threadStart);
watek.Start();
}
catch (Exception ex)
{
}
finally
{
udpState = null;
if (listening)
Sluchaj();
}
}
Więc reasumując, chciałbym dla każdego zgłoszenia stworzyć sobie osobną klasę UDPKlient, która będzie realizowała połączenie z konkretnym klientem który się zgłosił.
Trochę się w tym wszystkim pomotałem i potrzebuję pomocy :(
Z góry dzięki :)