[gelöst] Port-Angabe TCPServer

Alles rund um die Programmierung mit Qt
Antworten
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

[gelöst] Port-Angabe TCPServer

Beitrag von Mineralwater »

Ich hab mir die Beispiele in der Doku zu Fortuneclient und Fortuneserver angesehen und hab es leider nicht hinbekommen an dem Beispiel eine exakte Port-Angabe vorzunehmen.

Der Ausschnitt aus dem Beispiel...

Code: Alles auswählen

...
tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress::LocalHost,7); <-- ergänzt
...
So wie ich das oben geschrieben hat, klappt es leider nicht.

Das Beispiel nutzt nämlich den Port 0 welcher laut Doku für eine automatische Port-Vergabe genutzt wird.
Da würde mich nebenbei auch interessieren woher der Server weiß welche Ports bereits in Benutzung waren, schließlich addiert er bei der Angabe von Port 0 (bspw. 55569) immer mit 1 sobald man diesen neu startet.


Viele Grüße aus`m Norden :)
Zuletzt geändert von Mineralwater am 6. Juni 2009 14:50, insgesamt 1-mal geändert.
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

hat denn keiner eine Idee?
Würde halt gerne wissen ob ich damit nun ganz falsch liege oder nun eigentlich doch richtig wäre. :(
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Der Server weis es nicht, aber das Betriebssystem.

Mal davon abgesehen, daß Ports unter 1024 nur vom Benutzer root geöffnet werden dürfen.
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

Naja ich bin der Root-Benutzer am Computer, quasi als Administrator angemeldet.
Aber ansich meinst du wäre es richtig?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Probiere bitte erstmal einen Port > 1024!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

Naja das klingt nun vll etwas doof aber in Moment kann ich`s leider nicht ausprobieren, weil sobald ich Qt statisch neu kompiliere, funktioniert gar nix mehr. Ich muss es leider machen weil ich MySQL benötige.

http://qtforum.de/forum/viewtopic.php?t=9159

Hoffe ihr könnt mir helfen
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

Okay ich konnte wieder dort ansetzen, nun läuft mein Qt ja wieder.

Code: Alles auswählen

tcpServer = new QTcpServer(this); 
tcpServer->listen(QHostAddress::LocalHost,6246); <-- ergänzt 
Egal welchen Port ich verwende, auch überhalb der 1024 Marke, funktioniert es leider nicht. Er springt dann direkt, wie es auch im Beispiel zu finden ist, in die Schleife und gibt eine Meldung aus "Unable to Start the Server on Port ."

Nicht einmal der Port selbst wird durch die QMessageBox genannt, sondern nur der Punkt nach dem Port selbst.
tr("Unable to start.... Port %1.")...

Find ich sehr merkwürdig, hat da wer eine Idee oder nen Tipp?

Gruß Mineralwater
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Im Code gibt es keine Schleife. serverPort() gibt einen int zurück, somit gibt es immer einen Wert. Und woher weist du, daß der Server nicht funktioniert? nmap? lsof?
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

Oh sry tut mir leid, meinte auch gar nicht schleife sondern eine Bedingung.

Code: Alles auswählen

    if (!tcpServer->listen()) {
        QMessageBox::critical(this, tr("Fortune Server"),
                              tr("Unable to start the server: %1.")
                              .arg(tcpServer->errorString()));
        close();
        return;
    }
Dort springt er mir rein und lässt deswegen Meldung ausgeben die lautet
"Unable to start the server: ."
nmap? lsof?
Was genau meinst du damit? Google gab als Ergebnis einmal ein Firewall-Produkt und Isof eine Schulplatform. Weiß jetzt nicht so genau was du damit meinst.

Firewalls, wie ich gerade merke hab ich noch nicht angemerkt, sind alle aus.

Gruß
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag von NoRulez »

Kurzum,

upsala meinte mit lsof/nmap vermutlich ob Du schon getestet hast ob auf dem Port schon etwas läuft bzw. Dein Server läuft.
Das Problem warum er Dir die Meldung ausgibt kann unter anderem auch sein das auf diesem Port bereits ein (anderer) Server/Dämon lauscht.
Du kannst auch mittels "netstat -an" überprüfen ob auf dem Port schon was läuft.

Also folgender Code läuft bei mir:

Code: Alles auswählen

 
.
.
.
QTcpServer *server = new QTcpServer;

if (!server->listen(QHostAddress::Any, 8080) {
    cout << QString("Unable to start the Server: %1.").arg(server->errorString()).toStdString() << endl;
    return app.exec();
}

cout << QString("The server is running on port %1.\n").arg(server->serverPort()).toStdString() << endl;
.
.
.
LG NoRulez
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

Nach einem Neustart von Qt hat der Code von NoRulez einwandfrei funktioniert.

Hab in letzter Zeit oft feststellen müssen das der Qt-Creator ganz gerne mal einen Neustart benötigt ;)
Antworten