Я не могу использовать ни один из примеров клиентов QWebSockets, перечисленных здесь:
http://qt-project.org/doc/qt-5/qtwebsockets-examples.html
Приложение пытается открыть локальный URL, сокет застревает в QAbstractSocket :: ConnectingState и
QDebug () << m_webSocket.error ();
возвращает QAbstractSocket :: UnknownSocketError. Конечно, «подключенный» сигнал никогда не излучается.
У меня QT 5.3 в OSX-льве. У меня есть OpenSSL 1.0.1i и
QSslSocket :: supportSsl ();
возвращает истину.
У меня действительно нет идей, так что если вы заболели, будьте очень благодарны.
Спасибо заранее.
Во-первых, я не думаю, что ssl является проблемой в этом случае.
Я просто запустил примеры, и все работало нормально. Это означает, что может быть одна из следующих общих проблем (или могут быть другие, о которых я не знаю).
EchoClient client(QUrl(QStringLiteral("ws://localhost:1234")));
и заменить 1234
с номером как 8888
или же 9001
и т. д. должен решить проблему. Обратите внимание, что в этом случае вы должны изменить порт в клиентской и серверной программе. (Прочитайте следующий пункт, чтобы полностью понять, если вы не понимаете, о чем я говорю.)Запустите клиентскую программу во время работы соответствующей серверной программы. Например, когда вы работаете echoclient
, вы должны держать echoserver
Бег. Если вы находитесь в Windows или Linux, вы можете сделать это, открыв два процесса Qt Creator и запустив echoserver
сначала, а потом echoclient
, Если вы работаете в Mac, вы не можете создать два экземпляра Qt Creator (по крайней мере, в Yosemite я не знаю об osx lion). Вы должны запустить echoserver
(и не закрывайте консоль), затем откройте echoclient
проект и установить echoclient как активный проект и запустить.
(хотя вряд ли) если вы открываете проект, копируете файлы cpp с веб-сайта и вставляете его в свой проект, а затем компилируете (вместо того, чтобы загружать его с вкладки «Примеры» вашего Qt Creator), то у вас может отсутствовать конфигурация файла .pro. Просто добавь websockets
с QT += core
в .pro
файл проекта.
Если это не так, вы можете сообщить мне об этом и попробовать опубликовать в Форум Qt тоже в таком случае.
Вот пример кода, работающего для меня:
CSocketClient : public QWebSocket
{
Q_OBJECT
public:
CSocketClient();
protected slots:
void SL_Connected();
void SL_Disconnected();
};CSocketClient::CSocketClient() : QWebSocket("MyApplication")
{
connect(this, &QWebSocket::connected, this, &OSocketWebGenogramClient::SL_Connected);
connect(this, &QWebSocket::disconnected, this, &CSocketClient::SL_Disconnected);
open(QUrl("ws://localhost:45002"));
}
void
CSocketClient::SL_Connected()
{
qDebug() << "Connected to server on port" << localPort();
}
void
CSocketClient::SL_Disconnected()
{
}