IP wiederfinden
-
Hallo,
erstmal entschuldige ich mich für den aussagelosen Titel, aber mir ist einfach nichts besseres eingefallen. Ich bin gerade dabei ein kleines Chatprogramm mit WinSock zu schreiben und habe nun auch die nötigsten Funktionen implementiert. Dabei bin ich auf etwas gestoßen, was ich ich nicht verstehe:
In professionellen Chatprogrammen hat man eine Liste an Kontakten mit welchen man wann auch immer kommunizieren kann. Um eine Verbindung herzustellen ist es jedoch notwendig die IP-Adresse der Person zu kennen, die ich kontaktieren will. Nun kann der eine dem anderen ja seine IP mitteilen und dann funktioniert das auch, aber wie wird das in professionellen Chatprogrammen gemacht, die IP-Adresse einer Person wiederzufinden, da diese sich ja ständig ändert? Schließlich reicht dort völlig aus einen Text einzugeben und dann kommt dieser auch an.Vielen Dank im Voraus!
-
Jeder Teilnehmer meldet sich bei einem zentralen Server an, der dann zwischen den einzelnen Teilnehmern vermittelt.
-
Gut. Aber was ist, wenn ich nur mit einer Person chatten möchte und gar keine weiteren?
-
Du persönlich jetzt mit Deinem Programm, oder über ein professionelles Chatprogramm?
Im ersten Fall musst Du dann irgendeinen Weg finden, dem Client die IP des Servers zu übermitteln, im zweiten Fall kümmert sich wie gehabt der ChatServer darum, indem er Dir die Möglichkeit bietet, zB einen passwortgeschützten Bereich einzurichten. In diesem Fall musst Du aber Deinem gewünschten Chatpartner auch irgendwie das Passwort zukommen lassen ...
-
Ich meine ersteres, denn das ist ja gerade das schwierige: Dem Client die IP des Servers zu übermitteln, wenn noch gar keine Verbindung besteht. Hat jemand eine Idee?
-
Normalerweise melden sich doch alle Clients beim Server an. Der kennt dann die IPs und kann sie auf Anfrage auch an andere Clients verschicken, damit die Clients untereinander Verbindung aufnehmen können.
Wenn zwei Rechner sich nicht kennen und kein Server zur Verfügung steht, kannst Du die IP wohl nur telefonisch übermitteln
-
Ich glaube du oder ich verstehen hier etwas falsch. Kann es sein, dass dein bisheriges System jeden Chatteilnehmer, der "angechattet" wurde, zum Server macht (er nimmt also per accept() eine Verbindung an) und jeder aktive Chatter den Connect() durchführt? Wenn ja, dann ist das weniger sinnvoll, da sich fast jeder Netzwerkteilnehmer hinter einem NAT-Gateway versteckt und NAT-Traversal-Techniken meist nicht einfach zu implementieren sind, besonders Sachen wie TCP Hole Punching funktionieren nur all zu selten und sind ziemlich eklig.
Nur weil alle Chatteilnehmer sich an einem globalen Server anmelden heißt das noch lange nicht, dass alle miteinander chatten müssen. Der Server allein kann doch entscheiden, wem er die empfangene Nachricht zukommen lässt (einer oder allen offenen Verbindungen). Der Client muss also nur die IP des Servers haben, der Server kümmert sich dann um den Rest der Kommunikation. Entweder diese IP-Adresse ist konstant gegeben und somit in jedem Chatclient bekannt oder du hast zumindest einen DNS-Namen, den der Client auf die IP auflösen kann. Anders geht es nicht, zumindest nicht automatisch, andernfalls muss der Affe vor dem Bildschirm die Zahlen suchen gehen und eingeben, auf Welche Art und Weise auch immer.
Edit: Eine Möglichkeit hat LordJaxom ja schon genannt, zumindest, solange du die Telefonnummer hast, sonst musst du wohl einen Brief schreiben.
-
Gut, dann stelle ich die Frage anders und simpel: Wie weiß der Client die IP des Servers um sich dort anzumelden. Von dort aus ist mir schon klar, wie der Server zwischen den Clients vermittelt...
-
Die Antwort hast du bereits bekommen. Ich zitiere mich arroganterweise mal selbst:
Entweder diese IP-Adresse ist konstant gegeben und somit in jedem Chatclient bekannt oder du hast zumindest einen DNS-Namen, den der Client auf die IP auflösen kann. Anders geht es nicht, zumindest nicht automatisch, andernfalls muss der Affe vor dem Bildschirm die Zahlen suchen gehen und eingeben, auf Welche Art und Weise auch immer.
Sprich, zu jeder chatclient.exe gibt's eine Chatclient.ini, wo sowas drinsteht wie:
ServerIP = XXX.XXX.XXX.XXX ServerPort = XXXXX ServerDNS = www.mycoolchatserver.com
Mehr gibt's zu dem Thema nicht zu sagen.