Qt插件QtWebsocket不能使用waitForConnected方法
最近项目需要使用WebSocket来进行网络通信,在github上找到了QtWebsocket这个插件,编译和跑Demo都没什么难度,但是卡在了客户端建立连接这个过程上,自己的程序死活不能建立连接,而Demo一跑就通,详细比较了一下我的程序和Demo的区别,只不过我使用的是同步方式,Demo用的是异步方式,本质上并没有什么不同:
Demo
Client::Client(QWidget *parent) :
QWidget(parent),
ui(new Ui::Client) {
ui->setupUi(this);
wsSocket = new QtWebsocket::QWsSocket(this, NULL, QtWebsocket::WS_V13);
QObject::connect(ui->connectButton, SIGNAL(pressed()), this, SLOT(connectSocket()));
}
void Client::connectSocket() {
bool ok;
QString ipAddress = QInputDialog::getText(this, tr("Client"), tr("Server IP:"), QLineEdit::Normal, "ws://localhost:80", &ok);
ipAddress = ipAddress.trimmed();
if (ok && !ipAddress.isEmpty()) {
QString ip;
quint16 port;
if (ipAddress.contains(QRegExp(QLatin1String(":([0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$")))) {
QStringList splitted = ipAddress.split(':');
port = splitted.takeLast().toUInt();
ip = splitted.join(':');
} else {
ip = ipAddress;
port = 80;
}
wsSocket->connectToHost(ip.toUtf8(), port);
}
}
我的程序
//websocket连接的host需要以"ws://"开头
wsSocket->connectToHost(QString("ws://127.0.0.1"), port);
wsSocket->waitForConnected(3000);
后来经过测试,将wsSocket->waitForConnected(3000);加入到Demo中,Demo也不能建立连接,我才确认QtWebsocket在同步建立连接方法上有问题,将自己的程序改成异步建立连接后,连接得以成功建立。
记录自己遇到的坑,让别人走得稳一点。