Entwickler-Ecke

Internet / Netzwerk - Einseitiger Abbruch der Kommunikation TclientSocket/TServerS


IAhh - Mi 31.01.07 14:33
Titel: Einseitiger Abbruch der Kommunikation TclientSocket/TServerS
Hallo Forum!

Ich suche eine Lösung für ein etwas merkwürdiges Problem. Daher wäre ich Dankbar für jeden Sachdienlichen Hinweis!

Es geht um eine verteilte Anwendung bei der mehrere Clients über einen Server eher einfache TCP-Telegramme austauschen. Es geht dabei vorallem um den Austausch gewisser Stati und Aufträge.
Klappt bei vielen Kunden wunderbar!

Bei inzischen zwei speziellen Kunden passiert es nun von Zeit zu Zeit, dass die Nachrichten die der Client über den TClientSocket absetzt einfach verschwinden. D.H. der Socket sagt er ist connected, er empfängt Nachrichten vom Server und er tut beim senden so als würde er senden. Beim Server kommt aber nix an! Das geht dann ungehindert so weiter!
Diese Fehlersituation tritt nur ab und zu auf, die meiste Zeit (Stunden lang) geht alles ganz prima in beide Richtungen.
Das größte Dilemma ist, dass der Client zu nächst nicht merkt, dass der nix sendet...

- Fällt zu diesem Thema jemandem was ein?
- Gibt es bekannte grundsätzliche Probleme in den beteiligten Delphi-Komponenten?
- Kann sowas an bestimmten Netzwerkproblemen liegen? (Die anderen Systeme in den Netzen haben laut Kundenaussage keine Probleme)
- Hat jemand vielleicht schonmal so ein Problem gehabt und gelöst?

Wie gesagt, danke schonmal für jeden Hinweis!

Gruß, IAhh


Narses - Mi 31.01.07 15:03

Moin und :welcome: im Forum!

user profile iconIAhh hat folgendes geschrieben:
Bei inzischen zwei speziellen Kunden passiert es nun von Zeit zu Zeit, dass die Nachrichten die der Client über den TClientSocket absetzt einfach verschwinden. D.H. der Socket sagt er ist connected, er empfängt Nachrichten vom Server und er tut beim senden so als würde er senden. Beim Server kommt aber nix an! Das geht dann ungehindert so weiter!

Wenn kein OnError-Ereignis ausgelöst wird, dann liegt es auch nicht an der WSA bzw. den Socket-Komponenten; leider liegt der Fehler meistens in der Anwendung, vor allem wenn man im non-blocking-mode der Sockets arbeitet... :? :(

user profile iconIAhh hat folgendes geschrieben:
Das größte Dilemma ist, dass der Client zu nächst nicht merkt, dass der nix sendet...

Was heißt das denn? :gruebel: Merkt er es nun (-> OnError) oder nicht? :nixweiss: Dir ist aber sicherlich bekannt, dass TCP-Verbindungen erst nach einem Timeout Verbindungsabbrüche melden, oder? ;)

user profile iconIAhh hat folgendes geschrieben:
Gibt es bekannte grundsätzliche Probleme in den beteiligten Delphi-Komponenten?

Einziger mir bekannter "Bug" ist, dass das OnWrite-Ereignis nur genau einmal nach dem Connect eintritt, statt immer dann, wenn der Socket bereit für weitere Sendedaten ist; aber das benutzt sowieso fast keiner... ;)

Sonst funktionieren die Sockets eigentlich ganz genau so, wie von den Entwicklern beabsichtigt; allerdings sind die im non-blocking-mode nicht ganz soo einfach handzuhaben, wie das auf den ersten Blick aussieht. :? Aber hier kann man ohne den Code zu sehen keine weiteren Tipps geben. :|

user profile iconIAhh hat folgendes geschrieben:
Kann sowas an bestimmten Netzwerkproblemen liegen? (Die anderen Systeme in den Netzen haben laut Kundenaussage keine Probleme)

Da es sich um TCP-Verbindungen handelt, wird jeder Fehler in der Verbindung gemeldet, ganz sicher! 8) Wie du allerdings damit umgehst bzw. wie du mit den Timeout-Verzögerungen, die evtl. auftreten, klarkommst, das ist eine andere Frage. ;)

user profile iconIAhh hat folgendes geschrieben:
Hat jemand vielleicht schonmal so ein Problem gehabt und gelöst?

Die meisten Probleme liegen in der Signalisierung auf der Anwendungsebene, sprich die Ereignisse und die Gründe für das Eintreten dieser sind den Programmierern häufig nicht genau genug "bekannt"...

Da die Sockets recht nahe an der WSA gebaut sind und du TCP einsetzt, sehe ich eigentlich kaum Grund, das "Netzwerk" oder die Betriebssystemanbindung in Zweifel zu ziehen.

Fazit: Schau noch mal besser ganz genau deine Anwendung durch. ;) Sorry, aber das ist ernst gemeint. :zwinker:

cu
Narses