TCP

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

TCP

Beitrag von Jan »

Ich brauch ein wenig Hilfestellung von Euch: Ich muß auf einen Gira-Server zugreifen, um in die KNX-Module eingreifen zu können. Lt. Doku geht das mit Telegrammen über TCP. Ich habe aber keinerlei Ahnung, wie ich eine TCP-Verbindung aufbaue oder Telegramme darüber versende.

Ich wäre daher für jede Fundament-Erklärung und für Codebeispiele extrem dankbar.

Der Kunde hat 1.9 SL1 Professional, Asinet stände also zur Verfügung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TCP

Beitrag von brandelh »

über TCP ... socketfunktionen
entweder direkter Text oder "Telegrammen" eventuell soap ?
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Hubert,

wie gesagt, meine Kenntnisse in TCP sind noch geringer als nur rudimentär. Gehen gegen 0. Ich seh nur die Gira-Doku die was von Telegrammen sagt. Das sind anscheinend reine Textstrings, die aber mit 0x00 terminiert werden müssen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TCP

Beitrag von brandelh »

Ich habe damit auch nur etwas gespielt, aber es gibt in der Asinet
kleine Beispiele wo ein Sender und ein Empfänger Text austauschen (beide können in Xbase++ sein, müssen es aber nicht).
0x00 => bei DllCall() sind das alle Xbase++ Variablen automatisch.
ansonsten cTxt + chr(0) versenden ;-)

...\XPPW32\source\samples\ASINET\SOCKETS\
"server" starten ...
"client localhost" starten ...
nun kann man mit CLIENT.EXE an die SERVER.EXE Suchaufträge weiterleiten und sieht die Antwort (Daten) zurückkommen.
Das "Austauschprotokoll" könnte man Telegramm nennen ...
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Hubert,

danke für den Hinweis. Das Sample werd ich mir mal zu Gemüte führen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Hubert,

leider war es nicht ganz so simpel wie Du schreibst - das Beispiel liegt nicht im XPPW32-Verzeichnis. Die Asinet-Samples haben da ihr eigenes Verzeichnis (zumindest in meiner Installation)

Aber ansonsten sieht das ja recht einfach aus. Ich warte im Moment noch auf die Zugangsdaten für den Server, aber im Moment sieht es so aus als ob das garnicht mal so kompliziert werden dürfte.

Ich melde mich noch mal, wenn ich die Daten bekommen habe, und damit auch testen konnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Gerade habe ich mal getestet damit. Und laufe auf folgendes Problem: Ich habe diese Codezeile aus dem Sample übernommen und angepasst:

Code: Alles auswählen

nSocket := SocketOpen(SOCK_STREAM, "192.168.32.2", 7003, @nError) 
Damit komme ich aber nicht durch. nError gibt mir ein 11004 zurück, mangels Doku keine Ahnung was das sein soll.

Die Firewall sagt mir aber, ich wäre per UDP auf den Port 137 gegangen! Aber erstens ist SOCK_STREAM lt. Doku TCP und nicht UDP, und zweitens habe ich eindeutig den Port 7003 angesprochen. Über TelNet klappt das auch, hier gibt die Firewall mir die korrekten Verbindungsdaten an.

Was mache ich da jetzt falsch?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: TCP

Beitrag von georg »

Hallo, Jan -


Du bekommst SOCKET Fehler zurück. Der 11004 findet z.B. folgenden Kommentar bei Microsoft: http://msdn.microsoft.com/en-us/library ... 10%29.aspx

Scheint also was mit der Adressierung (Name vs. IP-Adresse nicht zu stimmen).
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Georg,

tja, das ist dann mal wieder so eine Fehlermeldung die einem nix genaues sagt.

Ich habe jetzt mal die Datenbank von Alaska durchforstet. Da steht drin, das SocketOpen() schon mal Macken haben kann. PDR 4249. Soll aber geschlossen sein, angeblich schon 2001. Ich habe jetzt mal den Workaround ausprobiert mit SocketNew() und SocketConnect() - siehe da, das klappt.

