2012-11-16 2 views
1

에 QThread에 대한 액세스를 얻을 수있는 방법 난 그냥 QTcpServer의 구현을 제작하고 incomingConnection 기능을 오버로드했습니다. 나는 다음과 같은 일을 할 스레드에서내가 QTcpServer

void Server::incomingConnection(int handle) //Server inherits from QTcpServer 
{ 
    qDebug()<<"Server::incomingConnection"<<handle; 
    Thread *thread = new Thread(handle,this); 
    connect(thread,SIGNAL(finished()),this,SLOT(deleteLater())); 
    thread->start(); 
} 

:

void Thread::run() 
{ 
    qDebug() << m_socketDescriptor << "Starting Thread"; 
    m_socket = new QTcpSocket(); 
    if(!m_socket->setSocketDescriptor(m_socketDescriptor)) 
     return; 

    connect(m_socket,SIGNAL(readyRead()),this,SLOT(readyRead())); 
    connect(m_socket,SIGNAL(disconnected()),this,SLOT(disconnected())); 

    qDebug() << m_socketDescriptor << "Client connected"; 

    exec(); 
} 

는 지금은 멀티 스레드 서버를했습니다.

하지만 난 연결된 클라이언트에 대한 액세스를 얻을 통해 그들에게 데이터를 전송하는 방법에 대해 설명합니다. GUI?

사전에 감사합니다!

안부

+0

어떻게 든 연결을 추적합니까? –

답변

1

당신은 QTCPSocket의 다른 쪽 끝에있는 클라이언트에 데이터를 전송하는 write 또는 <<으로 'QIODevice'의 일부 기능 등을 사용할 필요가있다.

웹 페이지를 브라우저 클라이언트에 제공하는 경우 먼저 request에 수신 (또는 읽기 명령 사용) 한 다음 사용중인 프로토콜에 따라 적절한 response을 전송하십시오.

그래서 먼저 컴퓨터의 포트 80에서이 서버를 설정 한 다음 브라우저를 http://localhost으로 엽니 다. 그런 다음 qDebug를 사용하여 브라우저에서 요청을 인쇄하십시오.

void Thread::readyRead() 
{ 
    qDebug() << Q_FUNC_INFO; 
    qDebug() << m_socket.readAll(); 
} 

당신이 일하는 것을 가지고 후에는 요청을 구문 분석가는 방법을 한 다음 반응하려고하는 방법, 또는 당신이 제공 할 데이터를 결정합니다.

또한 See also의 TCP 예제를 확인하십시오. QTCPSocket.

희망이 있습니다.