2013-03-26 28 views
6

私はIPCソリューションでQlocalsocketを使用しています。私はサーバーを起動し、QLocalSocketクライアントからの接続を受け入れ、うまく通信できます。qlocalserverを開始できません

私の問題は、サーバーのプロセスを終了したときにQLocalServerを同じ場所でリッスンさせることができないため、サービス名を変更して再開できないようにする必要があります実行時環境。

その名前を公開する前のプロセスを作成するにはどうすればよいですか?

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

答えて

5

Qtのヘルプ:

Unixでは

閉じずにサーバーがクラッシュが聞く AddressInUseErrorで失敗する場合は、ここで

は、私は、サーバーを起動する方法です。新しいサーバーを作成するには、ファイルを削除する必要があります。 Windowsの場合、2台のローカルサーバーは同じパイプで同じ時刻に を聞くことができますが、接続はサーバーのいずれかになります。

* nixを使用している場合は、 "/ tmp/socket_name"ファイルを削除する必要があります。

+0

友人に感謝し、正しく動作しました。 – Dorgham

+0

しかし、別のインスタンスが実行中にサーバーを起動しようとすると別の問題が発生する "/ tmp/socket_name"に移動し、ファイルを削除してもう一度起動します。 1つは開始したか、最初のものか未定か? @amartel – Dorgham

+0

私は本当に分かりませんが、あなたがQtSingleApplicationを使用できることを避けるために:http://qt.digia.com/Product/Qt-Add-Ons/Qt-Solutions-Archive/ – Amartel

12

Amartelが指摘したように、サーバーが消滅した場合は、ソケットファイルを削除する必要があります。行うための 最良の方法は、bool QLocalServer::removeServer (const QString & name)を呼び出すことです:

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

聞くためにあなたの呼び出しが失敗することはありませんこの方法です。

関連する問題