Manchmal geht Alaska mir wirklich gehörig auf den Zwirn! :angry5: :angry4: :angry5:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: TCP

Beitrag von satmax »

So ganz auf die schnelle,

Code: Alles auswählen

nSocket := SocketOpen(SOCK_STREAM, "192.168.0.203", 2000, @nError)

debugPrint(nSocket)
debugPrint(nError)
DebugPrint liefert socket ==48339052 und nError ==0

Ich habe auf Port 2000 einen eigenen Dienst (ein C++Programm)
Gruß
Markus
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: TCP

Beitrag von Klaus Schuster »

Hallo Jan,

wenn ich die Passage "Ich warte im Moment noch auf die Zugangsdaten für den Server," richtig verstehe, befindet sich der Server wohl nicht in Deinem Arbeitsnetzwerk. Kannst Du denn die Adresse 192.168.32.2 per Ping erreichen?
Gruß Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Klaus,

ja klar. Ping und Telnet (das auch mit dem Port) klappen einwandfrei. Und wie gesagt, statt SocketOpen() mit SocketNew() + SocketConnect() klappt auch.

Und fast richtig - sowohl der Server als auch der Client stehen bei meinem Kunden. Ich habe da einen Arbeitsplatz eingerichtet bekommen, von dem aus ich vor Ort entwickeln kann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: TCP

Beitrag von ramses »

Hallo Jan

über TCP-IP laufen viele Dinge besser Protokolle z.B. HTTP, FTP um nur einige zu nennen. Erkundige dich mit welchem Protokoll du über TCP IP kommunizieren musst!!!

Ohne dass du das Protokoll Einhälts ist oft keine Kommunikation möglich. Ich weiss nicht was ein Gira-Server und KNX Module sind, vermute mal was zur Haussteuerung, Licht ein Aus oder so.

Ich habe schon einige Dinge für Haus- und Maschinensteuerungen auf SPS-Basis geschrieben da lief alles über das sogenannte "MODBUS" Protokoll. Mit diesem können Register (Messwerte) Vorgabgewerte und Ein/Ausgänge gesetzt gelesen und geändert werden. Bei Modbus z.b. werden alle Datenpakte die nicht dem Protokoll entsprechen (Prüfsumme/Länge/Zeitliche Abfolge) einfach ohne jede Reaktion verworfen!

Da kannst du lange TCP Packete an den Port senden, Antwort bekommst du erst wenn das Datenpacket korrekt ist ........


Cu Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: TCP

Beitrag von Koverhage »

vermute mal was zur Haussteuerung, Licht ein Aus oder so.
Genau das was jetzt immer in der Fernsehwerbung kommt ;-)
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

*grins* In diesem Fall ist das etwas komplizierter. Erstmal - KNX ist der Nachfolgename von EIB = European Installation Bus. Und der Gira-Server ist eine Schaltzentrale dafür. In diesem Fall wird darüber nicht nur Haustechnik gesteuert (Bewegungsmelder, Einbruchsensoren, Beleuchtung, Türschließer, usw.), sondern auch Besucherzähler, Pflanzenbewässerung, Wettersensoren, etc.

Ich soll dafür ein Modul schreiben, mit dem man Werte abfragen kann, und bei Bedarf auch setzen kann. Also z. B. abhängig von Vorgaben in einer Datenbank und Wetterbedingungen die Bewässerung punktuell steuern. Oder ganz banal checken, wie viele Besucher heute durchgekommen sind. Oder auch eine Protokollierung verwalten, so das man einen bestimmten Knoten abfragen und sehen kann, wer wann warum welchen Zustand geschaltet hat.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: TCP

Beitrag von Koverhage »

Jan,

ich weiß was KNX ist, wollte dort schon Mitglied werden, habe das aber verworfen.
In Deiner Aufstellung fehlt einer der Wichtigsten , nämlich die Heizung, etc.
Aber das hat ja mit dem Hauptthema nicht zu tun. ;-)
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Klaus,

klar. Mir ist klar, das man damit noch viel mehr machen kann. Ich hatte damit z. B. in meinem Spezialgebiet (Sonnenschutz, Rollos, Markisen) zu tun, hab das insbesondere auf den Luxusjachten kennen gelernt. Aber es geht halt noch viel mehr. Heizungen, Fenster, Kaffeemaschinen, Mediensteuerung, einfach unglaubliches Dinge. Das hat enorme Vorteile, ist aber auch enorm teuer. Und kann enorm kompliziert werden. Mein Kunde z. B. hat das Problem, das bislang noch keine "eingebaute" Steuerung genau das konnte, was er wollte. Also muß ich da jetzt ran.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: TCP

Beitrag von ramses »

Jan,

Das KNX System verwendet den sog. KNX-Bus dieser ist Packet-Basierend mit Prüfsumme. Errinnert an Mod-Bus.
Wenn du schon eine Socket-Verbindung hast musst du nur noch ein Packet dem korrekten Aufbau und natürlich vorhandenen Zielgeräte-Adressen senden.

Schau mal unter: http://de.wikipedia.org/wiki/KNX-Standard --> Paket-Struktur


Cu Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Prinzipiell habe ich das jetzt am laufen.

Jetzt habe ich aber folgendes Problem: Ich habe eine Verbindung zu der Gira-Maschine per SocketNew() und SocketConnect() aufgebaut. Gleiches Rack wie all die anderen Server, aber anderes VLan. Das dauert zwar eine Weile, aber es klappt. Danach kommt ein SocketSend(), im Debugger geht der ohne jede Verzögerung sofort auf die nächste Zeile. Aber dann kommt das Problem: SocketRecv() dauert mehr als 20 Sekunden! Manchmal bis zu 40 Sekunden! Ich habe das auch schon mit SocketRecvStr() versucht, das ist auch nicht wirklich schneller.

Wo kann da der Fehler liegen? Denn das kann doch nicht normal sein, das der so lange dauert.

Wenn ich das mit einem Gira-Tool ansehe dann geht das Ruck-Zuck. Nur mein Programm trödelt endlos.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: TCP

Beitrag von DelUser01 »

Hallo Jan

wird das VLAN-Tag auf der Netzwerkkarte des PCs gemacht oder auf dem Switch(-Port)?
Wenn auf dem Switch(-Port) dann wird VLAN vermutlich nicht das Problem sein wenn andere Programme damit laufen.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Ich denke nicht wirklich, daß das VLan das Problem ist. Denn das Tool von Gira kommt ja flott durch, ohne spürbare Unterbrechung.

Die Bridge liegt soweit ich weiß in der Sophos-Maschine mit der Firewall. Da bin ich aber nicht wirklich sicher.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: TCP

Beitrag von DelUser01 »

Hallo Jan

vor nicht allzu langen Jahren gab es noch genug Probleme mit den Netzwerkkarten und VLAN.
Kannst Du Dein Programm in einem anderen Netzwerk (anderer Server und anderer PC) testen? Um Probleme mit Netzwerk-, Hardware- und Betriebssystem gegenzuprüfen.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Roland,

schwierig. Weil jeder Rechner erst explizit freigegeben werden muß für den Zugriff auf die Gira-Maschine. Das ist nicht so einfach.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: TCP

Beitrag von DelUser01 »

Hallo Jan

gäbe es noch einen anderen Weg um die Verbindung aufzubauen als mit Socket...()?
Über MS-Funktionen?
Vielleicht ist in diesem Bereich ASINET nicht mehr auf dem neuesten Stand?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: TCP

Beitrag von Jan »

Hallo Roland,

weil ich genau das nicht weiß hatte ich das Problem hier gepostet.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten