TCP/IP-Chat wie Skype

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    TCP/IP-Chat wie Skype

    Hallo Leute,
    Ich habe in VB.NET mit VB2008 schon einen Chat programmiert (TCP/IP-Chat).
    Bei dieser Art von Chat muss man aber immer die Ports am Router freigeben.
    Wie machten das Skype? Da muss man ja auch nicht immer Ports freigeben.
    Kann ich einen Chat über den Port 80 einrichten? (Der wäre ja immer offen...)
    Oder gibt es andere Methoden um den Port automatisch zu öffnen? (Habe was gelesen mit NAT-UPNP)
    Kann man das irgendwie in VB2008 implementieren?
    Wäre auf Antworten und vl. auch Beispiele sehr gespannt. Danke im Vorraus!
    mfg fox(fux)
    Hallo Fox

    Soweit ich weiß hat Skyp einen Server (linux/windows kp)
    Da baust du die verbindung auf zu denn kontackt partner über denn server (ablauf fast wie icq)
    Mann hat halt immer ein Server dazwischen.
    Du kannst aber auch in deinem Router denn port denn du möchtest (80=Http/appache etc)
    Ich empfhle dir Port 8000 oder 8080.

    Wenn du nicht weißt wie das geht schick mir eine PN hab TeamViewer.
    MFG
    Boscko
    Hi,
    Danke für die Antwort.
    Ja ist mir schon klar, dass ich den Port freigeben kann. Das Programm sollte aber dann für andere Leute sein, welche auch den Port forwarden müssten. Das bekommen die aber leider nicht hin. ^^
    Gibt es keine möglichkeit eine Server/Client-Anwendung zu programmieren welche kein Portforwarding benötigt? Oder welche eben den Port 80 nutzt, weil dieser ja eh schon überall offen ist... ???
    mfg fox(fux)
    port 80 ist aber HTTP xD

    Allso noch einmal :D

    Dein Pc = Server = router Port freigabe z:b port 8000

    User = Client = Baut verbindung zu deinem PC über IP und Port auf

    der User braucht kein Port Freigabe nur der Server in deinem Falle dein PC/Router

    Fertig
    Hallo,
    Danke den Antwortern.
    Ja ich weiß dass nur der Server portforwarded sein muss.
    Aber genau das will ich nicht... Ist das nicht möglich?
    Einen Server zu bauen wo der Port schon offen ist (weil er eben 80 ist) oder der automatisch (via NAT) geöffnet wird!?
    Ist das möglich?
    Ich möchte Daten von einem PC (Client) zu einem anderem (Server) übertragen. - Und das ohne Portforwarding...
    Sollte man da vl. auf andere Methoden außer TCP/IP zurückgreifen?
    mfg fox(fux)
    ohne Ports geht gar nichts, ohne offenen Port auch nicht, der Lochtrick öffnet nur eben temporär die Ports, wie es ein Router eben auch macht, wenn man sich selbst nach außen verbindet...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    fox(fux) schrieb:

    Port 80 einrichten? (Der wäre ja immer offen...)
    Wenn du keinen Webserver bei dir zu Hause hast, nicht.
    Auch, wenn du auf eine Website gehst, schickt dein Browser die Anfragen nicht über 80 raus, sondern über einen zufälligen Port (üblicherweise im hohen Bereich).
    Von meinem iPhone gesendet
    Skype belegt auf alle Fälle den 80 Port. Das bemerkt man wenn man zb Apache starten will ->.

    Mein Tipp. Einen Vserver (Windows ist zu Teuer, Linux funkt mit "mono" auch) anschaffen und eine Serversoftware erstellen.

    Peer2Peer ist immer die Gefahr groß das bei einem User etwas nicht funktioniert.

    Zum Testen von P2P würde allerdings auch Hamachi Taugen (Dort muss man keine Ports freigeben, Eignet sich nicht umbedingt für große Datenmängen).

    VirusWare
    Wenn der Router UPnP aktiviert hat (und es dann logischerweise auch unterstützt) ist die Firewall des Routers quasi unnütz.
    Denn damit kann ein Client im privaten Netz Ports am Router forwarden (nichts anderes macht UPnP).
    Geforwardede Ports, sind dann von aussen für JEDEN frei zugänglich.
    Ggf. können gute Router noch gewisse Paketfilter einbauen.

    Durch UPnP bzw IGD ist es also möglich, das Schadsoftware auf einem PC im privaten Netz beliebige Ports am Router öffnet, und damit einen Zugang zum Netz schafft.
    Das ist meine Signatur und sie wird wunderbar sein!
    Man benötigt lediglich im Web ein Server der das Managed, die beiden Computer die Kommunizieren sollen sind lediglich Clients und Client = kein Portwarding.

    Ich habe sowas mal auf meinem Server mit PHP versucht, ist auch möglich, bloß läuft ein PHP Script nicht lange. Aber prinzipiell musste auf dem Server im Netz einfach auf eingehende Verbindungen z.B. am Port 1234 warten. Ausgehende Ports der Clients sind ja offen, somit schicken die Clients eine Verbindungsanftage an dein Server an Port 1234, der macht nun 2 Verbindungen auf und verbindet den Networkstream

    In VB Ausgedrückt

    VB.NET-Quellcode

    1. Dim StreamClientA As NetworkStream
    2. Dim StreamClientB As NetworkStream
    3. Dim SRClientA As New StreamReader(StreamClientA)
    4. Dim SWClientA As New StreamWriter(StreamClientA)
    5. Dim SRClientB As New StreamReader(StreamClientB)
    6. Dim SWClientB As New StreamWriter(StreamClientB)
    7. While True
    8. SWClientA.Write(SRClientB.Read()) ' schreibe in den Stream von Client A das was von Client B gelesen wird
    9. SWClientB.Write(SRClientA.Read()) ' schreibe in den Stream von Client B das was von Client A gelesen wird
    10. End While


    So mal auf ganz einfache weise erklärt.