2013-03-26 19 views
6

Ich verwende Qlocalsocket in meiner IPC-Lösung und ich bin in der Lage, den Server zu starten und Verbindungen von QLocalSocket-Clients zu akzeptieren und gut zu kommunizieren, kein Problem darin.nicht in der Lage zu starten qlocalserver

aber mein Problem passiert, wenn ich den Prozess des Servers zu töten, kann ich QLocalServer nicht wieder an der gleichen Stelle hören, muss ich den Dienstnamen ändern, um in der Lage sein, es wieder zu starten, was nicht möglich sein würde Laufzeitumgebung.

so, wie der vorherige Prozess, um diesen Namen zu veröffentlichen?

hier ist, wie ich den Server zu starten:

m_server = new QLocalServer(this); 
if (!m_server->listen("serviceUniqueName")) { 
    qDebug() << "Not able to start the Server"; 
    return; 
} 

Antwort

5

Qt Hilfe:

Auf Unix, wenn der Server abstürzt, ohne Schließung hören mit AddressInUseError scheitern. Um einen neuen Server zu erstellen, sollte die Datei entfernt werden. Unter Windows können zwei lokale Server die gleiche Leitung unter der gleichen Zeit hören, aber alle Verbindungen werden zu einem der Server gehen.

Also, wenn Sie * nix verwenden, sollten Sie die Datei "/ tmp/socket_name" entfernen.

+0

Vielen Dank Freund, das hat richtig funktioniert. – Dorgham

+0

aber ich habe jetzt ein anderes Problem, wenn ich versuche, den Server zu starten, während es eine andere Instanz läuft, gehen Sie einfach zu "/ tmp/socket_name", löschen Sie die Datei und startet erneut ... so wird es die Nachrichten an die letzte richten einer angefangen oder der erste oder unbestimmt ?? @amartel – Dorgham

+0

Ich weiß wirklich nicht, aber um zu vermeiden, dass Sie QtSingleApplication verwenden können: http://qt.digia.com/Product/Qt-Add-Ons/Qt-Solutions-Archive/ – Amartel

12

Wie Amartel aufgezeigt hat, wenn der Server stirbt, müssen Sie die Socket-Datei löschen. Der beste Weg, zu tun ist, bool QLocalServer::removeServer (const QString & name) zu nennen:

m_server = new QLocalServer(this); 
QString serverName("serviceUniqueName"); 
QLocalServer::removeServer(serverName); 
if (!m_server->listen(serverName)) { 
    qDebug() << "Not able to start the Server"; 
    return; 
} 

Auf diese Weise Ihr Gespräch mithören wird nie versagen.

Verwandte Themen