2015-06-02 26 views
1

我正在为Qt中的一个学校项目制作一个简单的客户端服务器程序,但我遇到了关于如何处理到服务器的多个新连接的问题。我有一个新的连接到目前为止的代码是非常基本的:在Qt服务器应用程序中处理多个套接字的最佳方法?

void LoginServer::newConnection() 
{ 
    logSock = server->nextPendingConnection(); 

    if(!logSock->waitForConnected(500)) 
    { 
     qDebug() << "Connection failed"; 
    }else 
    { 
     qDebug() << "It worked!"; 
     connect(logSock, SIGNAL(readyRead()),this, SLOT(readData())); 
    } 
} 

一种方法我在互联网上被推动,如向量数据结构新的连接,并从一个容器内处理它们所看到的。我遇到的一个问题是,如果是这样,我将所有不同的套接字连接到相同的插槽以读取数据,有没有什么优雅的方法可以告诉哪个套接字发送了信号?

另一种我认为这样做的方式是,当readyRead()被发射时,我可以搜索套接字列表以查看哪些具有bytesAvailable,但这对我来说似乎是一个过于简单的解决方案。另外,如果两个套接字同时发送数据,程序可能会识别错误的套接字。

我认为的另一个选择是重写readyRead()以在信号中包含对自身的引用,然后我意识到我没有第一个想法如何做到这一点。

connect(logSock, SIGNAL(readyRead(QTcpSocket*)),this, SLOT(readData(QTcpSocket*))); 

任何意见将不胜感激。

回答

1

可以识别插座,其通过使用在槽下面的代码发射readyRead()信号:

QTcpSocket* socket = qobject_cast< QTcpSocket* >(sender()); 

...和由 socket->readAll()读取数据。 sender()返回指向QObject的指针,它发出信号。

+0

它的工作原理!谢谢! –

相关问题