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