Servus,
meine Client/Server Anwendung hat bei der übertragung der Pakete noch ein kleines Problem.
Wenn ich meine Anwendung über Nacht laufen lasse, kommen irgend wann in der Nacht keine Pakete mehr an.
Der Client sendet alle 500ms ein Testpaket.
Der Server bringt nur die Meldung "Thread Fehler Zugriff verweigert (5)"
Jetzt weis ich aber nicht genau wo der Thread hängen bleibt oder wieso.
Das ist meine Methode um die Pakete zu empfangen und dem Thread zu übergeben.
Delphi-Quellcode:
procedure TThreadServer.OnSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
sBuffer,sJob,s : string;
index : integer;
cmd,ccmd : TCommandHandling;
cd : TClientData;
begin
sBuffer := Socket.ReceiveText;
//Sammeln von Jobs bis diese komplett sind
index := fBufferJobs.IndexOfObject(socket);
if index = -1 then
begin
fBufferJobs.AddObject(sBuffer,socket);
index := fBufferJobs.Count-1;
end else
fBufferJobs.Strings[index] := fBufferJobs.Strings[index] + sBuffer;
//Wenn komplett weiter zur Jobverarbeitung
sJob := '';
s := fBufferJobs.Strings[index];
while Pos(#13#10,s) <> 0 do
begin
sJob := copy(s,0,Pos(#13#10,s)+1); //ersten befehl auslesen
Delete(s,1,length(sJob)); //befehl löschen aus kette
fBufferJobs.Strings[index] := s; //rest wieder zurück
if s = '' then begin //leer, dann löschen
fBufferJobs.Objects[index] := nil;
fBufferJobs.Delete(index);
end;
//Systembefehl? wenn ja direkt verarbeiten und den rest weiter
//zur jobverabeitung weitergeben.
if sJob <> '' then
begin
cmd := TCommandHandling.Create(CMDNone,'');
cmd.SetFrames(sJob);
case cmd.GetCmd of
SYS_ALIVE : begin
//...
end;
SYS_PING : begin
//...
end;
SYS_AUTHKEY : begin
//...
end;
CMDError : begin
//...
end;
else //kein systembefehl weiter bearbeiten
fJobThread.AddJobToSocket(socket,sJob);
end;
cmd.Free;
end;
end;
end;
Die Befehle werden in dieser Art versendet (sJob)
Zitat:
Befehl#13Parameter1#13Par2#13Par3#13#10
Eventuell kann mir ja einer einen Tipp geben.
Mfg