Udp服务器使用Qt,服务器状态报告

Udp服务器使用Qt,服务器状态报告,qt,udp,Qt,Udp,我试图在两个应用程序之间进行简单的Udp通信。 客户端向服务器发送请求,以启动一些处理计算等。服务器响应是此计算的结果。服务器应报告其状态 我的代码: onServerRecv方法: void MainWindow::onServerRecv() { while(m_udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(m_udpSocket-&g

我试图在两个应用程序之间进行简单的Udp通信。 客户端向服务器发送请求,以启动一些处理计算等。服务器响应是此计算的结果。服务器应报告其状态

我的代码:

onServerRecv方法:

void MainWindow::onServerRecv()
{
     while(m_udpSocket->hasPendingDatagrams())
     {
        QByteArray datagram;
        datagram.resize(m_udpSocket->pendingDatagramSize());
        m_udpSocket->readDatagram(datagram.data(),datagram.size(),&m_sender,
                                  &m_senderPort);
        QDateTime dt = QDateTime::currentDateTime();
        QString sDtString = dt.toString("yyyy-MM-dd HH:mm:ss");
        QString sLog = sDtString + ":" + QString::fromUtf8(datagram) + "\n";
        m_textEdit->append(sLog);
        //process datagram
        instructionCall(datagram,m_sender,m_senderPort);
     }
}
说明呼叫:

void MainWindow::instructionCall(QByteArray instruction, QHostAddress addr,
                             qint16 senderPort)
{
    if(instruction == "start")
    {
        QByteArray started = "started";
        m_udpSocket->writeDatagram(started,m_sender,m_senderPort);
        m_status = "bussy";

        connect(&m_timer1,SIGNAL(timeout()),this,SLOT(sendStatus()));
        m_timer1.start(500);


        for(int i = 0; i != std::numeric_limits<int>::max(); i++)
        {

        }
        m_status = "finished data ready";
        disconnect(&m_timer1,SIGNAL(timeout()),this,SLOT(sendStatus()));
        QByteArray finished = "finished";
        m_udpSocket->writeDatagram(finished,m_sender,m_senderPort);
    } 
}

我希望我想做的事情很清楚。对解决方案有什么建议吗?没有线程可以完成吗?

哪些代码不工作?它似乎做了您想做的事情,而且由于您正在异步使用套接字(通过使用信号/插槽),它应该已经可以在没有线程的情况下工作了?如果是,为什么?为什么不?我曾尝试使用boost::asio对应用程序执行服务器组件,但在将其与Qt集成时遇到了一些问题,同时也得到了一些信息,即很难使用Qt和asio(线程问题)。这段代码在进行计算时应该发送状态,这意味着(i=0;i!=std::numeric_limits…)的循环发生。@krzych没有理由我的意思是你也可以通过月球去隔壁的房子,但是如果你真的不想直接使用套接字调用,为什么不在套接字调用上编写简单的类包装呢?您没有做任何需要在服务器端使用QT的远程特殊操作。很抱歉,我根本不明白。你能精确地给出你的解决方案建议吗?
void MainWindow::sendStatus()
{
    m_udpSocket->writeDatagram(m_status,m_sender,m_senderPort);
}