none
Problem mit einfachem Chat Programm RRS feed

  • Frage

  • Hallo,

    Ich habe ein Problem mit einem Chat Programm für VB.NET. Es gibt ein Server Programm, das sich z.B. um alle neuen Clients kümmert und natürlich auch die Nachrichten von einem Client an alle anderen weiterleitet.

    Auf demselben Computer funktioniert das auch alles hervorragend, nur wenn ich die Programme auf Computern ausführe, die nicht mehr im selben Netzwerk sind, sondern über das Internet verbunden sind, so wird mir eine Fehlermeldung angezeigt, dass die Verbindung nicht hergestellt werden kann, da das Server Programm nicht antwortet.

    Ich habe gelesen, dass man eventuell Ports im Router freischalten muss, damit direkte Verbindungen über das Internet aufgebaut werden können, allerdings funtionieren ja Chat Programme wie ICQ oder MSN auch, ohne dass ich irgendwelche Ports freischalten muss. Meine Frage lautet also: Gibt es bestimmte Ports, die bereits im Vorfeld freigeschaltet sind, wie z.B: Port 80?

    Denn dann könnte ich natürlich diese Ports nehmen, ohne dass ich die Ports mühsam freischalten müsste.

     

    Danke im voraus,

    MfG.

    Montag, 19. Juli 2010 12:33

