Einzelnen Beitrag anzeigen

hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

UDP Datentransfer

  Alt 27. Jun 2011, 16:13
Hallo,
ich habe mir eine Client-Server Lösung mit den Indy - UDP Komponenten gebaut.

Der Client und Server haben die gleiche Portadresse. Die IP Adresse ist für jeden Rechner fest eingestellt.
Der Server antwortet auf eine Datenübertragung mit ACK (Im Fehlerfall NoACK)
Fällt die Verbindung aus, weil z.B. der Server gestoppt wurde, dann sendet der Client zyklisch
eine Anfrage an den Server, bis dieser mit ACK antwortet.

Ich habe jetzt den eigenartigen Effekt das manchmal nach einer Verbindungsunterbrechung der Server die Daten empfängt und korrekt mit ACK beantwortet.
Die Information kommt aber nicht beim Client an.
Der Effekt tritt nur zeitweise auf. Ein Wechsel der Portadresse bringt nichts.
Hat wer eine Idee, woran das liegen kann ?

Der Client ist als Thread angelegt.

Delphi-Quellcode:
procedure TUPDClient.Execute;
var
    LCS: TCriticalSection;
begin
   NameThreadForDebugging('UDPTransfer');
   FClient.Active := true;
   //FClient.ReceiveTimeout := FTimeout;
   LCS := TCriticalSection.Create;

   while not (Terminated) do
   begin
     LRead := '';
     ReceiveString := '';
     if FClient.Active then
     begin
       LCS.Enter;
       try
         LRead := FClient.ReceiveString;
         ReceiveString := LRead;
       except
         ServerConnect := false;
       end;
       LCS.Leave;
     end;
     if (aState = udp_WaitServerRequest) and (TimerStart > 0) and (GetTickCount - TimerStart > Timeout) then
     begin
       aState := Err_UDPServerRequest;
       TimerStart := 0;
       runServerConnect := false;
       flagWaitServerRequest := false;
       Synchronize(ExecuteUDP);
       end;
     If Lread='then sleep(1)
     else
     begin
       TimerStart := 0;
       Synchronize(ExecuteUDP);
     end;
  end;
  LCS.Enter;
  if FClient.Active then
    FClient.Active := false;

  FClient.Free;
  LCS.Leave;
  LCS.Free;
end;
Hat wer eine Idee?

Gruß
Peter
  Mit Zitat antworten Zitat