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. Sending Data from Client to Server
Forum Updated to NodeBB v4.3 + New Features

Sending Data from Client to Server

Scheduled Pinned Locked Moved Solved General and Desktop
22 Posts 7 Posters 2.6k Views
  • 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.
  • S star673

    @Christian-Ehrlicher

    My server.cpp file is,

    #include "server.h"
    
    Server::Server(QObject *parent) : QObject(parent)
    {
        tcpServer = new QTcpServer();
         connect(tcpServer,&QTcpServer::newConnection,this,&Server::newConnection);
         initServer();
    }
    
    void Server::incomingConnection(int socketfd){
       // clientConnection=new QTcpSocket(this);
        clientConnection = tcpServer->nextPendingConnection();
         connect(clientConnection, &QAbstractSocket::disconnected,
                 clientConnection, &QObject::deleteLater);
    
    //    client->setSocketDescriptor(socketfd);
    //    clients.insert(client);
    
        qDebug() << "New client from: " << clientConnection->peerAddress().toString();
    
        connect(clientConnection,SIGNAL(readyRead()),this,SLOT(readyRead()));
        connect(clientConnection,SIGNAL(disconnected()),this,SLOT(disconnected()));
    }
    
    void Server::newConnection(){
        qDebug() << "-------NEW CONNECTION SLOT--------";
    
    //    QByteArray block;
    //    QDataStream out(&block, QIODevice::ReadWrite);
    //    out.setVersion(QDataStream::Qt_5_9);
    
    //    out << "ABCderfHt";
    
    
         clientConnection->write("ABCDE");
         //clientConnection->disconnectFromHost();
    }
    
    
    void Server::readyRead(){
       qDebug() << "|||||||||||READYREAD SLOT--------";
    
    
    
        qDebug() << clientConnection->readAll();
    }
    
    void Server::disconnected(){
        qDebug() << "//////////DISCONNECTED CONNECTION SLOT--------";
    }
    
    void Server::initServer(){
    
        if (!tcpServer->listen(QHostAddress::Any,45442)) {
            qDebug() << tcpServer->errorString();
    
        }
    
        else{
            qDebug() << "Listening";
        }
    }
    
    

    My server.h file is,

    #ifndef SERVER_H
    #define SERVER_H
    
    
    #include <QObject>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <QDebug>
    #include <QDataStream>
    #include <QByteArray>
    #include <QNetworkInterface>
    #include <QAbstractSocket>
    
    
    
    
    
    class Server : public QObject
    {
    
        Q_OBJECT
    
    public:
        explicit Server(QObject *parent = nullptr);
        QTcpServer *tcpServer = nullptr;
        void initServer();
        QTcpSocket *clientConnection;
       // QDataStream out;
    
    
    
    
    
    protected:
        void incomingConnection(int socketfd);
    
    public slots:
        void newConnection();
        void readyRead();
        void disconnected();
    private:
        QSet<QTcpSocket*> clients;
    };
    
    #endif // SERVER_H
    
    

    The main.cpp on the server side,

    #include <QCoreApplication>
    #include "server.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        Server server;
    
        return a.exec();
    }
    
    

    My client.cpp is,

    #include "client.h"
    
    Client::Client()
    {
        tcpSocket = new QTcpSocket();
        tcpSocket->connectToHost(QHostAddress::LocalHost,45442);
        //connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
       // connect(tcpSocket,QOverload<QAbstractSocket::SocketError>::of(error),this,&Client::displayError);
        connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
            [=](QAbstractSocket::SocketError socketError){
    
            switch(socketError){
            case QAbstractSocket::RemoteHostClosedError:
                break;
    
            case QAbstractSocket::HostNotFoundError:
                qDebug() << "HostNotFoundError. Connection was refused. Server is not working";
                break;
    
    
            case QAbstractSocket::ConnectionRefusedError:
                qDebug() << "ConnectionRefusedError. Client. The host was not found";
                break;
    
            default:
                qDebug() << "ErrorString : " << tcpSocket->errorString();
          }
    
    
        });
    
    
        connect(tcpSocket, &QTcpSocket::connected, this, &Client::sendMessageToServer);
        connect(tcpSocket,&QTcpSocket::readyRead, this, &Client::readyRead);
    
    }
    
    void Client::displayError(QAbstractSocket::SocketError socketError){
    
        switch(socketError){
        case QAbstractSocket::RemoteHostClosedError:
            break;
    
        case QAbstractSocket::HostNotFoundError:
            qDebug() << "HostNotFoundError. Connection was refused. Server is not working";
            break;
    
    
        case QAbstractSocket::ConnectionRefusedError:
            qDebug() << "ConnectionRefusedError. Client. The host was not found";
            break;
    
        default:
            qDebug() << "ErrorString : " << tcpSocket->errorString();
      }
    
    }
    
    void Client::sendMessageToServer(){
        qDebug() << "INSIDe sendMessageToServer";
        //tcpSocket->waitForReadyRead();
        qDebug() << tcpSocket->canReadLine() << tcpSocket->readAll();
        tcpSocket->write("MessageFromClient");
        //tcpSocket->flush();
    
    }
    
    void Client::readyRead(){
        qDebug() << "///READYREAD SLOT///";
    
    //    in.startTransaction();
    
    //    QString nextFortune;
    //    in >> nextFortune;
    
    //    if (!in.commitTransaction())
    //        return;
        qDebug() << tcpSocket->readAll();
    
    
    }
    
    
    

    My client.h is,

    #ifndef CLIENT_H
    #define CLIENT_H
    
    #include <QObject>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <QDebug>
    #include <QDataStream>
    #include <QByteArray>
    #include <QNetworkInterface>
    #include <QAbstractSocket>
    
    class Client  : public QTcpSocket
    {
    public:
        Client();
        QTcpSocket *tcpSocket = nullptr;
         QDataStream in;
    
    public slots:
        void displayError(QAbstractSocket::SocketError socketError);
        void sendMessageToServer();
        void readyRead();
    };
    
    #endif // CLIENT_H
    
    

    The main.cpp on the client side is,

    #include <QCoreApplication>
    #include "client.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Client client;
    
        return a.exec();
    }
    
    
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #21

    @star673 said in Sending Data from Client to Server:

    void Server::incomingConnection(int socketfd){

    If you check the documentation you will see that incomingConnection is a protected virtual method in QTcpServer. If you want to use it you have to subclass QTcpServer and override it. But if you use QTcpServer::newConnection signal there is no need for incomingConnection - simply move the code from your incomingConnection to newConnection.

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    S 1 Reply Last reply
    1
    • jsulmJ jsulm

      @star673 said in Sending Data from Client to Server:

      void Server::incomingConnection(int socketfd){

      If you check the documentation you will see that incomingConnection is a protected virtual method in QTcpServer. If you want to use it you have to subclass QTcpServer and override it. But if you use QTcpServer::newConnection signal there is no need for incomingConnection - simply move the code from your incomingConnection to newConnection.

      S Offline
      S Offline
      star673
      wrote on last edited by
      #22

      @jsulm

      Thank you for helping, it worked like below.

      #include "server.h"
      
      Server::Server(QObject *parent) : QObject(parent)
      {
      
          tcpServer = new QTcpServer();
           connect(tcpServer,&QTcpServer::newConnection,this,&Server::newConnection);
           initServer();
      
          timer = new QTimer(this);
      }
      
      
      
      
      void Server::newConnection(){
          qDebug() << "-------NEW CONNECTION SLOT--------";
      
         
           clientConnection = tcpServer->nextPendingConnection();
            connect(clientConnection, &QAbstractSocket::disconnected,
                    clientConnection, &QObject::deleteLater);
      
      
           qDebug() << "New client from: " << clientConnection->peerAddress().toString();
      
      
           connect(clientConnection,&QAbstractSocket::readyRead,this,&Server::readyRead);
           connect(clientConnection,&QAbstractSocket::disconnected,this,&Server::disconnected);
      
      
      
           clientConnection->write("ABCDEFFGHJKL");
           
           connect(timer,&QTimer::timeout,this,&Server::TimerSlot);
           timer->start(1000);
      }
      
      
      void Server::readyRead(){
         qDebug() << "|||||||||||READYREAD SLOT--------";
         qDebug() << "||||||||" << clientConnection->readAll();
      
      }
      
      
      
      void Server::disconnected(){
          qDebug() << "//////////DISCONNECTED CONNECTION SLOT--------";
      }
      
      void Server::initServer(){
      
          if (!tcpServer->listen(QHostAddress::Any,45442)) {
              qDebug() << tcpServer->errorString();
      
          }
      
          else{
              qDebug() << "Listening";
      
      
          }
      }
      
      
      void Server::TimerSlot(){
      
          clientConnection->write("ABCDEFFGHJKL");
      
      }
      
      

      The client side is,

      #include "client.h"
      
      Client::Client()
      {
          tcpSocket = new QTcpSocket();
          tcpSocket->connectToHost(QHostAddress::LocalHost,45442);
      
          connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
              [=](QAbstractSocket::SocketError socketError){
      
              switch(socketError){
              case QAbstractSocket::RemoteHostClosedError:
                  break;
      
              case QAbstractSocket::HostNotFoundError:
                  qDebug() << "HostNotFoundError. Connection was refused. Server is not working";
                  break;
      
      
              case QAbstractSocket::ConnectionRefusedError:
                  qDebug() << "ConnectionRefusedError. Client. The host was not found";
                  break;
      
              default:
                  qDebug() << "ErrorString : " << tcpSocket->errorString();
            }
      
      
          });
      
      
          connect(tcpSocket, &QTcpSocket::connected, this, &Client::sendMessageToServer);
          connect(tcpSocket,&QTcpSocket::readyRead, this, &Client::readyRead);
      
      
          timer = new QTimer(this);
      
      }
      
      void Client::displayError(QAbstractSocket::SocketError socketError){
      
          switch(socketError){
          case QAbstractSocket::RemoteHostClosedError:
              break;
      
          case QAbstractSocket::HostNotFoundError:
              qDebug() << "HostNotFoundError. Connection was refused. Server is not working";
              break;
      
      
          case QAbstractSocket::ConnectionRefusedError:
              qDebug() << "ConnectionRefusedError. Client. The host was not found";
              break;
      
          default:
              qDebug() << "ErrorString : " << tcpSocket->errorString();
        }
      
      }
      
      void Client::sendMessageToServer(){
          qDebug() << "INSIDe sendMessageToServer";
          qDebug() << tcpSocket->canReadLine() << tcpSocket->readAll();
          tcpSocket->write("MessageFromClient");
         
          connect(timer,&QTimer::timeout,this,&Client::TimerSlotClient);
          timer->start(1000);
      }
      
      void Client::readyRead(){
          qDebug() << "///READYREAD SLOT///";
          qDebug() << tcpSocket->readAll();
      }
      
      void Client::TimerSlotClient(){
             tcpSocket->write("MessageFromClient");
      }
      
      
      
      1 Reply Last reply
      1

      • Login

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