Datenschnittstelle zwischen 2 Teilnehmern im Netz bzw. Internet
-
Einen wunderschönen Guten Morgen,
ich hab mal ne frage bezüglich NetzwerkProgrammierung. Ich würde gern eine Datenkommunikationsschnitstelle impelementieren. Dabei soll es eine Serversetige Schnittstelle und eine Client Schnittstelle entwickelt werden.
Wobei die Serverseitige Schnittstelle ehr ein Tool darstelle welche sich um die Kommunikation zu den Clients kümmert. Zudem Wird auf dem Server konfiguriert welche Daten mit Symbolische Namen zur verfügung gestellt werden.
Die Clietnschnittstelle soll später eine Lib /dll darstellen welche ich in eine Anwendung Einbinden kann, und damit auf die vom Server bereit gestellten Daten zugreifen kann. (Server und Client Interface müssen die Datensymbolik kennen bzw. zur verfügung haben.)
Wenn sich ein Client anmeldet, will ich die IP der Serverschnittstelle und Login/ PW zugriff angeben können.
Das ganze ähnelt dem OPC Server/Client Prinzip.
So , nun an euch:
- Gibt es schon solche eine "Opensource" Schnittstelle die sowas kann?
- Wie würde so eine Datenverbindung am besten realiserit TCP/IP , UDP (keine ahung)- Ist es Problemlos machbar zwei PC welche beide an verschieden stellen der Erde hinter irgendwelchen Router etc. zu verbinden?
- Welche Programmiersprache würde sich eignen?
Bin für alles offen
-
NetzwerkNoob schrieb:
- Ist es Problemlos machbar zwei PC welche beide an verschieden stellen der Erde hinter irgendwelchen Router etc. zu verbinden?
Naja, "das Internet" ermöglicht tagtäglich genau das
Wie die Verbindbarkeit dann im Detail aussieht (evtl. Abschottung durch Firewalls, zusätzliche Routingeinstellungen, etc.) ist im konkreten Fall vorher zu überprüfen. Aber sonst ist das kein Problem.
- Welche Programmiersprache würde sich eignen?
Jede, die in irgendeiner Weise Sockets oder ähnliche Modelle anbieten, mit denen eine Interprozesskommunikation über Netzwerkinterfaces möglich ist. Innerhalb dieser Auswahl kommt es wohl darauf an, welche Sprache sich am besten für das Einsatzumfeld anbietet und welche du als Programmierer bevorzugst.
-
Ok danke schonmal:)
Gibts es schon freie/kostenlose gute dokumentierte LIBS für solchen anwendungen?
Die Kommunikation über sockets ist ja nix anderes wie da hin und herschicken von bytepackete zwischen zwei IP adresse oder? Aber wie sieht es auch wenn ich nen server will, auf denen sich clients einloggen wollen und so daten hind und her schicken können? Muss ich das alles selber coden? Oder gibts da schon was? irgendwelche Toolkits etc.
-
Noch was:
sagen wir mal die beiden teilnehmen befinden sich jeweils hinter nem hub, und haben so im subnetz ihrer eigene IP:) wie können diese dann kommunizieren? ich kann ja quasie kein PC von hier aus welcher hinter nem router liegt anpingen?
nur mal so gefragt..
-
NetzwerkNoob schrieb:
Noch was:
sagen wir mal die beiden teilnehmen befinden sich jeweils hinter nem hub, und haben so im subnetz ihrer eigene IP:) wie können diese dann kommunizieren? ich kann ja quasie kein PC von hier aus welcher hinter nem router liegt anpingen?
nur mal so gefragt..1. NAT erfordert Port Forwarding
2. Firewall erfordert ein explizites freigeben des PortsBTW: Ping ist ein Service, auch abgeschaltet werden kann, muss also nicht an den beiden erwähnten Punkten liegen, wenns nicht geht.
Simon
-
NetzwerkNoob schrieb:
Ok danke schonmal:)
Gibts es schon freie/kostenlose gute dokumentierte LIBS für solchen anwendungen?
Die Kommunikation über sockets ist ja nix anderes wie da hin und herschicken von bytepackete zwischen zwei IP adresse oder? Aber wie sieht es auch wenn ich nen server will, auf denen sich clients einloggen wollen und so daten hind und her schicken können? Muss ich das alles selber coden? Oder gibts da schon was? irgendwelche Toolkits etc.
NetzwerkNoob schrieb:
Noch was:
sagen wir mal die beiden teilnehmen befinden sich jeweils hinter nem hub, und haben so im subnetz ihrer eigene IP:) wie können diese dann kommunizieren? ich kann ja quasie kein PC von hier aus welcher hinter nem router liegt anpingen?
nur mal so gefragt..Nicht böse sein, aber bevor du versuchst auch nur eine Zeile Code zu schreiben solltest du dich vorher ein "bisschen" mit Netzwerktechniken, etc. auseinander setzen, denn offensichtlich mangelt es noch an den Basics.
-
Bin nicht Böse, klar fehlt es mir an Skills. Hab auch ein Buch "Jetzt lerne ich TCP/IP" weis aber nich ob das was hilf;) Vll. sollte ich ehr ein buch für Netzwerkprogarmmierung direkt besorgen.
Aber kurz zurück zu meiner Frage. Sagen wir mal ich habe zwei Rechner in 2 subnetzen.
- Rechner A hat die IP 192.168.0.1 im subnetz und der Router 221.222.223.224.
- Rechner B hat die IP 192.168.0.1 im subnetz und der Router 111.112.113.114.Wenn ich jetzt ein socket verbindung aufbauen möchte, kann ich ja nich direkt die IP des Zielrechner anwählen.
Sorry für die Noob Fragen.
-
NetzwerkNoob schrieb:
Aber kurz zurück zu meiner Frage. Sagen wir mal ich habe zwei Rechner in 2 subnetzen.
- Rechner A hat die IP 192.168.0.1 im subnetz und der Router 221.222.223.224.
- Rechner B hat die IP 192.168.0.1 im subnetz und der Router 111.112.113.114.Wenn ich jetzt ein socket verbindung aufbauen möchte, kann ich ja nich direkt die IP des Zielrechner anwählen.
Sorry für die Noob Fragen.Ich sehe hier gar keine Frage.
-
MFK schrieb:
NetzwerkNoob schrieb:
Aber kurz zurück zu meiner Frage. Sagen wir mal ich habe zwei Rechner in 2 subnetzen.
- Rechner A hat die IP 192.168.0.1 im subnetz und der Router 221.222.223.224.
- Rechner B hat die IP 192.168.0.1 im subnetz und der Router 111.112.113.114.Wenn ich jetzt ein socket verbindung aufbauen möchte, kann ich ja nich direkt die IP des Zielrechner anwählen.
Sorry für die Noob Fragen.Ich sehe hier gar keine Frage.
Ich auch nicht...
Aber solange alles Routingtabellen richtig sind, sollte ein Verbindungsaufbau locker klappen. Denn sonst machen die Router ihre Aufgabe nicht richtig und verdienen die Bezeichnung Router nicht
Ergo, kommt ein Datenpacket von einem Rechner zum anderen, dann bekommst du auch eine Verbindung per Socket hin.
PS: Schau dir mal das ISO-OSI-Schichtmodell an und besorg dir echte Bücher zum Thema Netzwerktechnik, TCP/IP. Diese "Jetzt lerne ich.."-Bücher sind ja ganz nett, aber umschreiben Dinge manchmal auch so sehr, dass ihr eigentlicher Sinn verloren geht.
-
NetzwerkNoob schrieb:
Bin nicht Böse, klar fehlt es mir an Skills. Hab auch ein Buch "Jetzt lerne ich TCP/IP" weis aber nich ob das was hilf;) Vll. sollte ich ehr ein buch für Netzwerkprogarmmierung direkt besorgen.
Aber kurz zurück zu meiner Frage. Sagen wir mal ich habe zwei Rechner in 2 subnetzen.
- Rechner A hat die IP 192.168.0.1 im subnetz und der Router 221.222.223.224.
- Rechner B hat die IP 192.168.0.1 im subnetz und der Router 111.112.113.114.Wenn ich jetzt ein socket verbindung aufbauen möchte, kann ich ja nich direkt die IP des Zielrechner anwählen.
Sorry für die Noob Fragen.Naja, also dein Server muss schon eine öffentliche (Internet-)Adresse haben (bzw über eine solche über NAT ansprechbar sein). Ausserdem muss der für die Anwendung definierte Port freigegeben sein und auf den Server-PC geforwarded sein.
Der Rücktransport geht dann aber i.a. automatisch, d.h. die NATs/Router kümmern sich um die korrekte Umschaltung und für deine Anwendung ist das transparent.
Du musst jedoch sicherstellen, dass deine Anwendung niemals IP Adressen und Port-Nummern explizit über die Anwendungsschicht selbst verschickt und benutzt.
Das bringt nur Ärger.
-
Ein guter Rat der hier dazupasst: schick niemals IP Adressen irgendwo rum, und connecte immer nur in einer Richtung, und idealerweise immer auf den selben Port.
Sobald du ein Protokoll bastelst welches z.B. die IP eines Servers übers Netz verschickt kannst du Probleme bekommen wenn NAT im Spiel ist, und getNATet wird heute fast überall.
----
Wenn du 2 PCs hast, und beide stehen hinter einem Router, dann muss einer der beiden Router so eingestellt sein dass er eingehende Verbindungen auf einem oder mehreren Ports an einen bestimmten PC weiterleitet.
Also z.B. Router 221.222.223.224 ist so eingestellt dass er Verbindungen auf Port 12345 an 192.168.0.1 weiterleitet.
Nun kannst du vom 2. PC (dessen öffentliche IP 111.112.113.114 ist) einfach eine Verbindung zu 221.222.223.224:12345 aufbauen. Für den PC hinter dem 221.222.223.224 Router erscheint es dann so als ob die Verbindung von 111.112.113.114 kommen würde.
Dass beide PCs die selbe interne IP haben stört dabei nicht, da die interne IP vom NAT des jeweiligen Routers "versteckt" wird. Aus Sicht des Internet (wenn ich das mal so sagen darf) besteht nur eine Verbindung zwischen den Beiden Interfaces 221.222.223.224 und 111.112.113.114.
Aus Sicht des ersten PCs besteht eine Verbindung zwischen 192.168.0.1 (er selbst) und 111.112.113.114 (öffentliche IP des zweiten).
Aus Sicht des zweiten PCs besteht eine Verbindung zwischen 192.168.0.1 (er selbst) und 221.222.223.224 (öffentliche IP des ersten).
Jetzt sollte auch klar sein warum es zu Problemen kommen kann wenn du interne IPs irgendwo rumschickst: wenn der erste PC dem zweiten schickt "bitte schick das an '192.168.0.1'", dann wird der zweite PC damit nix anfangen können, da '192.168.0.1' ja eine private IP ist, nochdazu die selbe die er auch verwendet.
Nur mal so nebenbei.