AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTCPClient LocalHost

Ein Thema von Question_mark · begonnen am 7. Dez 2010 · letzter Beitrag vom 28. Jul 2013
Antwort Antwort
Question_mark

Registriert seit: 20. Okt 2004
54 Beiträge
 
Delphi 2009 Professional
 
#1

TTCPClient LocalHost

  Alt 7. Dez 2010, 19:54
Hallo,

irgendwie blicke ich im Moment nicht durch und brauche mal einen Wink mit dem Gartenzaun.

Windows XP Prof SP3
Delphi 2009 Prof (mit allen Updates)

Ich habe mir eine Komponente geschrieben, die über TCP mit einem Gerät (betrachtet das Gerät als Blackbox, ich kann daran nichts ändern) kommuniziert. Damit die Kommunikation mit der BlackBox funktioniert, muss ich in das TCP Protokoll ein für diese BlackBox spezifisches Protokoll als Nutzdaten im TCP Protokoll einbetten. Das ist der Zweck der Kompo und das funktioniert auch ohne Probleme.

Also erzeuge ich in meiner Kompo dynamisch einen TTCPClientt aus dem Tab "Internet" (das Indy10 TidTCPClient Monster habe ich wieder rausgeschmissen) und versorge dynamisch alle Properties.

Im PC habe ich zwei Netzwerkkarten, 192.168.0.8 und 193.168.0.11
Und nun nach der langen Vorrrede endlich zum Problem. Egal was ich beim TCPClient als LocalHost eintrage, es wird immer der NIC mit der Adresse 192.168.0.8 verwendet. Ich lese nach dem connecten nochmal den LocalHost aus, da steht richtig 192.168.0.11 drin. Aber die Kommunikation findet immer über 192.168.0.8 statt. Erst wenn ich in der Systemsteuerung den NIC mit der Adresse 192.168.0.8 deaktiviere, läuft die Kommunikation wie gewünscht über 192.168.0.11. Wo ist das Schräubchen, an dem ich da drehen muss ???

Gruß

Question_mark
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TTCPClient LocalHost

  Alt 7. Dez 2010, 20:59
Guten Abend,

was ist die Ip-Adresse der Blackbox?

Auf welches Interface zeigt das default Gateway?
Wie sind die Netzmasken der Interfaces gesetzt?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Question_mark

Registriert seit: 20. Okt 2004
54 Beiträge
 
Delphi 2009 Professional
 
#3

AW: TTCPClient LocalHost

  Alt 7. Dez 2010, 21:46
Hallo,

zu 1) Also eigentlich gibt es sogar 2 Blackboxen 192.168.0.3 und 192.168.0.4
zu 2) Default Gateway ist mein DSL-Router mit 192.168.0.1
Aber vor dem Router sitzt ein Switch, an dem alle Geräte im LAN zusammenhängen, also es gibt
noch mehr als die oben angegebenen (Drucker, weitere PC). Ich habe diese zur Vereinfachung erstmal weg gelassen. Vom DSL Router geht ein Anschluß direkt zum Switch, der andere direkt zum Fernseher für IPTV.
zu 3) in meinem LAN haben alle Geräte den IP Bereich 192.168.0.xxx und dann natürlich auch 255.255.255.0 als Subnet mask

Gruß

Question_mark

Geändert von Question_mark ( 7. Dez 2010 um 21:57 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TTCPClient LocalHost

  Alt 7. Dez 2010, 21:59
zu 3) in meinem LAN haben alle Geräte den IP Bereich 192.168.0.xxx und dann natürlich auch 255.255.255.0 als Subnet mask
Aus deinem Beitrag #1:
Zitat:
Im PC habe ich zwei Netzwerkkarten, 192.168.0.8 und 193.168.0.11
Dann liegen beide Interfaces im gleichen Netz.
Warum sollte der TCPClient dann zwingend die höhere nehmen?

Edit1:
TCustomWinSocket.Localhost -> liefert die lokale Hostadresse
Quelle

Wenn der Client die TCP Verbindung aufbaut ist es unerheblich von welchem der beiden
Interfaces das geschieht.
Sollten die Interfaces in unterschiedlichen Netzen liegen, wird der Client (soweit das routing und die Netzmasken richtig eingestellt sind) das korrekte Interface wählen um das Zielsystem zu erreichen.

Grüße
Klaus
Klaus

Geändert von Klaus01 ( 7. Dez 2010 um 22:05 Uhr)
  Mit Zitat antworten Zitat
Question_mark

Registriert seit: 20. Okt 2004
54 Beiträge
 
Delphi 2009 Professional
 
#5

AW: TTCPClient LocalHost

  Alt 7. Dez 2010, 22:34
Hallo,

Zitat von Klaus01:
Warum sollte der TCPClient dann zwingend die höhere nehmen?

