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