hi!
danke für die schnell antwort so früh am morgen
das problem ist dass mein ganzer source mittlerweile schon so umfangreich ist, dass ich selbst so langsam den Überblick verliere...
also es handelt sich um die idTCPClient von Indy. ein anderes tool hat entsprechend den tcp server dazu, die kommunikation funktioniert einwandfrei, nur manchmal kommt eben diese fehlermeldung, und dann hat der client auch keine daten empfangen. eigentlich ist das kein problem, meine software probiert immer und immer wieder neu zu verbinden und daten zu empfangen, normalerweise funktioniert es dann beim zweiten anlauf schon. wenn die meldung aber kommt, is das ganze programm erstmal auf pause, bis ich die meldung wegklicke.
hier mal eine vereinfachte version von meinem quelltext...irgendwo in der prozedur wird manchmal der fehler produziert. client teilt dem server name, version etc mit und empfängt dann nacheinander strings bis der server das stop sendet.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
| procedure TForm1.IdTCPClient1Connected(Sender: TObject); var s: String;
begin
s := IdTCPClient1.ReadLn;
if AnsiSameText(s, 'Clientname?') then begin IdTCPClient1.WriteLn('client: ' + clientnamefeld.text); s := IdTCPClient1.ReadLn; if AnsiSameText(s, 'Hallo ' + clientnamefeld.text + '. Version?') then begin idtcpclient1.WriteLn('version: ' + IntToStr(version)); end;
s := IdTCPClient1.ReadLn; if AnsiSameText(s, 'Deine Version ist ' + IntToStr(version) + '. Welches Modul willst du laden?') then begin idtcpclient1.WriteLn('modul: ' + modulname); end;
s := IdTCPClient1.ReadLn;
if pos(s, 'newversion:') = 0 then begin speed:=StrtoInt(copy(s, 10, length(s))); setspeed('nil'); end;
s := IdTCPClient1.ReadLn;
if AnsiSameText(s, 'start') then begin
while s<>'stop' do begin s := IdTCPClient1.ReadLn;
if AnsiSameText(s, 'stop') then begin idtcpclient1.Disconnect; cache.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp\' + modulname + '.cache'); label13.Caption:='Cached: ' + IntToStr(cache.count); label16.Caption:='Last Load: ' + Copy(TimeToStr(now), 0, 5);
clientread.Enabled:=false; end
else begin
if AnsiSameText(s, 'stopcomplete') then begin stopprocess('stop'); end else cache.Add(s); end;
cache.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp\' + modulname + '.cache'); label13.Caption:='Cached: ' + IntToStr(cache.count);
end; inprogress:=false; end; end; end; |
ich weiß das der quelltext ansich nicht gerade der performanteste ist und ich sicher an vielen ecken und enden noch fehler abfangen müsste, aber die software läuft eigentlich problemlos. Ich muss nur die meldung loswerden, entweder von anfang an unterdrücken/abfangen oder eben wegdrücken/abschießen wenn sie kommt, da sie für den problemlosen ablauf des tools nicht relevant ist.
Bin für jeden Tipp dankbar!
gruß
NoR