Witam
Od kilku dni tocze boje z komponentami TServerSocket i TClientSocket, w przeważającej mierze nawet udane. Mam dwa programy, jeden jest serwer a drugi klient. Oba ustawione są na NonBlocking connection a po każdym wysyłaniu wstawiam Sleep() dla pewności przesyłu. Do tej pory wszystko działało ale teraz dzieje się coś dziwnego. Wysyłam do dwóch różnych klientów ten sam pakiet jeden raz. Kiedy w Builderze sprawdzam krok po kroku to okazuje się, że klient otrzymuje pakiet, którego serwer nie wysyłał i to nawet trzy razy!! Tego nie potrafię zrozumieć a ponieważ krótko zajmuje się tymi komponentami i zagadnieniami sieciowymi nie potrafię znaleźć błędu.
Kod klienta:
unsigned long int head, size;
csClient->Socket->ReceiveBuf(&head, sizeof(head));
csClient->Socket->ReceiveBuf(&size, sizeof(size));
switch (head)
{
case IS_SERVERQUIT:
{
ShowMessage("Serwer został wyłączony");
Close();
break;
}
case IS_WAITTURN: // <- ten komunikat zostaje odebrany przez klienta trzy razy, ale ani razu przez serwer nie wysłany
{
btnEndTurn->Enabled = false;
frmWait->Show();
break;
}
case IS_STARTTURN:
{
btnEndTurn->Enabled = true;
frmWait->Hide();
break;
}
Kod serwera
SServerCommand cmd;
cmd.HeaderID = IS_STARTTURN;
cmd.DataSize = 0;
ssServer->Socket->Connections[0]->SendBuf(&cmd, sizeof(cmd));
Sleep(10);
cmd.HeaderID = IS_WAITTURN;
ssServer->Socket->Connections[1]->SendBuf(&cmd, sizeof(cmd));
Sleep(10);