AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Pakete über Sockets versenden, Thread hängt sich auf

Pakete über Sockets versenden, Thread hängt sich auf

Ein Thema von Jackie1983 · begonnen am 3. Jun 2009 · letzter Beitrag vom 4. Jun 2009
 
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

Pakete über Sockets versenden, Thread hängt sich auf

  Alt 3. Jun 2009, 12:08
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
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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