#include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); mpSocket = new QUdpSocket(this); mpSocketListen = new QUdpSocket(this); mpSocketListen->bind(QHostAddress::Any,60019);// connect(mpSocketListen,SIGNAL(readyRead()),this,SLOT(onRecvData())); #ifdef ANDROID ui->pushButton_Start->setGeometry(100,100,600,100); ui->pushButton_Stop->setGeometry(100,300,600,100); ui->pushButton_Query->setGeometry(100,500,600,100); ui->plainTextEdit->setGeometry(100,800,600,600); #endif } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_Start_clicked() { ui->plainTextEdit->setPlainText(""); int nCode = 1; char strout[100]; memcpy(strout,&nCode,sizeof(int)); mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009); } void MainWindow::on_pushButton_Stop_clicked() { ui->plainTextEdit->setPlainText(""); int nCode = 0; char strout[100]; memcpy(strout,&nCode,sizeof(int)); mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009); } void MainWindow::on_pushButton_Query_clicked() { ui->plainTextEdit->setPlainText(""); int nCode = 2; char strout[100]; memcpy(strout,&nCode,sizeof(int)); mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009); } void MainWindow::onRecvData() { while(mpSocketListen->hasPendingDatagrams()) { QByteArray ba; ba.resize(static_cast(mpSocketListen->bytesAvailable()) ); mpSocketListen->readDatagram(ba.data(),ba.size()); if(ba.size()>=2*static_cast(sizeof(int))) { char * pdata = ba.data(); int nsize = static_cast(ba.size()); int nservicecode,nservicestatus; memcpy(&nservicecode,pdata,sizeof(int)); memcpy(&nservicestatus,pdata+sizeof(int),sizeof(int)); unsigned long nerrorlen = static_cast(nsize-2*static_cast(sizeof(int))); std::shared_ptr pstrerr_ptr = std::shared_ptr(new char[nerrorlen +1]); if(nsize>2*static_cast(sizeof(int))) { memcpy(pstrerr_ptr.get(),pdata+2*sizeof(int),nerrorlen); pstrerr_ptr.get()[nerrorlen] = 0; } switch (nservicestatus) { case 0: if(nservicecode == 0) { ui->plainTextEdit->setPlainText("Init Status."); } else { ui->plainTextEdit->setPlainText(pstrerr_ptr.get()); } break; case 1: ui->plainTextEdit->setPlainText("Starting Service."); break; case 2: { char strout[1000]; snprintf(strout,1000,"Service Code: %d",nservicecode); ui->plainTextEdit->setPlainText(strout); } break; default: break; } } } }