#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QTime"
#include "QObject"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//获取本机IP地址
QList<QHostAddress> addressList = QNetworkInterface::allAddresses();
hostAddress = addressList.at(0);
//网络端口绑定
udpSendSocket.bind(hostAddress,3407);
udpRecvSocket.bind(hostAddress,3408);
//设定定时器
this -> startTimer(1000);
//初始化发送计数器
sendBuffer.data.index = 0;
//建立接收socket的连接
QObject::connect(&udpRecvSocket,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams()));
}
/*实现发送和接收操作,并在列表中显示,发送操作是在定时器事件响应函数中实现的,
* 数据接收是在readPendingDatagrams()函数中实现的*/
void MainWindow::timerEvent(QTimerEvent *event)
{
QTime tm = QTime::currentTime();
sendBuffer.data.hour = tm.hour();
sendBuffer.data.minute = tm.minute();
sendBuffer.data.second = tm.second();
sendBuffer.data.msec = tm.msec();
udpSendSocket.writeDatagram(sendBuffer.dataBuffer,sizeof(sendBuffer),hostAddress,3408);
QString displayString;
displayString = QString("Index = %1 \n Time = %2:%3:%4:%5 \n")
.arg(sendBuffer.data.index)
.arg(sendBuffer.data.hour,2,10,QChar('0'))
.arg(sendBuffer.data.minute,2,10,QChar('0'))
.arg(sendBuffer.data.second,2,10,QChar('0'))
.arg(sendBuffer.data.msec,3,10,QChar('0'));
ui->listWidget->insertItem(0,displayString);
sendBuffer.data.index++;
}
//在readPendingDatagrams曹中,接收数据并显示
void MainWindow::readPendingDatagrams()
{
QHostAddress sender;
quint16 senderPort;
udpRecvSocket.readDatagram(recvBuffer.dataBuffer,sizeof(recvBuffer),&sender,&senderPort);
QString displayString;
displayString = QString("Index = %1 \n Time = %2:%3:%4:%5 \n")
.arg(recvBuffer.data.index)
.arg(recvBuffer.data.hour,2,10,QChar('0'))
.arg(recvBuffer.data.minute,2,10,QChar('0'))
.arg(recvBuffer.data.second,2,10,QChar('0'))
.arg(recvBuffer.data.msec,3,10,QChar('0'));
ui->listWidget_2->insertItem(0,displayString);
}
MainWindow::~MainWindow()
{
delete ui;
}