Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. No reception of NewConnection signal
Forum Updated to NodeBB v4.3 + New Features

No reception of NewConnection signal

Scheduled Pinned Locked Moved General and Desktop
13 Posts 2 Posters 7.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    tony
    wrote on last edited by
    #2

    A connection to newConnection() signal is all you need, after listen.

    Can you post your code (not all, just the network part)?

    1 Reply Last reply
    0
    • C Offline
      C Offline
      cyte13
      wrote on last edited by
      #3

      Thanks for your reply, it is what I think, but doesn' work...
      Here is the threated version one:

      I have my own CGameEngine class derivated from QThread which has as a member a pointeur to another class CGameEngineServer which derivated from QTcpServer:

      GAMEENGINE:
      @
      class GAMEENGINE_EXPORT CGameEngine : public QThread
      {
      Q_OBJECT
      public:
      /** Constructeur par défaut */
      CGameEngine(QObject *parent = 0);

      /** Destructeur */
      ~CGameEngine();
      
      /** 
          StartProcess    :    Lance le serveur de jeu local et gère la partie
          engineport        :    Port d'écoute du serveur local de jeu
          placeavailable    :    Nombre maximum de joueur à la table
          RETURN            :    GAMEENGINE_CORRECT ou GAMEENGINE_ERREUR
      **/
      void StartProcess(quint16 engineport, int placeavailable);
      
      void run();
      

      private:
      //CComEngineBDD* MyComEngineBDD;
      CGameEngineServer* MyEngineServer;
      ...

      void CGameEngine::StartProcess(quint16 engineport, int placeavailable)
      {
      m_engineport = engineport;
      m_MaxPlayer = placeavailable;

      start();
      

      }

      void CGameEngine::run()
      {
      /* Create the server object /
      MyEngineServer = new CGameEngineServer();
      /
      Start listenning on port in arg /
      if (!MyEngineServer->Listen(m_engineport)) exit();
      /
      Connect signals between MyEngineServer and this to specify processes at a new incoming message */
      QObject::connect(MyEngineServer, SIGNAL(MessageToRead(QString)), this, SLOT(MessageToRead(QString)));
      exec();
      }
      @
      GAMEENGINESERVER:
      @
      class GAMENETWORK_EXPORT CGameEngineServer : public QTcpServer
      {
      Q_OBJECT

      public:
      CGameEngineServer(QObject *parent = 0);

      bool Listen(quint16 port);
      void Close();
      

      protected:
      //void incomingConnection(int socketDescriptor);

      private:
      QVector<QTcpSocket*> m_VectorClient;
      quint16 tailleMessage;

      signals:
      void MessageToRead(QString);

      public slots:
      void NewConnection();
      void ReadMessage();
      };

      bool CGameEngineServer::Listen(quint16 port)
      {
      bool result = listen(QHostAddress::LocalHost, port);
      if (result)
      {
      printf("Local Game Engine Server listenning on port %d...\n", port);
      /* make connection for a new connction */
      QObject::connect(this, SIGNAL(newConnection()), this, SLOT(NewConnection()));
      }
      else
      {
      printf("Unable for Local Game Engine Server to listen on port %d...\n", port);
      }
      return result;
      }

      @

      and now the call to StartProcess :
      @
      int main(int argc, char *argv[])
      {
      QCoreApplication a(argc, argv);
      CGameEngine MyGameEngine;
      MyGameEngine.StartProcess(8500, 2);

      return a.exec&#40;&#41;;
      

      }
      @

      1 Reply Last reply
      0
      • T Offline
        T Offline
        tony
        wrote on last edited by
        #4

        Well, I've tried your code in my PC ... and it works :)

        Just a strange thing, but it's not dependent on your code. Qt Creator does not show printf messages in "Application Output". But if you launch your program in a console, you'll see the message (I put a printf in NewConnection slot).

        1 Reply Last reply
        0
        • T Offline
          T Offline
          tony
          wrote on last edited by
          #5

          Btw ... use qDebug() function to show message in Application Output ...

          1 Reply Last reply
          0
          • C Offline
            C Offline
            cyte13
            wrote on last edited by
            #6

            all my printf worked fine but NewConnection...
            As an example, at the start of listenning : printf("Local Game Engine Server listenning on port %d...\n", port); => works fine in the console....

            1 Reply Last reply
            0
            • T Offline
              T Offline
              tony
              wrote on last edited by
              #7

              Well, your server starts fine (as netstat shows...)

              I just make a "telnet 127.0.0.1 8500" and a NEW CONNECTION!!! (my message) appears.

              Firewall? Do you connect to 127.0.0.1 and port 8500? I cannot see any other problem ...

              1 Reply Last reply
              0
              • C Offline
                C Offline
                cyte13
                wrote on last edited by
                #8

                I desactived the firewall but nothing changed.
                What is strang is that the client correctly onnects to the server and intercepts the connected() signal.
                Moreover, I need to put the WaitForNewConnection() to be able to intercept newConnection() signal....

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  cyte13
                  wrote on last edited by
                  #9

                  telnet succeced in connecting to the server but still nothing in new connection!!!!

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    tony
                    wrote on last edited by
                    #10

                    well, the only thing left is that I can post my code and you'll check for any diff ...

                    @
                    #ifndef GAMESERVER_H
                    #define GAMESERVER_H

                    #include <QtCore>
                    #include <QtNetwork>

                    class CGameEngineServer;

                    class CGameEngine : public QThread
                    {
                    Q_OBJECT

                    quint16 m_engineport;
                    

                    public:
                    /** Constructeur par défaut */
                    CGameEngine(QObject *parent = 0) : QThread(parent), MyEngineServer(0) { }

                    /** Destructeur */
                    ~CGameEngine() { }
                    
                    /**
                        StartProcess    :    Lance le serveur de jeu local et gère la partie
                        engineport        :    Port d'écoute du serveur local de jeu
                        placeavailable    :    Nombre maximum de joueur à la table
                        RETURN            :    GAMEENGINE_CORRECT ou GAMEENGINE_ERREUR
                    **/
                    void StartProcess(quint16 engineport, int placeavailable);
                    
                    void run();
                    

                    private:
                    CGameEngineServer* MyEngineServer;
                    };

                    class CGameEngineServer : public QTcpServer
                    {
                    Q_OBJECT

                    public:
                    CGameEngineServer(QObject *parent = 0) : QTcpServer(parent) { }

                    bool Listen(quint16 port);
                    void Close();
                    

                    protected:
                    //void incomingConnection(int socketDescriptor);

                    private:
                    QVector<QTcpSocket*> m_VectorClient;
                    quint16 tailleMessage;

                    signals:
                    void MessageToRead(QString);

                    public slots:
                    void NewConnection() { printf("NEW CONNECTION!!!\n"); }
                    void ReadMessage() { }
                    };

                    #endif // GAMESERVER_H
                    @

                    @
                    #include "gameserver.h"

                    void CGameEngine::StartProcess(quint16 engineport, int placeavailable)
                    {
                    m_engineport = engineport;
                    // m_MaxPlayer = placeavailable;

                    start();
                    

                    }

                    void CGameEngine::run()
                    {
                    /* Create the server object /
                    MyEngineServer = new CGameEngineServer();
                    /
                    Start listenning on port in arg /
                    if (!MyEngineServer->Listen(m_engineport)) exit();
                    /
                    Connect signals between MyEngineServer and this to specify processes at a new incoming message */
                    QObject::connect(MyEngineServer, SIGNAL(MessageToRead(QString)), this, SLOT(MessageToRead(QString)));
                    exec();
                    }

                    bool CGameEngineServer::Listen(quint16 port)
                    {
                    bool result = listen(QHostAddress::LocalHost, port);
                    if (result)
                    {
                    printf("Local Game Engine Server listenning on port %d...\n", port);
                    /* make connection for a new connction */
                    QObject::connect(this, SIGNAL(newConnection()), this, SLOT(NewConnection()));
                    }
                    else
                    {
                    printf("Unable for Local Game Engine Server to listen on port %d...\n", port);
                    }
                    return result;
                    }
                    @

                    @
                    #include <QtCore/QCoreApplication>

                    #include "gameserver.h"

                    int main(int argc, char *argv[])
                    {
                    QCoreApplication a(argc, argv);
                    CGameEngine MyGameEngine;
                    MyGameEngine.StartProcess(8500, 2);

                    return a.exec&#40;&#41;;
                    

                    }
                    @

                    I hope that this will help you solve your problem ...

                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      cyte13
                      wrote on last edited by
                      #11

                      not better.....
                      The only difference between your code and mine is that the CGameEngine and CGameEngineServer are available via a library (ifdef GAMENETWORK_LIB

                      define GAMENETWORK_EXPORT Q_DECL_EXPORT

                      #else

                      define GAMENETWORK_EXPORT Q_DECL_IMPORT

                      #endif)

                      ==> May cause the issue?

                      1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        tony
                        wrote on last edited by
                        #12

                        I don't think so ... well, you can try :)

                        1 Reply Last reply
                        0
                        • C Offline
                          C Offline
                          cyte13
                          wrote on last edited by
                          #13

                          I progress...
                          When removing all classes access by library and directly insert .h and .cpp files into my app folder, it workd fine!!!!

                          Thanks a lot.

                          But... I would like to understand why it does not work when using StartProcess from the CGameEngine got from a library...!!!!

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved