AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCPServer hängt sich nach Exception auf
Thema durchsuchen
Ansicht
Themen-Optionen

TCPServer hängt sich nach Exception auf

Ein Thema von s.h.a.r.k · begonnen am 28. Aug 2006 · letzter Beitrag vom 29. Aug 2006
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

TCPServer hängt sich nach Exception auf

  Alt 28. Aug 2006, 10:10
Guten Morgen,

gleich mal vorweg: Indy10 - mit Delphi 2005 installiert...

nun zu meinem Problem: Und zwar habe ich einen Client und einen Server erstellt, der eigentlich recht gut funktioniert. Bis auf das eine kleine, aber entscheidende Problem: Wenn mindestens ein Client mit dem Server verbunden ist und ich beim Server den Befehl:Server.Active := False; ausführe, d.h. den Server herunterfahren will, hängt sich das Server-Programm komplett auf. Selbst wenn ich das Programm debugge geht nichts mehr vorwärts, genau ab dem oben genannten Befehl. Ein paar weitere Infos: CPU-Last ist gleich null, Server ist von einem Client nich mehr erreichbar, d.h. er ist offline.

Ich weiß nicht mehr woran das ganze liegen kann... Ich hab bisher ein kleines WorkArround geschrieben, das bevor ich den oben genannten Befehl aufrufe, jedem Client eine Message schickt, auf die der Client automatisch vom Server disconnected, d,h. Client.Disconnect aufruft. Aber das kann es in meinem Augen doch nicht sein?!

PS: Ein ähnliches Thema habe ich zwar gefunden, aber ist das auch auf mein Problem anwendbar? (Link)

Wenn ihr Code braucht, kann ich den gerne noch anhängen, nur bin ich grad am Internet-Rechner und hab ihn nich parat!

Ich hoffe einer von euch kann mir da weiter helfen!

mfg Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: TCPServer hängt sich nach Exception auf

  Alt 28. Aug 2006, 11:17
Das Problem hatten wir schonmal glaub ich.

Hier die lösung du must im Ereignis OnBeforDisconnect erst alle Clients rauschmeisen
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: TCPServer hängt sich nach Exception auf

  Alt 28. Aug 2006, 12:54
Finde das Ereignis irgendwie nicht?! Oder bin ich nur zu blöd zum finden?!

Hab grad außerdem mal in der DP nach dem Begiff "OnBeforDisconnect" gesucht, aber nix gefunden! Kannst du mir da eventuell weiterhelfen?! wäre echt klasse, bin total am verzweifeln
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#4

Re: TCPServer hängt sich nach Exception auf

  Alt 28. Aug 2006, 12:56
Also sollte es nur daran scheitern, das heisst auch nicht "OnBeforDisconnect" sondern Hier im Forum suchenOnBeforeDisconnect

Allerdings findet sich auch dazu nichts in der DP

  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: TCPServer hängt sich nach Exception auf

  Alt 28. Aug 2006, 14:28
@Meflin: Soweit war ich auch schon aber wie du schon gesagt hast - Fehlanzeige!

Allerdings habe ich die Lösung des Problems, jedenfalls ist bisher kein weiterer Fehler aufgetreten! Und zwar habe ich ja eine eigene Prozedur geschrieben, die mir den Server schließt:

Delphi-Quellcode:
// Variable Server ist vom Typ TIdTCPServer
// eventl. muss die Unit "IdContext" zu den uses-Klauseln hinzugefügt werden,
// weil das nicht automatisch gemacht wird
function StopServer: Boolean;
var
  CL : TList;
  i : Integer;
begin
  // auf diesen Teil kam ich durch den Tipp von franktron
  CL := Server.Contexts.LockList;
  try
    for i := 0 to CL.Count - 1 do
      Server.Contexts.Remove(ClientList.Items[0]);
  finally
    CL.Free;
    Server.Contexts.UnlockList;
  end;
  
  // Server schließen
  try
    Server.Active := False; // <-- hier trat bisher immer der Fehler auf
                            // d.h. das Programm stand hier komplett still
  except
    Result := False; end;

  if not Server.Active then
  begin
    Server.Bindings.Clear;
    Result := True;
  end
  else Result := False;
end;
Jetzt wäre es noch klasse, wenn das jemand von euch testen könnte und/oder Äußerungen, Kritik etc. posten könnte!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

Re: TCPServer hängt sich nach Exception auf

  Alt 28. Aug 2006, 16:51
Zitat:
Allerdings habe ich die Lösung des Problems, jedenfalls ist bisher kein weiterer Fehler aufgetreten! Und zwar habe ich ja eine eigene Prozedur geschrieben, die mir den Server schließt:
ich habe leider bei meinem Problem keinen Einfluss auf die Quelltexte der Serversoftware.

http://www.delphipraxis.net/internal...ighlight=ntdll

Es funktionierte ja auch bis einschließlich Delphi6 einwandfrei.

Um schlussfolgern zu können, ob es sich um dasselbe Problem handelt, wäre es nun sehr interessant, ob Deine ALTE Lösung mit Delphi6 funktioniert, falls Du die Möglichkeit hast, das auf Delphi 6 zu testen.

Vielen Dank, falls Du mal Zeit dafür finden solltest, genau das zu testen !

Gruß stoxx
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

Re: TCPServer hängt sich nach Exception auf

  Alt 29. Aug 2006, 10:56
Habe hier auf der Arbeit sogar Delphi 6 - wenn ich Zeit habe teste ich es gern mal für dich, ALLERDINGS liege ich in meinem Zeitplan, bedingt durch dieses bescheidene Problem ca 2 Wochen zurück - gerechtnet auf die 11 Wochen, wo ich hier bin ist das leider sehr viel. Daher weiß ich net ob ich dazu komme! Aber ich werds probieren.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz