AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TidTcpClient bekommt kein Disconnect

TidTcpClient bekommt kein Disconnect

Ein Thema von Softchaos67 · begonnen am 13. Nov 2008 · letzter Beitrag vom 14. Nov 2008
Antwort Antwort
Softchaos67

Registriert seit: 23. Jul 2004
39 Beiträge
 
Delphi 7 Enterprise
 
#1

TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 15:24
Hallo NG,
ich versuche mittels Thread und einer IdTcpClient Komponente (Indy10) Daten zu verarbeiten.
Die Daten kommen von einem entfernten Scanner.
Delphi-Quellcode:
procedure TNetzScannerThread.Execute;
begin
   inherited;
   while not (Terminated or Suspended) do try
      if TcpClient.Connected then begin
         if Msg <> 'then begin
            HandleInput; //Synchronize nicht nötig, da keine VCL betroffen
         end;
         Msg := TcpClient.IOHandler.ReadLn;
      end;
   except
   end;
end;
Fällt der Server (Scanner) aus weil man z.B. das Stromkabel zieht, dann liest der Client unbeirrt weiter, also TcpClient.IoHandler.ReadLn erzeugt weder eine Exception noch sonst einen Fehler.
TcpClient.Connected liefert immer noch true!
Wie kann ich die fehlende Servervebindung bemerken?

Danke
Gruss
Matthias
irgendwie gehts.....
  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
 
#2

Re: TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 15:42
schicke in regelmäßigen abständen pakete vom server zum client, wenn keines mehr ankommt, dann weißt du, dass da was faul ist. du solltest allerdings etwas warten bevor zu die verbindung vom client aus trennst, d.h. wenn du alle 2 sekunden ein paket schickst und nach 3*2 sekunden (ist nur ein beispiel) nichts kommt, dann trenne die verbindung. denn es kann ja sein, dass das netzwerk gerade mit was anderem beschäftigt ist.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Softchaos67

Registriert seit: 23. Jul 2004
39 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 15:45
Das kann ich so nicht machen.
Der Serverprozess ist eigentlich nur eine Schnittstelle zu einem seriellen Scanner. Die Daten vom Scanner werden über das Netzwerk an den angeschlossenen Client übertragen.
Auf den Serverprozess der Schnittstelle habe ich nur bedingt zugriff, kann also keine regelmässigen Pakete schicken.
Gibts denn keine Möglichkeit das fehlen des Servers zu bemerken?
Gruss
Matthias
irgendwie gehts.....
  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
 
#4

Re: TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 16:07
du kannst ihn natürlich pingen, was ja nichts anderes ist. nur kann es dann immer noch sein, dass die server-applikation nicht mehr sendet, aber der rechner physikalisch noch vorhanden ist und auf den ping antwortet.

hast du die server-applikation selbst programmiert oder nicht? kannst du der server-applikation irgendwie beibringen auf fragen zu antworten?! oder schickt die applikation nur in (regelmäßigen) abständen daten!? wie nimmst du kontakt mit der server-applikation auf?! ein paar mehr details wären da nicht ganz schlecht
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Softchaos67

Registriert seit: 23. Jul 2004
39 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 16:19
Nein, den Server hab ich nicht programmiert.
Das ist ein Moxa NPort Server. Der hat einen Netzwerkanschluss und 4 serielle Anschlüsse.
Für den Betriebsmodus kann man eben TCP Server einstellen.
An dem Moxa hängt ein Serieller Drucker und ein serieller Scanner.
Der Scanner scannt einen Barcode, der Moxa schickt das an meinen Client (mein Programm) der Client verarbeitet die
Daten und druckt auf dem Moxa Drucker ein Etikett aus.
Der Benutzer hat also keinen PC.
Ich verbinde mich beim Programmstart mit dem Moxa über die IP adresse und dem Port für den Scanner z.B.
10.10.10.101:4001 (erster Port auf dem Moxa)
Der Drucker wird über 10.10.10.101:4003 als Standart TCP Verbindung erreicht.
Ist der Moxa aus, kann man natürlich weder Scannen noch drucken. Aber mein Programm bemerkt das eben nicht!

Gruss
Matthias
irgendwie gehts.....
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.823 Beiträge
 
Delphi 2009 Professional
 
#6

Re: TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 17:34
Zitat von Softchaos67:
Ich verbinde mich beim Programmstart mit dem Moxa über die IP adresse und dem Port für den Scanner z.B.
10.10.10.101:4001 (erster Port auf dem Moxa)
Der Drucker wird über 10.10.10.101:4003 als Standart TCP Verbindung erreicht.
Ist der Moxa aus, kann man natürlich weder Scannen noch drucken. Aber mein Programm bemerkt das eben nicht!
Könnte dein Clientprogramm sich regelmäßig - z.B. alle fünf Sekunden - vom Server trennen und wieder verbinden? Ein erfolgloser Verbindungsversuch würde dann auffallen.
Michael Justin
habarisoft.com
  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: TidTcpClient bekommt kein Disconnect

  Alt 13. Nov 2008, 23:33
oder hast du eine passende dokumentation, in der steht, ob man dem server einen "ping" schicken kann? probier es doch einfach mal aus, was passiert, wenn du ihm was schickst? kommt dann was zurück? von mir aus "ping"?!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Softchaos67

Registriert seit: 23. Jul 2004
39 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: TidTcpClient bekommt kein Disconnect

  Alt 14. Nov 2008, 09:15
ping geht, sagt mir aber nichts über den Zustand der Ports(scanner) aus.
Ich hab das jetzt mit nem zyklischen Reconnect gelöst. alle 1000 Zyklen (ca. 50 sec) wird die Verbindug getrennt und dann
endlos versucht wieder zu connecten. Klappt soweit gut.
Falls der Server ausgeschaltet wird, wird halt am nächsten Morgen wieder verbunden.
Ich hätte halt gerne auf den Verbindungsverlust reagiert, kann aber auch so damit leben.
Danke für eure Unterstützung.
Gruss
Matthias
irgendwie gehts.....
  Mit Zitat antworten Zitat
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#9

Re: TidTcpClient bekommt kein Disconnect

  Alt 14. Nov 2008, 10:32
shark meinte was passiert wenn du den string "ping" an den server schickst, nicht wenn du ihn anpingst.
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Softchaos67

Registriert seit: 23. Jul 2004
39 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: TidTcpClient bekommt kein Disconnect

  Alt 14. Nov 2008, 11:02
ah so,
nein, da kann man schicken was man will. Da kommt nix zurück. Laut Doku ist das auch nicht vorgesehen.
Gruss
Matthias
irgendwie gehts.....
  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 14:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf