上周末没事写了一个UDP的例子 大家感兴趣的可以参考一下

来源:互联网 发布:sql语句优化方法 编辑:程序博客网 时间:2024/05/16 10:23

一直以来大家都是用TCP/IP通信的  或者是用端口进行通信的,上周末没事写了一个UDP 相当于局域网广播通信。

废话少说直接贴代码 ,可以传输英文  中文今天调通了

发送之前做中文处理,接收之后也需要做一下正文处理(utf8)

环境:qt5.3.2  win8  64位


一、UDPclient(头文件和源文件)

头文件:

#ifndef MAINDIALOG_H
#define MAINDIALOG_H
#include <QDialog>
#include <QtNetwork/QUdpSocket>
#include <QTextCodec>

namespace Ui {
class MainDialog;
}

class MainDialog : public QDialog
{
    Q_OBJECT
public:
    explicit MainDialog(QWidget *parent = 0);
    ~MainDialog();
private slots:
    void on_startPushButton_clicked();
private:
    Ui::MainDialog *ui;
    QUdpSocket* udpSocket;

};

#endif // MAINDIALOG_H

源文件:

#include "maindialog.h"
#include "ui_maindialog.h"
#include <QString>
#include <QTextCodec>
#include <QDebug>

MainDialog::MainDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MainDialog)
{
    ui->setupUi(this);
    this->setWindowTitle(tr("局域网广播"));
    udpSocket = new QUdpSocket(this);
}

MainDialog::~MainDialog()
{
    delete ui;
}

void MainDialog::on_startPushButton_clicked()
{
    QString sendDats = ui->senderDatasTextEdit->toPlainText();
    QString port = ui->connectPortLineEdit->text();

   QByteArray sendByte = sendDats.toUtf8();
    qDebug()<<sendDats;

    udpSocket->writeDatagram(sendByte,QHostAddress::LocalHost,port.toInt());
}

二、UDPService

头文件:

#ifndef SERIVEDIALOG_H
#define SERIVEDIALOG_H

#include <QDialog>
#include <QtNetwork/QUdpSocket>
#include <QDebug>
#include <QTextCodec>
namespace Ui {
class SeriveDialog;
}

class SeriveDialog : public QDialog
{
    Q_OBJECT
public:
    explicit SeriveDialog(QWidget *parent = 0);
    ~SeriveDialog();
public slots:
    void dealWithTheDate();
private slots:
    void on_startRecvPushButton_clicked();
private:
    Ui::SeriveDialog *ui;
    QUdpSocket* udpsocket;
    QString port;
};
#endif // SERIVEDIALOG_H

源文件:

#include "serivedialog.h"
#include "ui_serivedialog.h"

SeriveDialog::SeriveDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SeriveDialog)
{
    ui->setupUi(this);
    udpsocket = new QUdpSocket(this);
    this->setWindowTitle(tr("局域网广播"));
}

SeriveDialog::~SeriveDialog()
{
    delete ui;
}
void SeriveDialog::dealWithTheDate()
{
    QByteArray recvDatas;
    if(udpsocket->hasPendingDatagrams())
    {
        recvDatas.resize(udpsocket->pendingDatagramSize());
        udpsocket->readDatagram(recvDatas.data(),recvDatas.size());
    }
    qDebug()<<recvDatas;

//    ui->textBrowser->append(recvDatas);
     QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    //QTextCodec* codec = QTextCodec::codecForName("GB18030");
     QString all = codec->toUnicode(recvDatas);
     qDebug()<<all;
    // 显示在text上
    ui->textBrowser->append(all);
}

void SeriveDialog::on_startRecvPushButton_clicked()
{
    port = ui->protLineEdit->text();
    udpsocket->bind(QHostAddress::LocalHost,port.toInt());
    connect(udpsocket,SIGNAL(readyRead()),this,SLOT(dealWithTheDate()));
}

三、效果:

先运行服务器



0 0
原创粉丝点击