Zitat von
Neutral General:
Ja ich denke das würde gehen aber geht es nicht anders ?
Im Notfall würde ich das machen ...
Das mit dem Server beim Client lass mal, das wird nix. Gesetzt den Fall du wolltest das Ding im Inet betreiben und sitzt hinter nem router(gilt natürlich auch für andere User), würdest du durch den router durch keine Connection zu deinem Server(dem beim Client hinkriegen. Der router sperrt i.d.R. jeden Zugang von außen.
Nun zum problem mot dem lesen beim Client. Die beste und auch einfachste Lösung ist es, einen Timer zu benutzen. 300ms haben sich als praktikabler Wert erwiesen. Den initialisiertst du, bevor du den Client-Connect durchführst.
Das sieht als Code etwa so aus:
Delphi-Quellcode:
{/////////////////////////////////////////}
{*** data available and read/send data ***}
{/////////////////////////////////////////}
function NetworkDataAvailable(ACon: TIdTCPConnection): boolean;
begin
RWSynchro.BeginRead; {*** darf auch TCriticalSection sein ***}
if ACon.Connected then begin
Result := ACon.InputBuffer.Size > 0;
if not Result then begin
try
ACon.ReadFromStack(False, 1, False);
Result := ACon.InputBuffer.Size > 0;
except
Result:= false;
end;
end; // of if not Result then begin
end // of if ACon.Connected then begin
else Result := False;
RWSynchro.EndRead;
end; // of function NetworkDataAvailable(ACon: TIdTCPConnection): boolean
procedure TChatClt.LookForData(Sender: TObject);
begin
if FTCPClient.Connected then begin
FDataAvailable:= NetworkDataAvailable(FTCPClient);
if FDataAvailable then DoReceiveData;
end; // of if FTCPClient.Connected then begin
end; // of procedure TChatClt.LookForData(Sender: TObject)
procedure TChatClt.DoReceiveData(Sender: TObject);
var
FStream: TMemoryStream;
begin
FStream:= TMemoryStream.Create;
{*** hier daten einlesen, am prakikabelsten ist ein stream ***}
{*** dann können auch verschlüsselungen benutzt werden ***}
{*** Bsp.: ***}
FTCPClient.ReadStream(FStream, -1, false);
{*** ab hier verarbeiten ***}
end;
Es gibt keinen schöneren Tag als den heutigen. Der gestrige ist vorbei und von den kommenden weiß man nicht was sie bringen.