2014-01-30 3 views
1
void server::incomingConnection(qintptr socketDescriptor) { 

    qDebug() << "incoming connection"; 
    connection* new_connection = new connection(this); 
    new_connection->set_socket_descriptor(socketDescriptor); 

    connect(new_connection, SIGNAL(ready_read()), this, SLOT(ready_read())); 
    connect(new_connection, SIGNAL(disconnected()), this, SLOT(disconnected())); 

    emit signal_new_connection(new_connection); 
} 

서버 클래스가 QTcpServer로부터 상속 및 연결 클래스 가 구성원으로 QTcpSocket을 가지고 있으며, 하려는 사용자에 대한 몇 가지 정보는 (이름, IP, ID를 ...)에 연결되어QTcpServer :: incomingConnection (qintptr socketDescriptor) 지정한 소켓에 연결할 수 있습니까?

내 문제는 내가 즉 new_connection에 대해 아무것도 모릅니다. 누가 서버에 연결하고 있는지 알아야합니다. 이런 이유로 나는 다시 연결하고 싶다 그러나 어떻게? 어떤 방법이 있니? 또는 연결된 소켓 (사용자)에서 데이터 (인사말 메시지)를받을 때까지 기다려야합니까?

+0

QObject::sender() 방법을 사용할 수 있습니다를 얻으려면? 질문에 정보가 누락 된 것 같아요. – peppe

+0

내 말은 ,,, incomingConnection 함수로 초기화 된 임시 연결이 필요하거나 incomingConnection 함수에서 new_connection을 초기화 할 수 있습니까? (내 영어는 유감입니다) –

+0

물론 가능합니다. 그렇다면'nextPendingConnection()'을 사용하여 멋지게 연결된 QTcpSocket을 얻지 않으시겠습니까? – peppe

답변

0

나는 우연히 동일한 문제가있는이 오래된 스레드에 부딪혔다. 방금 해결책을 찾았으니 비슷한 문제가있는 경우를 대비하여 여기에 게시하기로 결정했습니다.

실제 QTcpSocket ( readyRead() 신호를 방출 한), 당신은, 예컨대 : 의미 "서버와 연결하는"무엇을

void NetServer::onNewConnection() { 
    QObject::connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onData())); 
} 
// ... 
void NetServer::onData() { 
    QTcpSocket *client = this->server->nextPendingConnection(); 
    qDebug() << "Received data from" << sender(); 
    // or 
    qDebug() << "Received data from" << this->sender(); 
    // or even 
    qDebug() << "Received data from" << QObject::sender(); 
}