Zitat von Klaus01:
Edit1:
TCustomWinSocket.Localhost -> liefert die lokale Hostadresse
Tja, das passiert wenn die Properties anscheinend selbsterklärend sind ...
Da habe ich dann aufgrund des Namen LocalHost etwas hinein interpretiert. Und ja, jetzt fällt mir auf, bei den Indys heisst es explizit BoundIP.
Und genau darüber bin ich hier wohl gestolpert. Aber die Indy10 will ich mir nicht nochmal antun. Die Indy 9 Version war ja noch akzeptabel, aber mit Indy10 hat man sich da wohl etwas in eine Philosophie verrannt, die ich nicht mehr akzeptieren will.

Zitat von Klaus01:
Sollten die Interfaces in unterschiedlichen Netzen liegen, wird der Client (soweit das routing und die Netzmasken richtig eingestellt sind) das korrekte Interface wählen um das Zielsystem zu erreichen
Das ist dann wohl die "Metrik", die man bei den Netzwerken einstellen kann ?

Danke für den Wink mit dem Gartenzaun. Ich war (weil mir von Indy bekannt), der Meinung das der TCPClient die angegebene IP Adresse auch wirklich verwendet, aber nun ist mir das klar.

Gruß

Question_mark
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: TTCPClient LocalHost

  Alt 7. Dez 2010, 22:47
Also erzeuge ich in meiner Kompo dynamisch einen TTCPClientt aus dem Tab "Internet"...
Wieso dynamisch erzeugen? Ich halte das für eine Designschwäche.
Schreib' deine Komponente doch so, dass sie eine TTCPClient-Komponente übergeben bekommt.
Delphi-Quellcode:
TBlackboxProtokoll = class(TComponent)
...
published
  property TcpClient:TTCPClient read FTcpClient write SetTcpClient;
end;
Du kannst dir an den Komponenten TQuery, TDataSource und TDBGrid ein Beispiel nehmen.
Die Abhängigkeiten sehen so aus:
Code:
TDBGrid -> TDataSource -> TQuery
Mit dem Pfeil (->) wird eine Abhängigkeit dargestellt.
TDBGrid BENÖTIGT ein TDataSource, usw.
Bei deiner Komponente ist es das Gleiche:
TBlackboxProtokoll benötigt eine TTcpClient-Komponente für seine Arbeit.
  Mit Zitat antworten Zitat
Question_mark

Registriert seit: 20. Okt 2004
54 Beiträge
 
Delphi 2009 Professional
 
#7

AW: TTCPClient LocalHost

  Alt 8. Dez 2010, 00:00
Hallo,

Zitat von sx2008:
Schreib' deine Komponente doch so, dass sie eine TTCPClient-Komponente übergeben bekommt.
Ich habe den TCPClient im On Create meiner Komponente so erzeugt :

FTCPClient := TTCPClient.Create(Self);

Und zwar weil ich nicht alle Properties des TCPClients in meiner Komponente dem Anwender öffentlich machen will. Wenn ich den TCPClient in der von Dir vorgeschlagenen Weise implementiere, habe ich automatisch auch alle public properties in meiner Komponente mit veröffentlicht (sag ich jetzt mal aus dem Bauch heraus). Und wahrscheinlich auch alle Events. Und genau diese Events muss ich speziell behandeln, eben um diese BlackBox (Ok, es ist eine SPS) spezifische Protokoll wieder aus den TCP Nutzdaten zu extrahieren. Damit der Anwender im Endeffekt nur die Nutzdaten bekommt und sich nicht mit dem Protokoll auseinander setzen muss. Wie schon oben geschrieben, funktioniert das auch alles soweit. Eigentlich hat mir nur dieses Indy10 Monster missfallen, darum habe ich die aus dem Projekt rausgekegelt. Die Macher von Indy haben da beim Umstieg von Indy9 auf Indy10 Ihre Philosphie völlig geändert und sich da irgendwie verrannt. Bei Indy9 bekam ich bei einem Fehler einen Event gefeuert, den konnte ich nach meinem Belieben behandeln. Indy10 knallt selbst bei normalen Vorgängen Exceptions heraus, die nicht ohne Aufwand abzufangen sind (und nicht nur im Debugmodus). Bei Indy9 konnte ich im Event "OnError" selber entscheiden, wie ich darauf reagiere. Der Anwender meiner Komponente soll auf keinen Fall zur Laufzeit eine Fehlermeldung sehen. Wenn eine solche Meldung auftritt, möchte ich eben selber entscheiden, wie diese zu behandeln ist.
Im Moment überlege ich noch, ob ich beim D2009 TTCPClient bleibe oder wieder auf Indy9 zurück gehe.
Also Indy10 bleibt nach meinen bisherigen Erfahrungen aus dem Spiel, wenn ich solche Konstrukte hier sehe : TIdTCPClient.IdIOHandler.IdInterceptor.IdSocket.Id ..... krieg ich das Kotzen. Und die Hilfe zu Indy ist noch schlechter als die von Delphi, und die muss man erstmal unterbieten.

Ok, das Beispiel war jetzt etwas übertrieben, aber nur etwas ....