Alle Antworten

  • Ich meine auf demselben Computer.Da können ´die beiden Programme, also Server und Client problemlos miteinander interagieren.Aber sobald das Client Programm eben versucht eine direkte Verbindung über das Internet zu einer bestimmten IP-Adresse herzustellen erhalte ich eine Ausnahme, dass das Server Programm nicht antwortet.

     

    Am Code also eigentlichen Chat wird's wahrscheinlich nicht liegen, da ja eben auf demselben Computer alles reibungslos abläuft.

    Montag, 19. Juli 2010 18:46
  • HabuHabu,
    wenn du TCP nutzt, dann musst Du auch die Ports angeben, über die Du verkehrst (s. Einstellungen TCPClient, TCPListener). Diese Ports sind in der firewall freizugeben.
     
    Wenn du über Port 80 arbeiten willst, dann musst Du http nutzen, z.B. mit einem Remote Object.

    --
    Viele Gruesse
     
    Peter
    Montag, 19. Juli 2010 19:35
  • Ich verwende momentan Port 8000. Ich denke eigentlich ist der Port, den man benutzt, ja egal, solange er nicht bereits von anderen Protokollen wie http oder ftp bereits belegt ist. Nur da andere Programme ja auch über TCP arbeiten, wie eben ICQ und MSN und ich dort eben keine Ports im Router öffnen muss, wollte ich mal wissen, wie die das denn bewerkstelligen.

    Es ist ja nunmal sehr umständlich jedem Benutzer mitzuteilen, dass er zuerst entsprechende Ports in seinem Router freischalten müsse, bevor er das Programm verwenden kann.

    Ich habe die entsprechenden Programme natürlich schon in den Firewalls beider Computer freigeben lassen, so dass diese problemlos durch die Firewall kommunizieren können.

    Ich denke aber nach wie vor, dass es eben am Router liegt, der eben die eingehenden und ausgehenden Verbindungen blockiert und deshalb bin ich eben auf der Suche nach einer eleganteren Lösung.

     

    Vierlen Dank für die Antworten,

    MfG.

    Dienstag, 20. Juli 2010 06:58
  • Hallo Habuhabu,

    so ein Router wirkt wie eine Art Firewall. Die ausgehenden Anfragen per http werden nach aussen geleitet und die Anworten der Seiten in das Subnetz zurück gesendet. Das funktioniert automatisch.

    Wenn Du nun eine http Anfrage von aussen an einen in Deinem Subnetz befindlichen Server stellen möchtest, muss dieses im Router freigeschaltet werden. Das heist Portweiterleitung. I.d.R ist dies TCP Port 80 unter Angabe des Rechnernamens oder der IP Adresse. Bei einigen Routern heist das Web Server einrichten.

    Bei mir funktioniert das. Ich habe auch einen Server im Subnetz und kann gleichzeitung ins Web gehen.

    schöne Grüße Ellen


    Ich benutze/ I'm using VB2008 & VB2010
    Dienstag, 20. Juli 2010 08:20
  • OK, das habe ich mir schon fast gedacht, aber was ich dann nicht so ganz verstehe ist, wieso das bei den ganzen Chat Programmen eben nicht nötig ist, denn dort muss ich ja gar nichts im Router konfigurieren.

     

    MfG

    Dienstag, 20. Juli 2010 08:29
  • Welche Chat-Programme, die TCP/IP als Kommunikationsschicht nutzen, meinst du?

    Viele Gruesse
    Peter

    Dienstag, 20. Juli 2010 09:22
  • Hallo,

    um zu verstehen, wann und ob eine Portweiterleitung erforderlich,
    wirst Du um ein wenig Theorie nicht herumkommen.

    "Router" wie sie üblicherweise in WLAN/DSL eingesetzt werden,
    verwenden NAT , um die Probleme des IPV4 Adressraumes zu lösen.

    Da Du vermutlich keine statische IP-Adresse gemietet hast,
    sondern eine aus den privaten Adressräumen verwendest
    muß das erfolgen, da sich sonst die Rechneradresse (und Ports)
    überschneiden und die Pakete für Deinen Rechner beim Nachbarn
    ankommen könnten.

    Auf der Clientseite (hier TcpClient) ist das Haupt-Problem, herauszufinden,
    wo sich der Server mit seiner "echten" Adresse befindet.
    Wenn es sich dabei um eine Einwahl-Adresse, wie bei DSL/Modem ohne
    (teure) Standleitung üblich, wechselt die Adresse bei jedem Einwahlvorgang.
    Die "echte Adresse" wäre hier Adresse, die er beim Einwahlvorgang zugewiesen
    bekommen hat und nicht die im privaten Adressraum.

    Das Problem kann man mit teilweise mit DynDns lösen, was sich jedoch
    nur eingeschränkt  für Chat-Programme eignet, wo beide Partner wechselnde
    Adressen haben.
    Ersatzweise kann man einen eigenen Server nutzen, der wiederum eine statische, bekannte
    Adresse hat, um die beiden Clients miteinander über ihre Adresse (und den Port )
    bekannt zu machen. Was für Dich aber kaum eine Option sein dürfte.

    Auf Serverseite (z. B. TcPServer) kommt als weiteres Problem hinzu,
    dass NAT (als PAT/NAPT) die  Portadresse ändern kann.
    Und dies der Hauptgrund, wozu man man eine Portweiterleitung einrichtet.
    Ein Client kann hier freier agieren,  da dort der Port  dynamisch zugewiesen
    werden kann und dem Server beim Verbindungsaufbau bekannt gemacht wird.

    Es gibt einige Techniken, die Weiterleitung zu vermeiden,
    die werden u. a. in den weiterführenden Links beschrieben,
    die Du beim oben referenzierten NAT Artikel in der Wikipedia findest, u. a.:
    http://www.bford.info/pub/net/p2pnat/
    Nur wird das kein "einfaches Chatprogramm" mehr bleiben.

    Unter http://www.hypothetic.org/docs/msn/general/connections.php
    findest Du eine Beschreibung wie es z. B. der Microsoft Messenger macht(t)e.

    Unter http://www.hypothetic.org/docs/msn/general/http_connections.php
    wird beschrieben wie es dort für HTTP gelöst ist. Wobei auch dort einige
    Dinge enthalten, die man nur mit einer (kostspieligen) Infrastruktur lösen kann.

    Wolltest Du selbst direkt über HTTP gehen, um NAT-Probleme zu vermeiden,
    so käme HTTP.SYS ins Spiel, wo eine eine Weiterleitung zur richtigen
    Serveranwendung stattfinden müsste.
    Denn die Anfragen sollen ja nicht beim Webserver (IIS/Apache) landen,
    der im Standard dafür konfiguriert ist (hat man einen solchen nicht im
    Einsatz könnte man es ohne versuchen). Einige Links findest Du unter
    http://stackoverflow.com/questions/2589588/how-to-register-your-application-into-with-http-sys
    (aber auch das ist nicht ganz einfach).

    Leichter ist es i. a. den Server mit Webservices, WCF und anderen
    Protokollen zu implementieren, die die notwendige Infrastruktur schon
    mitbringen. Ein älteres Beispiel: P2P Comm Using Web Services

    Ich hoffe, ich habe einigermaßen verständlich machen können,
    wieso eine Kommunikation nicht ganz einfach ist, sobald man
    Chatprogramme (und andere) ausserhalb des eigenen Subnetzes
    miteinander kommunizieren lassen will.

    Gruß Elmar

     


    Dienstag, 20. Juli 2010 10:01
  • OK, das habe ich mir schon fast gedacht, aber was ich dann nicht so ganz verstehe ist, wieso das bei den ganzen Chat Programmen eben nicht nötig ist, denn dort muss ich ja gar nichts im Router konfigurieren.

    Hallo,

    soweit ich weiß arbeiten die ganzen Chatprogramme etwas anders als deins. Denn ICQ nimmt beim Login Kontakt mit dem ICQ Server auf um dort deine Benutzerdaten zu überprüfen und zB. deine Kontaktliste zu laden.

    Dieser ICQ Server wird den Port ja kennen und auch freigegeben haben. Du musst bei dir nichts freigeben, da du nach außen kommunizierst und raus kommst du bekanntlich immer :) und nach dem du dich ein mal zum Server verbunden hast hat er ja eine Verbindung zu dir und benutzt diese dann für weitere Kontaktaufnahmen.

    Der ICQ Server funktioniert hierbei als Zwischenstelle die dich und deine Freunde verbindet. (alle verbinden sich zum Server) Da die Kommunikation darüber läuft musst weder du noch dein Freund irgendwas konfigurieren. Eine Ausnahme würde hier das Versenden von Dateien ausmachen, da dies über eine Direkte Verbindung erfolgt und somit dann im Router konfiguriert werden muss.

    Ich hoffe ich konnte das einigermaßen gut schildern.


    MfG, Sebastian Gross Ist deine Frage beantwortet? Dann markiere sie auch bitte so!
    Dienstag, 20. Juli 2010 20:48
  • Erstmal vielen Dank für die Antworten.

    Ich denke ich werde beimm normalen Chat Modell über TCP bleiben, denn alles andere hört sich verdammt kompliziert an. Somit müsste ich praktisch einen Computer haben, auf dem das Server Programm ausgeführt wird und bei dem eine Portweiterleitung vorhanden ist, so dass sich alle Clients wie bei ICQ ohne Portweiterleitung auf dem eigenen Server damit verbinden können. Wahrscheinlich ist das die einfachste Variante, denn so muss ich ja nicht nochmal ein komplett anderes Chat Programm programmieren, das eventuell völlig andere Funktionen zur Kommunikation verwendet.

    Nochmals vielen Dank,

    MfG.

    Mittwoch, 21. Juli 2010 09:16
  • ICQ nutzt aber Port 80, indem es die Nachrichten in html "verpackt". Analog könntest Du das genau so machen mit der Bedingung aber, dass jeder Teilnehmer einen IIS installiert und dafür nutzt. Der Aufwand dafür ist aber, wie Du bereist bemerkt hast, nicht zu unterschätzen.

    Viele Gruesse
    Peter

    Mittwoch, 21. Juli 2010 12:09
  • ICQ nutzt aber Port 80, indem es die Nachrichten in html "verpackt". Analog könntest Du das genau so machen mit der Bedingung aber, dass jeder Teilnehmer einen IIS installiert und dafür nutzt.

    Hallo Peter,

    wo hast du diese Information her? Hast du da eventuell einen Link? Ich habe bisher immer gedacht ICQ benutzt HTML in seinen Messagens nur zur Formatierung des Textes, dass das in irgendeiner Form mit dem Versand zusammenhängt hatt ich nicht mal vermutet.


    MfG, Sebastian Gross
    Mittwoch, 21. Juli 2010 12:44
  • ICQ nutzt aber Port 80, indem es die Nachrichten in html "verpackt". Analog könntest Du das genau so machen mit der Bedingung aber, dass jeder Teilnehmer einen IIS installiert und dafür nutzt.

         Interessant das würde dann ja bedeuteten das man das bei ICQ genauso machen müsste ?? Zumal wäre es nicht einfacher das der ICQ- Client sagen wir mal alle fünf Sekunden den Server fragt, ob neue Nachrichten vorliegen und diese dann vom Server lädt ?

    Nun zur Frage mit dem Chat-Programm: Es gibt eine Lösung die eigentlich recht simpel ist. Einen Rechner in einer DMZ des Routers mit einer statischen IP versehen und diesem die Möglcihkeit geben als eben jener "Zwischenhalt" für das Chat Programm zu dienen. hierzu sind allerdings Grundlegende Kenntnisse der Routerprogrammierung nötig (DMZ einrichten, Firewallregeln schreiben). Empfehlenswert hierzu wäre ein UNIX System (dort ist das schreiben eines Firewallscripts vergleichsweise einfach) das als Router dient, oder ein Rechner mit einer entsprechenden Sotwarelösung !! Kann teuer werden!!

     

    Vielleicht hilft es ja, wenn nicht nice to know

     

    Gruß

    Robert Reinbold

    Donnerstag, 29. Juli 2010 19:25