我正在尝试开发具有基本身份验证的简单服务器,我有以下代码:
socket = new QTcpSocket();
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()),Qt::DirectConnection);
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()),Qt::DirectConnection);
check_user();
.......和check_user()是
socket->write("Please enter username:");
socket->flush();
QStringList list;
while (socket->canReadLine())
{
QString data = QString(socket->readLine());
if ( data == "\r\n" )
break;
list.append(data);
}
qDebug()<<list;
但这不必等待用户输入并继续进行。我希望这个函数等待用户输入一个可变长度的字符串,直到回车。但是如何?
您可以将插槽连接到readyRead()
插座的信号,并在那里处理输入。
(https://doc.qt.io/qt-5/qiodevice.html#readyRead)
但是,要正常工作,您需要在套接字所在的线程中运行一个事件循环。
(https://doc.qt。 io / archives / qt-4.8 / qeventloop.html)
另一种解决方案是使用waitForReadyRead(-1)
套接字。这将阻塞线程并发出readyRead()
信号。true
如果发出信号,该函数将返回。但是您还需要一个运行中的事件循环。
(https://doc.qt.io/qt-5/qabstractsocket.html#waitForReadyRead)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句