Fragen zu QTcpSocket und QTcpServer
Verfasst: 23. November 2009 23:05
Hallo Leute,
also, ich habe gerade begonnen ein kleines Chatprogrammen zu erstellen und dabei sind bei mir Unklarheiten aufgetaucht.
Der Chat, den ich machen will besteht aus zwei Programmen, einem Sender und einem Empfänger.
So bin ich vorgegangen:
Sender-Programm
----------------------
1. Ich erstelle ein QTcpSocket-Objekt und erstelle einen Signal/Slot um herauszufinden, ob die verbindung besteht.
2. Ich baue die Verbindung zu host auf
3. Ich erzeuge einen Stream, den ich dann auf tcpSocket ausgebe
Empfänger-Programm
----------------------
1. Ich erzeuge ein QTcpServer-Objekt und ein QTcpSocket-Objekt und weise ihm SIGNALS/SLOTS zu um eine reinkommende Verbindung zu erkennen und um die Daten auszulesen
2. Ich weise dem tcpServer-Objekt einen Adapter und einen Port zu, den er abhören soll
Das funktioniert schon
-------------------------
Am Server wird bei Verbindung das SINAL newConnection() ausgelöst, also eine Verbindung wird aufgebaut, das funktioniert bei localhost, LAN, Hamachi und übers internet. Soweit alles ok.
Das funktioniert nicht
-------------------------
Am Server wird das SIGNAL readyRead() nicht ausgelöst und ich kann die Daten nicht empfangen.
Ich kann nicht auslesen wie die IP des verbundenen Hosts ist.
Nun meine Fragen
---------------------
1. Dient das QTcpServer-Objekt nur dazu um an einem Port zu horchen ?
2. Muss ich am Server (wie schon gemacht) ein QTcpSocket-Objekt erstellt werden?
3. Ich muss doch irgendwie dem QTcpSocket-Objekt die Eigenschaften des QTcpServer-Objekt übergeben, wie z.B Port auf dem Daten ankommen usw., wie funktioniert das genau?
4.Wie kann ich am Server die IP des Verbundenen Client auswerten und als String verwenden?
5. Wie genau müsste der Empfang von Daten funktionieren?
Vielen Dank im Vorraus,
ich hoffe ihr könnt mir bei meinem N00b-Problem helfen.
also, ich habe gerade begonnen ein kleines Chatprogrammen zu erstellen und dabei sind bei mir Unklarheiten aufgetaucht.
Der Chat, den ich machen will besteht aus zwei Programmen, einem Sender und einem Empfänger.
So bin ich vorgegangen:
Sender-Programm
----------------------
1. Ich erstelle ein QTcpSocket-Objekt und erstelle einen Signal/Slot um herauszufinden, ob die verbindung besteht.
Code: Alles auswählen
tcpSocket = new QTcpSocket(this);
QObject::connect(tcpSocket, SIGNAL(connected()), this, SLOT(verbindungAufgebaut()));Code: Alles auswählen
tcpSocket->connectToHost( string_host, int_port );Code: Alles auswählen
QTextStream stream_nachricht(tcpSocket);
stream_nachricht << string_nachricht << endl;Empfänger-Programm
----------------------
1. Ich erzeuge ein QTcpServer-Objekt und ein QTcpSocket-Objekt und weise ihm SIGNALS/SLOTS zu um eine reinkommende Verbindung zu erkennen und um die Daten auszulesen
Code: Alles auswählen
tcpServer = new QTcpServer(this);
tcpSocket = new QTcpSocket(tcpServer);
QObject::connect(tcpServer, SIGNAL(newConnection()), this, SLOT(verbindungAufgebaut()));
QObject::connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(nachrichtEmpfangen()));Code: Alles auswählen
tcpServer->listen(QHostAddress::Any,int_port);Das funktioniert schon
-------------------------
Am Server wird bei Verbindung das SINAL newConnection() ausgelöst, also eine Verbindung wird aufgebaut, das funktioniert bei localhost, LAN, Hamachi und übers internet. Soweit alles ok.
Das funktioniert nicht
-------------------------
Am Server wird das SIGNAL readyRead() nicht ausgelöst und ich kann die Daten nicht empfangen.
Ich kann nicht auslesen wie die IP des verbundenen Hosts ist.
Nun meine Fragen
---------------------
1. Dient das QTcpServer-Objekt nur dazu um an einem Port zu horchen ?
2. Muss ich am Server (wie schon gemacht) ein QTcpSocket-Objekt erstellt werden?
3. Ich muss doch irgendwie dem QTcpSocket-Objekt die Eigenschaften des QTcpServer-Objekt übergeben, wie z.B Port auf dem Daten ankommen usw., wie funktioniert das genau?
4.Wie kann ich am Server die IP des Verbundenen Client auswerten und als String verwenden?
5. Wie genau müsste der Empfang von Daten funktionieren?
Vielen Dank im Vorraus,
ich hoffe ihr könnt mir bei meinem N00b-Problem helfen.