#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
width_widget = 570;
height_widget = 585;
width_text = 370;
height_text = 200;
ui->pushButton_send->setDisabled(true);
mSocket = new QUdpSocket();
timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(send_data()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_send_clicked()
{
QByteArray buffer;
if(ui->pushButton_send->text() == "发送数据"){
buffer = ui->textEdit_send_data->toPlainText().toLatin1();
if(buffer.isEmpty() == true){
msgBox.setText("send data null!");
msgBox.exec();
}
if(ui->checkBox_send_16->isChecked() == true){
buffer_send =QByteArray::fromHex(buffer);
}
else{
buffer_send= buffer;
}
if(ui->checkBox_autosend->isChecked() == true){
ui->pushButton_send->setText("停止发送");
ui->checkBox_autosend->setDisabled(true);
ui->checkBox_send_16->setDisabled(true);
ui->lineEdit_time->setDisabled(true);
int time = ui->lineEdit_time->text().toInt();
timer->start(time);
}
else{
mSocket->writeDatagram(buffer_send,QHostAddress(target_IP),target_port);
}
}
else if(ui->pushButton_send->text() == "停止发送"){
ui->pushButton_send->setText("发送数据");
ui->checkBox_autosend->setDisabled(false);
ui->checkBox_send_16->setDisabled(false);
ui->lineEdit_time->setDisabled(false);
timer->stop();
}
}
void MainWindow::on_pushButton_create_clicked()
{
if(ui->pushButton_create->text() == "创建"){
ui->pushButton_create->setText("关闭");
ui->pushButton_send->setDisabled(false);
ui->lineEdit_target_IP->setDisabled(true);
ui->lineEdit_target_port->setDisabled(true);
ui->lineEdit_assign_port->setDisabled(true);
if(ui->lineEdit_target_IP->text().isEmpty() == true){
msgBox.setText("please enter IP address!");
msgBox.exec();
}
else if(ui->lineEdit_target_port->text().isEmpty() == true){
msgBox.setText("please enter target port !");
msgBox.exec();
}
else if(ui->lineEdit_assign_port->text().isEmpty() == true){
msgBox.setText("please enter target port !");
msgBox.exec();
}
target_IP = ui->lineEdit_target_IP->text();
target_port = ui->lineEdit_target_port->text().toInt();
assign_port = ui->lineEdit_assign_port->text().toInt();
mSocket->bind(QHostAddress::AnyIPv4,assign_port);
bool result = mSocket->joinMulticastGroup(QHostAddress(target_IP));
if(result){
mSocket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,1024*1024*8);
connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_data()));
}
}
else if(ui->pushButton_create->text() == "关闭"){
ui->pushButton_create->setText("创建");
ui->lineEdit_target_IP->setDisabled(false);
ui->lineEdit_target_port->setDisabled(false);
ui->lineEdit_assign_port->setDisabled(false);
if(ui->pushButton_send->text() == "停止发送"){
timer->stop();
}
mSocket->leaveMulticastGroup(QHostAddress(target_IP));
mSocket->close();
}
}
void MainWindow::read_data()
{
QHostAddress address;
quint16 port;
buffer_rece.resize(mSocket->bytesAvailable());
mSocket->readDatagram(buffer_rece.data(),buffer_rece.size(),&address,&port);
if(ui->checkBox_rece_16->isChecked() == true){
buffer_rece = buffer_rece.toHex();
}
QString tmp_data = QString(buffer_rece).remove(QRegExp("\\s"));
buffer_rece = tmp_data.toLatin1();
int n = buffer_rece.size();
while(n>0){
n = n-2;
buffer_rece.insert(n,QByteArray(" "));
}
ui->textEdit_rece_data->moveCursor(QTextCursor::End);
ui->textEdit_rece_data->textCursor().insertText(QString(buffer_rece));
}
void MainWindow::send_data()
{
mSocket->writeDatagram(buffer_send,QHostAddress(target_IP),target_port);
}
void MainWindow::on_pushButton_send_clear_clicked()
{
ui->textEdit_send_data->clear();
}
void MainWindow::on_pushButton_rece_clear_clicked()
{
ui->textEdit_rece_data->clear();
}
void MainWindow::on_pushButton_pause_clicked()
{
if(ui->pushButton_pause->text() == "暂停显示"){
ui->pushButton_pause->setText("继续显示");
mSocket->leaveMulticastGroup(QHostAddress(target_IP));
mSocket->close();
}
else if(ui->pushButton_pause->text() == "继续显示"){
ui->pushButton_pause->setText("暂停显示");
mSocket->bind(QHostAddress::AnyIPv4,assign_port);
bool result = mSocket->joinMulticastGroup(QHostAddress(target_IP));
if(result){
mSocket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,1024*1024*8);
connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_data()));
}
}
}
void MainWindow::resizeEvent(QResizeEvent *event){
QMainWindow::resizeEvent(event);
int width = ui->centralWidget->width();
int height = ui->centralWidget->height();
ui->textEdit_send_data->resize(QSize(width_text*width/width_widget,height_text*height/height_widget));
ui->textEdit_rece_data->resize(QSize(width_text*width/width_widget,height_text*height/height_widget));
}
评论2