2013-03-26 5 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는 도움 :

유닉스에

닫지 않고 서버가 충돌 듣고 AddressInUseError 실패합니다 경우 여기를

내가 서버를 시작하는 방법입니다. 새 서버를 만들려면 파일을 제거해야합니다. Windows에서 두 로컬 서버는 동일한 시간에 동일한 파이프를 수신 할 수 있지만 모든 연결은 서버 중 하나에 연결됩니다.

따라서 * nix를 사용하는 경우 "/ tmp/socket_name"파일을 제거해야합니다.

+0

많은 친구들에게 감사드립니다. 제대로 작동했습니다. – Dorgham

+0

하지만 다른 문제가 생겼습니다. 다른 인스턴스가 실행 중일 때 서버를 시작하려고하면 "/ tmp/socket_name"으로 이동하여 파일을 삭제하고 다시 시작합니다. 그래서 마지막으로 메시지를 보냅니다. 하나 시작 또는 첫 번째 또는 미확인 ?? @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; 
} 

이 방법이 실패하지 않습니다.