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.0Teil 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
THXDie 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
**:(