Heimnetzwerke - WIFI, LAN, Router und Co 16.526 Themen, 81.198 Beiträge

Chat über WLAN, Delphi (C++Builder)

Mdl / 8 Antworten / Flachansicht Nickles

Nachdem ich ein Weilchen gesucht habe, habe ich eine Anleitung zum 'Bau eines Chat-Programms' oder genauer eines Servers und eines Clients gefunden (www.veerle-en-geert.be/delphi/ebooks/Delphi%206%20-%20Wie%20baue%20ich%20mir%20einen%20Chat.pdf) und es hat lokal auf meinem Rechner erstmal prima funktioniert:

Es werden zwei Programme erstellt. Der Server, über den sämtliche Kommunikation läuft und der sämtliche Eingaben des (bzw. natürlich der) Clients empfängt und weiterleitet. So habe ich zu Testzwecken auf meinem einen Rechner zwei Clients laufen lassen,die über den Server (oder genauer: dessen lokale TCP/IP (192.168,....)) miteinander prima kommunzieren können. Intern wird dies über die Typen TClientSocket und TServerSocket bewerkstelligt. Eigentlich musste man nur darauf achten, dass die Ports identisch sind.

Nach der ersten Freude, bin draufgekommen, dass es sich bei der TCP/IP-Adresse, über die der Chat läuft und die im Programm ermittelt wird um eine lokale Adresse handelt (192.168,...). Da ich letztlich aber mit Personen chatten will, die sich nicht im LAN befinden, wollte ich es jetzt global ausweiten.

Wenn ich jetzt statt der lokalen IP-Adresse des Servers die globle angebe z.B. (85.181.14.109) funktioniert keinerlei Kommunikation mehr und nach einer gewissen Zeit erscheint eine entspr. Timeout-Exception.

Bin jetzt ratlos, wo ich ansetzen kann! Interessant ist vielleicht, dass beim Typen TClientSocket eine Eigenschaft existiert, in die man die TCP/IP-Adresse schreibt ('Host'), (anhand derer ja auch gesehen werden kann, ob ein lokaler oder globaler Zugriff erwünscht ist), bevor man den Zustand des ClientSockets aktiv setzt. Bei TServerSocket gibt es keine solche Eigenschaft. Woher soll der Socket wissen, woher der Zugriff erfolgt? Oder ist er bei TServerSocket immer lokal und es gibt eine andere Klasse, die für globale Zugriffe zuständig ist? Oder es ist egal, die Hauptsache ist, dass die Ports übereinstimmen?

Ok, kann mir jemand einen Tipp geben, in welcher Richtung ich weiter suchen kann oder durch welche Typen ich TClientSocket und TServerSocket ersetzen kann, um nicht auf LAN beschränkt zu sein?

Herzlichen Dank!!

Mdl

P.S. Sowohl ein Netzwerk, als auch ein Programmierproblem

bei Antwort benachrichtigen
Mdl Borlander „Gehe ich recht in der Annahme, dass der Computer mit dem ...“
Optionen

Danke für die Infos...

Gehe ich recht in der Annahme, dass der Computer mit dem Server läuft hinter einem NAT-Router hängt und keine eigene externe IP-Adresse hat unter der er erreichbar ist? Da käme dann die bereits von Shrek angesprochene Port-Weiterleitung ins spiel.

Vermutlich ja: Mein Comp. auf dem der Chat-Server läuft, ist drahtlos mit meinem Fritz!-Router verbunden. Mit jedem Neustart von diesem bekomme er eine andere IP-Adresse zugewiesen.

Muss er nicht. Der lauchst auf dem Port und wartet darauf, dass sich ein Client mit beliebiger IP-Adresse verbindet. Eine Unterscheidung zwischen lokalen und globalen IP-Adressen gibt es auch gar nicht.

Ok. Vermutlich können damit auch nicht zwei Prg. gleichzeitig einen bestimmten Port abfragen, denn wie sollen sie dann unterscheiden können, für wen die Daten gedacht sind.

Interessant, dass ich dann bei der Wahl der HTTP-Server-Portfreigabe keine Port-Wahlmöglichkeit habe (siehe Bilder bei der Antwort auf Shreck): Port 80 ist da von Haus aus fest eingestellt. Mit dieser Wahl könnte ich also keine zwei Serverprogramme gleichzeitig auf einem Comp. laufen lassen.

Viele Grüße,

Mdl

bei Antwort benachrichtigen