2011-08-30 3 views
1

Windows에서 서비스로 '로컬 포춘 서버'예제 (Qt 4.7.3)를 구현 중입니다. 내가 원하는 것은 누군가가 서비스를 일시 정지 시켰을 때, 로컬 서버는 연결된 로컬 소켓 (로컬 포춘 클라이언트)에 오류를 알려야한다는 것입니다. 오류는 QLocalSocket :: ServerNotFoundError가 될 수 있습니다. 지금,이 오류를 서버 예제에서 생성하는 방법. 이 오류를 생성하려는 다음 코드를 확인하십시오.QLocalSocket에 대한 오류 발생 방법

void FortuneServer::incomingConnection(quintptr socketDescriptor) 
{ 
if (disabled) { 
    **// here i want to emit QLocalSocket::ServerNotFoundError** 
    return; 
} 

QString fortune = fortunes.at(qrand() % fortunes.size()); 
FortuneThread *thread = new FortuneThread(socketDescriptor, fortune, this); 
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); 
thread->start(); 
} 

void FortuneServer:: pause() 
{ 
    disabled = true; 
} 
+0

을 그것은 영어로 나쁜 문법입니다. 그것은 "QLocalSocket에 대한 오류를 어떻게 내야합니까?"입니다. – CodeLurker

답변

2

난 당신이 만들고 같은 당신의 자신의 메시지를 보내한다고 생각 :

QString fortune = "Server down"; 

그러나 서버가 수신 메시지가있는 경우이 발생 시킬수 있습니다.
또는 끈다 QTcpServer::close() 방법 파크 서버
클라이언트 응용 프로그램은 연결이 끊어진 것입니다 그리고 당신은 당신이 그것을에 원하는 신호를 얻을 수 있어야합니다

void FortuneServer:: pause() 
{ 
    this.close(); 
} 

:

connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), 
      this, SLOT(displayError(QAbstractSocket::SocketError))); 
1

신호가 아니기 때문에 QLocalSocket::ServerNotFoundError을 방출 할 수 없습니다. 자신의 신호를 정의하고 대신 방출해야합니다 (신호로 값을 전달할 수 있음). 또한 슬롯과 신호를 구현해야합니다. signals and slots에 대해 더 자세히 읽어보십시오. 당신이 당신의 서버가 클라이언트에 통지 할 경우

+0

만약 내가 신호와 슬롯에 대해 읽어야한다면 y가 여기에 올 것입니다. 정확히 내 코드를 봐. –

+0

음, Qt 신호가 방출됩니다. 따라서 "emit"이라는 단어를 사용하면 오해가 발생할 수 있습니다. 클라이언트 연결을 끊으려면 abort() 또는 close()를 사용하여 소켓을 닫을 수 있습니다. 또한 QLocalServer를 사용하여 로컬 서버를 구현해야합니다. – Maciej