Dobry den,
Mam problem pri sprave vice klientu na TCP serveru za pouziti asynchronnich socketu.
Spojeni s jednim klientem a prijem dat od nej vypada takto:
private void Pripoj(IAsyncResult result)
{
Socket socketKlienta = listenerSocket.EndAccept(result);
if (socketKlienta.Connected)
{
klient = vytvorKlienta(socketKlienta);
navazanaSpojeni.Add(klient);
aktualizujKlienty();
socketKlienta.BeginReceive(klient.buffer, 0, klient.buffer.Length, SocketFlags.None, new AsyncCallback(PrijemDat),
klient);
listenerSocket.BeginAccept(new AsyncCallback(Pripoj), null);
}
}
private void PrijemDat(IAsyncResult result)
{
Klient aktualniKlient = (Klient) result.AsyncState;
Socket socketKlienta = klient.getSocket();
int recv = socketKlienta.EndReceive(result);
String text = Encoding.ASCII.GetString(klient.buffer);
preposli(text, aktualniKlient.getCislo());
socketKlienta.BeginReceive(klient.buffer, 0, klient.buffer.Length, SocketFlags.None, new AsyncCallback(PrijemDat),
klient);
problem je v tom ze kdyz se pokusim prijmout data od jineho nez posledne prihlaseneho klienta, vyhodi mi program v radku int recv = socketKlienta.EndReceive(result); vyjimku (objekt IAsyncResult nebyl vracen z odpovidajici asynchronni metody pro tuto tridu). Asynchronni metody jsem pochopil tak, ze bezi paralelne, tak nechapu jak se tam muze dostat spatny objekt, ktery je tedy pravdepodobne vzdy vracen z posledni zavolane metody beginRecieve, pri prihlaseni posledniho klienta.
Dekuji za rady a napady, jak tento problem resit.