TCP Verbindung übers Internet herstellen
-
Hallo, schreibe gerade an einem Chatprogramm, wenn ich es auf meinem eigenen Rechner teste läuft es super, gestern wollte ich es das erste mal mit einem Kumpel übers Internet testen, hab ihm die Datei im Skype geschickt, mit
meine IP-Addresse ermittelt, doch leider hat es nicht funktioniert. Ich poste mal vereinfacht den Code welche ich für den Verbindungsaufbau benutze.
///// Datei Server.h //////////////////////////////////////////////////// #ifndef SERVER_H #define SERVER_H #include <QTcpServer> class Server : public QTcpServer { Q_OBJECT public: explicit Server(QObject *parent = 0); signals: public slots: protected: void incomingConnection(int socketfd); }; #endif // SERVER_H ///// Datei Server.cpp ////////////////////////////////////////////////// #include "server.h" #include <QTcpSocket> Server::Server(QObject *parent) : QTcpServer(parent) { } void Server::incomingConnection(int socketfd) { QTcpSocket *client = new QTcpSocket(this); client->setSocketDescriptor(socketfd); qDebug() << "New client from:" << client->peerAddress().toString(); } ///// Datei main.cpp //////////////////////////////////////////////////// #include <QtCore/QCoreApplication> #include <QTcpServer> #include <QTcpSocket> #include "server.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); if(argc > 1) { // Als Client starten QTcpSocket *socket = new QTcpSocket(); socket->connectToHost(argv[1], 4200); } else { // Server starten Server *server = new Server(); bool success = server->listen(QHostAddress::Any, 4200); if(!success) { qDebug() << "error, can't listen on port 4200"; } else qDebug() << "ready"; } return a.exec(); }
Wenn ich es wieder lokal teste, also mit Aufruf "programm 127.0.0.1" klappt es ohne Probleme, nur übers Internet nicht. Irgendetwas scheine ich zu vernächlässigen, also meine Frage
- Was muss ich machen damit man übers Internet chatten kann
- Warum funktioniert es so wie oben nicht?
Danke, Stefan
-
Habe den Code jetzt nicht geprüft, aber gern aufkommende Probleme liegen bei Routern oder der Firewall. Hast du was davon laufen ? Und wenn ja was machen die mit Port 4200 ?
-
Also erstmal dass ich Port 4200 jetzt hier hingeschrieben habe ist beliebig, ich habe mit ihm übers Internet auch verschiedene Ports ausprobiert, hat aber alles nicht geholfen.
Wegen Routern, ich bin hier in ein wlan eingeloggt, meine ip-addresse die ich hier bekomme (irgendwas 192.168. usw) ist eine andere als die die ich nach draußen habe (wenn ich http://whatismyipaddress.com/ aufrufe). Ich weiß hier leider nicht sehr viel übers dieses Netzwerk, wegen Firewall, die hab ich so eingestellt dass sie mein Programm nicht blockt.
Ansonsten, ist es überhaupt möglich ein Chatprogramm zu schreiben so dass zwei Leute dieses einfach starten und dann loslegen können zu chatten?
-
Ohne Infrastruktur dazwischen ist das heutzutage nicht mehr so einfach: http://de.wikipedia.org/wiki/Stateful_Firewall
Sowas ist inzwischen im billigsten 08/15-Router implementiert.
Aber natürlich könntest du in einer der beiden Firewalls ein Forwarding für einen speziellen Port einrichten.
-
was meinst du mit forwarding für einen port genau, heißt dass jetzt ich müsste mich an meinen internetanbieter wenden und ihn bitten einen port von meinem rechner zum router freizugeben?
und was ist mit den gängigen ports für ftp, http usw. kann ich die nicht benutzen?
hab ich das jetzt auch richtig verstanden dass dies aus meinem netzwerk nicht so einnfach möglich ist? wie funktioniert das bei z.B. icq dann? weil die da einen zentralen server haben wo sich alle anmelden?
-
Der Artikel sagt eigentlich alles. SPI sorgt dafür, dass von Außen nur dann eine Verbindung aufgebaut werden kann wenn davor eine Anfrage von Innen kam.
Ein Forwording kannst du an deinem Router einstellen.
Ja, ICQ hat eine Infrastruktur bei der sich jeder Nutzer anmeldet. Hast du die Verbindung initiiert erlaubt deine Firewall danach eingehenden Verkehr.Eigentlich müsstest du nur an einem Router das Forwarding aktivieren, der würde dann sozusagen als Server fungieren.
-
Achso, ok nun komm ich allerdings nicht so ohne weiteres an den Router von meinem Provider weil ich entweder im der uni im wlan sitze oder im studentenwerk mich per netzwerkkarte einwähle, gibts da irgendwie ne andere möglichkeit weil ich nicht glaub das wenn ich dem admin vom uni-netz ne mail schreibe er soll doch mal bitte den Router forwarden er dies auch tun würde??
-
Wäre wohl der erste Admin der sowas ohne Druck von Oben macht
Dann bleibt dir nur entweder die Gegentstelle zu öffnen oder irgendwo einen Server hinzustellen der für beide erreichbar ist.
-
mhhh, heißt also dass es dann nicht geht... blöd, wo bekomm ich denn so nen server her und was kostet das?
-
Würde ich dir aber nicht empfehlen wenn du dich nicht auskennst.
Belass es doch erstmal bei einem LAN-Chat.