Aber danke für Deinen Hinweis, ich werde das auf jeden Fall morgen mal ausprobieren.

Gruß

Question_mark
  Mit Zitat antworten Zitat
Question_mark

Registriert seit: 20. Okt 2004
54 Beiträge
 
Delphi 2009 Professional
 
#8

AW: TTCPClient LocalHost

  Alt 8. Dez 2010, 23:34
Hallo,

Zitat von Question_mark:
Im Moment überlege ich noch, ob ich beim D2009 TTCPClient bleibe oder wieder auf Indy9 zurück gehe.
Hüstel, Räusper ..
Das war wohl nichts, denn Indy9 ist wohl für Delphi >= 2009 wegen Unicode nicht das geeignete Werkzeug. Das man bei der Installation von D2009 zwischen Indy9 und Indy10 wählen konnte, war wohl ein kleiner Betriebsunfall bei Embarcadingsbums.
Was habe ich bisher erkannt :
1) Indy9 nicht für D2009 geeignet wegen Unicode (unter D2006 war Indy9 eine gute Wahl).
2) Indy10 für mein Vorhaben nicht geeignet, alles oversized, bulky und junk.
3) TTCPClient aus D2009 verbindet sich über den NIC, den er möchte.

Dann habe ich heute mal die ICS (Version 7.54) von Francois Piette installiert und einen ganzen Tag die darin enthaltene Komponente WSocket getestet. Leider reagiert WSocket nicht auf vom Server gesendete "Keep Alive" Telegramme. Die werden vom ICS WSocket ignoriert. Die Folge ist natürlich, das der Server nach 10 Versuchen mit einem lockeren "RST" die Verbindung mit der Axt kappt...
Ich kann zwar in WSocket eigene "Keep Alive" erzeugen, die werden vom Server auch korrekt beantwortet. Allerdings besteht der Server natürlich zu Recht auf ein "ACK" bei einem vom Server gefeuerten "Keep Alive". Hier verhält sich WSocket nicht konform zu den RFCs. Vielleicht habe ich aber auch nur einige Properties übersehen, um das richtige Verhalten zu erzielen. Wenn ja, dann bitte ich Euch um entsprechende Infos. Google habe ich zu dem Thema ausreichend bemüht und auch die Homepage von Overbyte bietet da keine wertvolle Hilfe.

Ansonsten bleibt da nur noch Synapse, habe ich dann als nächstes auf der "To do" Liste.

Gruß

Question_mark
  Mit Zitat antworten Zitat
Nintendo

Registriert seit: 16. Feb 2009
82 Beiträge
 
#9

AW: TTCPClient LocalHost

  Alt 27. Jul 2013, 22:16
Hallo,

ich stehe auch gerade vor einem ähnlichen Problem. Ich habe als Pfad für den localhost C:\Program Files\httpd\ mit den beiden Unterordnern htdocs und isapi.

in htdocs liegt meine Datei index.html.

Diese aber wird nicht gefunden, egal, ob ich im TCPServer als Localhost die Konstante localhost oder meinen konkrten Pfad verwende.

Was muss ich noch tun, damit der Pfad gefunden wird?

Ich vwerwende vorerst noch nicht Indy, erst mal da reinarbeiten. Derzeit verwende ich TTCPserver von der Palettenseite "Internet"

Im Browser ( Internet Explorer 8 ) erhalte ich die Meldung, das Intranet aktuell deaktiviert ist. Wie aber schalte ich das ein, falls das die Ursache ist, das meine Index.html nicht gefunden wird.

Localhost muss schließlich erst mal klar sein. Ist vielleicht eher die Schreibweise des Pfades anders als gewöhnlich bei Dateien auf dem lokalen Rechner?

Wer kann helfen?

Ich habe vor Fragestellung unter localhost gesucht und dabei diesen Thread gefunden, deshalb frage ich auch hier.

Habe die You Tube Anleitung mit dem Titel "Creating simplest Web Server using Delphi" angeschaut und meine Delphi Anwendung danach aufgebaut.

Geändert von Nintendo (27. Jul 2013 um 22:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#10

AW: TTCPClient LocalHost

  Alt 28. Jul 2013, 12:37
Ich würde dir raten ein eigenes Thema zu erstellen, da dein Problem scheinbar ein völlig anderes ist.

Mir ist nicht ganz klar was du da vor hast. Du wirfst einige Begriffe ziemlich durcheinander. Du hast einen TCP-Server, scheinbar auch einen HTTP-Server (httpd?) und den IE als Client?

Was heißt das "als Localhost die Konstante localhost oder den Pfad"? Localhost ist immer eine Konstante für die IP 127.0.0.1. Ein Pfad ist sowas wie C:\Programme oder /home/valentin unter Unix. Und was du meinst, vermute ich mal, ist eine URL: http://localhost/pfadanteil

Mein Tipp: eröffne einen eigenen Thread!

Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  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 05:19 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