[Interest] Problems with QWebSocketServer
Adrian Jäkel
aj at elane2k.com
Wed Jun 22 17:28:12 CEST 2016
Oh,
wow what a stupid mistake. Thanks for the hint, it seems i need more
sleep :)
Adrian
Am 22.06.2016 um 16:42 schrieb André Hartmann:
> Hi,
>
> > void MainWindow::buttonClicked()
> > {
> > // uncomment this for not working websocketserver in mainwindow
> > // QWebSocketServer server(QStringLiteral("QWebSocketServer"),
> > QWebSocketServer::NonSecureMode);
> > // if (!server.listen(QHostAddress::LocalHost, 12345)) {
> > // qFatal("Failed to open web socket server.");
> > // }
> > }
>
>
> Your'e creating the server in the stackframe of
> MainWindow::buttonClicked(). As soon as the function is leaved, the
> stackframe is cleared and the destructor of QWebSocketServer is called.
>
> Solution: add a member variable QWebSocketServer *m_server and
> allocate memory for it in the buttonClicked():
>
> m_server = new QWebSocketServer(QStringLiteral("QWebSocketServer"),
> > QWebSocketServer::NonSecureMode);
>
> Best regards,
> André
>
> PS: I know this problem because I had it same way with QTcpServer :)
>
> Am 22.06.2016 um 16:28 schrieb Adrian Jäkel:
>> Hi,
>>
>> i'm having problems starting a QWebSocketServer from within a
>> QMainWindow. Perhaps i'm missing something obvious?
>>
>> When starting it from the main.cpp it works correctly and i can connect
>> to it from my sample html page. But inside a QMainWindow e.g. after
>> clicking a button my html page refuses to connect with "Error in
>> connection establishment: net::ERR_CONNECTION_REFUSED"
>>
>> Below is a small sample app. Just un/comment accordingly when testing
>> both cases.
>>
>> Regards,
>> A. Jäkel
>>
>> main.cpp
>>
>> #include <QApplication>
>> #include <QMainWindow>
>> #include <QWebSocketServer>
>>
>> #include "mainwindow.h"
>>
>> int main(int argc, char** argv)
>> {
>> QApplication app(argc, argv);
>>
>> // comment the following lines when trying websocketserver from
>> mainwindow
>> QWebSocketServer server(QStringLiteral("QWebSocketServer"),
>> QWebSocketServer::NonSecureMode);
>> if (!server.listen(QHostAddress::LocalHost, 12345)) {
>> qFatal("Failed to open web socket server.");
>> }
>>
>> MainWindow w;
>> w.show();
>>
>> return app.exec();
>> }
>>
>> mainwindow.cpp
>>
>> #include "mainwindow.h"
>>
>> #include <QWebSocketServer>
>> #include <QPushButton>
>>
>> MainWindow::MainWindow(QWidget *parent) :
>> QMainWindow(parent)
>> {
>> // uncomment this for not working websocketserver in mainwindow
>> // QPushButton *button = new QPushButton("start server");
>> // setCentralWidget(button);
>> // connect(button, &QPushButton::clicked, this,
>> &MainWindow::buttonClicked);
>> }
>>
>> void MainWindow::buttonClicked()
>> {
>> // uncomment this for not working websocketserver in mainwindow
>> // QWebSocketServer server(QStringLiteral("QWebSocketServer"),
>> QWebSocketServer::NonSecureMode);
>> // if (!server.listen(QHostAddress::LocalHost, 12345)) {
>> // qFatal("Failed to open web socket server.");
>> // }
>> }
>>
>> mainwindow.h
>>
>> #ifndef MAINWINDOW_H
>> #define MAINWINDOW_H
>>
>> #include <QMainWindow>
>>
>> class MainWindow : public QMainWindow
>> {
>> Q_OBJECT
>>
>> public:
>> explicit MainWindow(QWidget *parent = 0);
>> ~MainWindow() {}
>>
>> void buttonClicked();
>> };
>>
>> #endif // MAINWINDOW_H
>>
>>
>> index.html
>>
>> <html>
>> <head>
>> <script type="text/javascript">
>> window.onload = function() {
>> var baseUrl = "ws://localhost:12345";
>>
>> console.info("Connecting to WebSocket server at " +
>> baseUrl + ".");
>> var socket = new WebSocket(baseUrl);
>>
>> socket.onclose = function()
>> {
>> console.error("web channel closed");
>> };
>> socket.onerror = function(error)
>> {
>> console.error("web channel error: " + error);
>> };
>> socket.onmessage = function(e)
>> {
>> console.info("message: " + e.data);
>> };
>> socket.onopen = function()
>> {
>> console.warn("WebSocket connected.");
>> }
>> }
>> </script>
>> </head>
>> <body>
>> </body>
>> </html>
>>
>> .pro file
>> QT += gui widgets websockets
>>
>> SOURCES += \
>> main.cpp \
>> mainwindow.cpp
>>
>> HEADERS += \
>> mainwindow.h
>>
>> DISTFILES += \
>> index.html
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>
More information about the Interest
mailing list