![]() |
Re: Connection Closed Gracefully.
Beim ersten durchlauf klappt unter beiden Systemen das ganze Problemlos. Probleme gibts erst im zweiten durchlauf.
|
Re: Connection Closed Gracefully.
Zitat:
Zeig doch mal den umgebauten, Threadsaven Code, warum das nicht gehen soll ist mir ein Rätsel. Der beschriebene Fehler mit IO tritt in Deinem Sample nur dann auf wenn was mit der Threadsynchronisierung nicht stimmt. Du hast doch synchronisiert, oder? lg. Astat |
Re: Connection Closed Gracefully.
Ich habe leider keine Ahnung von Threadsaving aber mein aktueller Code sieht so aus:
Delphi-Quellcode:
procedure TServer.IdTCPServer1Execute(AThread: TIdContext);
var Data : String; StrArr : TDynStringArray; ini : TIniFile; f : TextFile; Files : string; y,m,d : Word; begin with AThread.Connection do begin DecodeDate(Now,d,m,y); Files := Format('log\%.2d-%.2d-%.2d.txt',[y,m,d]); AssignFile(f, Files); if FileExists(Files) then Append(f) else Rewrite(f); Data := String(Socket.ReadLn); Data := Trim(Data); if Length(Data) > 0 then begin StrArr := Explode('|', Data); if StrArr[0] = 'login' then begin if StrArr[3] = Clientver then begin if FileExists('accounts\'+StrArr[1]+'.ini') then begin ini := TIniFile.Create('accounts\'+StrArr[1]+'.ini'); try if StrArr[2] = ini.ReadString('Login','Passwort','') then begin Socket.WriteLn('login'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' hat sich eingeloggt.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' hat sich eingeloggt.'); end else begin Socket.WriteLn('invalid'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' falsches Passwort.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' falsches Passwort.'); end; finally ini.free; end; end else begin Socket.WriteLn('na'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert nicht.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert nicht.'); end; end else begin Socket.WriteLn('version'); end; end; if StrArr[0] = 'register' then begin if FileExists('accounts\'+StrArr[1]+'.ini') then begin Socket.WriteLn('vorhanden'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert bereits.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert bereits.'); end else begin try ini := TIniFile.Create('accounts\'+StrArr[1]+'.ini'); ini.WriteString('Login','Passwort',StrArr[2]); ini.WriteString('Login','E-Mail',StrArr[3]); finally Socket.WriteLn('erfolg'); ini.free; WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' wurde registriert.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' wurde registriert.'); end; end; end; end; end; CloseFile(f); end; |
Re: Connection Closed Gracefully.
Hallo, als Brutalmethode kannst du folgendes verwenden!?
Delphi-Quellcode:
lg. Astat
var
_Sync: TRTLCriticalSection; procedure TServer.IdTCPServer1Execute(AThread: TIdContext); var Data : String; StrArr : TDynStringArray; ini : TIniFile; f : TextFile; Files : string; y,m,d : Word; begin EnterCriticalSection(_Sync); try with AThread.Connection do begin DecodeDate(Now,d,m,y); Files := Format('log\%.2d-%.2d-%.2d.txt',[y,m,d]); AssignFile(f, Files); try if FileExists(Files) then Append(f) else Rewrite(f); Data := String(Socket.ReadLn); Data := Trim(Data); if Length(Data) > 0 then begin StrArr := Explode('|', Data); if StrArr[0] = 'login' then begin if StrArr[3] = Clientver then begin if FileExists('accounts\'+StrArr[1]+'.ini') then begin ini := TIniFile.Create('accounts\'+StrArr[1]+'.ini'); try if StrArr[2] = ini.ReadString('Login','Passwort','') then begin Socket.WriteLn('login'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' hat sich eingeloggt.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' hat sich eingeloggt.'); end else begin Socket.WriteLn('invalid'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' falsches Passwort.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' falsches Passwort.'); end; finally ini.free; end; end else begin Socket.WriteLn('na'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert nicht.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert nicht.'); end; end else begin Socket.WriteLn('version'); end; end; if StrArr[0] = 'register' then begin if FileExists('accounts\'+StrArr[1]+'.ini') then begin Socket.WriteLn('vorhanden'); WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert bereits.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert bereits.'); end else begin try ini := TIniFile.Create('accounts\'+StrArr[1]+'.ini'); ini.WriteString('Login','Passwort',StrArr[2]); ini.WriteString('Login','E-Mail',StrArr[3]); finally Socket.WriteLn('erfolg'); ini.free; WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' wurde registriert.'); WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' wurde registriert.'); end; end; end; end; end; finally CloseFile(f); end; finally LeaveCriticalSection(_Sync); end; end; initialization DateSeparator := '.'; InitializeCriticalSection(_Sync); finalization DeleteCriticalSection(_Sync); end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz