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@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to