Chatsystem - Problem mit Router



  • Hallo Leute!
    Ich habe soeben ein Chatsystem mit Server und Client
    für 2 IP-Adressen entwickelt. Bis jetzt jedoch habe ich das Chatsystem nur auf
    meinem Lokalen Rechner (IP 127.0.0.1 und TCP Port 55555) ans Laufen bekommen 😞

    Einen virtuellen Server für meine Netzwerk-IP (TCP 55555) habe ich bereits
    konfiguriert; doch beim Austauschen der Nachrichten kommt keine Verbindung mehr zustande. Das ganze Chatsystem funktioniert natürlich, wenn ich die Router-Firewall deaktiviere. (Aber was soll das bringen? :D)

    Ich hoffe, Ihr könnt mir weiterhelfen 👍

    Nun einige Daten zu meinem Router:

    Router: T-Sinus 111 DSL
    Router-IP: 192.168.2.1
    IPs: 192.168.2.100(Server), 192.168.2.101 (Client)
    Firmware Version 1.0

    Teil des Logbuchs:
    **
    14.04.2004 18:11:16 **LAND** 217.85.155.163, 1488->> 217.85.155.163, 55555 (from LAN Inbound)
    14.04.2004 17:02:17 **LAND** 217.228.203.77, 1466->> 217.228.203.77, 55555 (from Wireless Inbound)
    **



  • Ok - hab es jetzt mit dem TCP Port 21 hinbekommen.
    Bis jetzt läuft das Chatsystem einwandfrei auf Windows 98, doch auf Windows XP bekomm´ ich es net so ganz mit der Internatadresse hin 😞

    Könnt Ihr es eventuell mal auf eurem (XP) Rechner testen?

    Ich danke euch für jede Antwort!

    Hier die Codes:

    // DER CHAT-CLIENT
    //Header-Dateien
    //------>>>>>>>>
    #include "StdAfx.h"
    #include <windows.h>
    #include <iostream.h>
    //#include <winsock2.h>
    #include <stdio.h>
    //------<<<<<<<<
    
    //Funktionen definieren
    int startWinsock(void);
    //--------------------->
    
    //HAUPTPROGRAMM
    int main()
    
    {
      char ip[15];
      cout << "||||-----IP-Chat-----||||\nEnter IP-Adress: ";
      cin >> ip;
    
      long rc; SOCKET s; SOCKADDR_IN addr; char buf[256];//Winsock und Sockets Definieren
      rc=startWinsock(); if(rc!=0) {return 0;} //Winsock starten
      s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) {return 0;} //Socket definieren 2
    
      memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
      addr.sin_family=AF_INET;
      addr.sin_port=htons(21); // wir verwenden mal port 21
      addr.sin_addr.s_addr=inet_addr(ip); // zielrechner ist unser eigener
    
      //Konnektieren!!!
      printf("\n\nConnecting...\n");
      rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
      if(rc==SOCKET_ERROR) {printf("No Connection !\n\n"); return 0;}
    
      printf("Connection to localhost!\n\n");
    
      // Daten senden
      while(rc!=SOCKET_ERROR)
      {
        printf("\nZeichenfolge eingeben [max 256]: ");
        gets(buf);
    
    	send(s,buf,strlen(buf),0);
    	rc=recv(s,buf,256,0);
    	if(rc==0) {return 0;}  if(rc==SOCKET_ERROR) {return 0;}
    	buf[rc]='\0';
        printf("Nachricht erfolgreich gesendet!\n");
      }
    
      //Aufräumen!
      closesocket(s);
      WSACleanup();
      return 0;
    }
    //HAUPTPROGRAMM-ENDE
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    
    // DER CHAT-SERVER
    //Header-Dateien
    //------>>>>>>>>
    #include "StdAfx.h"
    #include <windows.h>
    #include <iostream.h>
    //#include <winsock2.h>
    #include <stdio.h>
    //------<<<<<<<<
    
    //Funktionen definieren
    int startWinsock(void);
    //--------------------->
    
    //HAUPTPROGRAMM
    int main()
    
    {
      long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; char buf[256]; char buf2[300]; //Winsock und Sockets Definieren
      rc=startWinsock(); if(rc!=0) {return 0;} //Winsock starten
      acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) {return 0;} //Socket definieren 2
    
      memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
      addr.sin_family=AF_INET;
      addr.sin_port=htons(21);
      addr.sin_addr.s_addr=INADDR_ANY;
    
      //Socket binden!
      rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
      if(rc==SOCKET_ERROR) {return 0;}
      //Listen
      rc=listen(acceptSocket,10); if(rc==SOCKET_ERROR) {return 0;}
    
      //Accept
      connectedSocket=accept(acceptSocket,NULL,NULL);
      if(connectedSocket==INVALID_SOCKET) {return 0;}
    
      // Daten austauschen
      while(rc!= SOCKET_ERROR)
      {
    	rc=recv(connectedSocket,buf,256,0); if(rc==0) {} //Daten empfangen
    	if(rc==SOCKET_ERROR) {}
    
        buf[rc]='\0'; //Daten
        printf("Client sendet: %s\n",buf);
        rc=send(connectedSocket,buf2,strlen(buf2),0); //Daten senden
      }
    
      closesocket(acceptSocket);
      closesocket(connectedSocket);
      WSACleanup();
      return 0;
    }
    
    int startWinsock(void)
    
    {
    
      WSADATA wsa;
    
      return WSAStartup(MAKEWORD(2,0),&wsa);
    
    }
    


  • Nimm nicht Port 21. Nach den offiziellen Port-Zuweisungen ist der für ftp reserviert. Was spricht gegen Port 55555?
    Wie du deinen Router richtig konfigurierst, solltest du mit Hilfe der Anleitung oder Google herausbekommen. Du bist bestimmt nicht der einzige "T-Sinus 111 DSL"-Besitzer, der port-forwarding will.

    Mr. K.O.T schrieb:

    [...]doch auf Windows XP bekomm´ ich es net so ganz mit der Internatadresse hin

    Was bekommst du nicht hin? Beschreib den Fehler bitte etwas genauer; evtl. hilft dabei ein Debugger. 🙄



  • Na ja wenn ich auf Windows XP meine richtige IP-Adresse eingebe
    (also meine WAN IP-Adresse), kommt keine Verbindung bei "Connecting..." zustande.
    Auf meinem Win98 Rechner funktioniert das seltsammerweise einwandfrei 😕 🙄

    Mit dem Port 55555 habe ich bis jetzt alles versucht (virtueller Server, Spezialanwendungen bis hin zur Firewalldeaktivierung) - doch das Ding lässt sich einfach nicht öffnen 😞 (Ausser natürlich per Firewalldeaktivierung - aber das klärt sich ja von alleine 🤡)



  • Guck mal unter Port Forwarding bei deinem Router.



  • Mr. K.O.T schrieb:

    (Ausser natürlich per Firewalldeaktivierung - aber das klärt sich ja von alleine 🤡)

    Wenn du also den Paketfilter (Marketingausdruck: "Firewall") des Routers deaktivierst, leitet der alle Anfragen an deinen Rechner weiter? Wenn mehrere Rechner am Router hängen, woher weiß der Router, dass ein bestimmter Port an deinen Rechner soll?
    Das kannst du bestimmt irgendwo einstellen, welcher Port an welchen Rechner weitergeleitet werden soll. Ein Paketfilter, also das, was dein Router fälschlicherweise "Firewall" nennt, basiert auf Regeln. Finde heraus, welche Regel dafür verantwortlich ist, dass Verbindungsversuche auf Port 55555 keinen Erfolg haben.
    Such doch einfach mal nach Foren oder Webseiten, die dein Router-Modell behandeln. Du wirst bestimmt fündig. 🙄

    Benutzt du auf dem Windows XP System eine sogenannte "Personal Firewall"?
    Du könntest z.B. TCPView benutzen, um festzustellen, ob dein Server richtig funktioniert.
    Ansonsten helfen Fehlercodes ungemein viel mehr als "verbindet nicht". 🙂
    Mit einem Debugger bekommst du a) den Funktionsaufruf, der fehlschlägt und b) die Fehlercodes.



  • Habe jetzt die C++ Orginalversionen verwendet
    (http://c-worker.ch/tuts/wstut_op.html)

    So langsam verstehe ich überhaupt nichts mehr... 🙄
    Über den Port 21 funktioniert der Datenverkehr auf meinem Win98-Rechner
    einwandfrei.
    Wenn ich den Port 55555 forwarde und den Datenverkehr über ihn
    ablaufen lasse, gibt der Client die Meldung aus, dass er aktzeptiert wurde.
    Aber das Serverprogramm zeigt nichts an 😞
    THX

    Die Logdateien von tcpview:

    /*Das funktioniert:*/
    

    **
    TCP schorty:ftp schorty:0 LISTENING
    TCP schorty:1660 schorty:0 LISTENING
    TCP schorty:ftp p5082fa6e.dip.t-dialin.net:1660 ESTABLISHED
    TCP schorty:1660 p5082fa6e.dip.t-dialin.net:ftp ESTABLISHED
    **

    **

    /*und das nicht:*/
    

    TCP schorty:55555 schorty:0 LISTENING
    TCP schorty:1669 schorty:0 LISTENING
    TCP schorty:1669 p5082fa6e.dip.t-dialin.net:55555 ESTABLISHED
    TCP schorty:55555 p5082fa6e.dip.t-dialin.net:1669 SYN_RCVD
    **:(


Anmelden zum Antworten