Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Using UDP multi client with single server how to do?



  • if client 1 : sends "Test1" to server and reply back to client "Reply1".

    if client 2 : sends "Test2" to server and reply back to client "Reply2".

    if any one know please help me. i have done using TCP but not with UDP.



  • QTcpSocket and QUdpSocket are both QIODevices so you can read/write them in the exact same way



  • @bhargav
    Can you even do this with UDP?? "Send replies back"? It makes no sense. For one thing, the client may (well) not even receive the datagram...



  • #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        setWindowTitle("Server App");
    
        serudpSocket = new QUdpSocket();
    
        serudpSocket->bind(QHostAddress::Any, 6000);
    
        connect(serudpSocket, SIGNAL(readyRead()), this, SLOT(readingmsg()));
    
        connect(serudpSocket, SIGNAL(disconnected()), this, SLOT(deleteLater()));
    
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::readingmsg()
    {
    
            // reading from client
            QByteArray buffer;
    
            buffer.resize(serudpSocket->pendingDatagramSize());
    
            QHostAddress sender;
            quint16 port;
    
            qDebug()<<"port in reading:"<<port;
    
            serudpSocket->readDatagram(buffer.data(),buffer.size(),&sender,&port);
    
            ui->textEdit->setText(buffer);
    
    
            // Writing to the client,need to specify the client port number.
    
      //      static int i;
            QByteArray clientData;
    
            QString str = "reply";
    
    //        QString index = QString::number(i);
    
            clientData.append(str);
    
            serudpSocket->writeDatagram(clientData, QHostAddress::LocalHost, port );
    
            // for debugging
            qDebug()<<"Datagram Recieved From client: "<< buffer.data();
            qDebug()<<"Client IP" << sender.toString();
            qDebug()<<"port in sending:"<< port;
            qDebug()<<"Datagram sending to client:"<< clientData.data();
            qDebug()<<"\n";
    
          //  i++;
    }
    

    this is my code help me to get desired output?

    multi client single server
    when client1 sends "test1" it has to send back "reply1"
    when client1 sends "test2" it has to send back "reply2" like that ?



  • @bhargav said in Using UDP multi client with single server how to do?:

    serudpSocket->writeDatagram(clientData, QHostAddress::LocalHost, port );

    you are sending to QHostAddress::LocalHost instead of sender



  • Here i am testing in single computer. so i thought local host means 127.0.0.1?


Log in to reply