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