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

本文介绍了一种使用Qt库实现的UDP广播通信方法,包括客户端和服务端的代码示例。该方法支持中文和英文消息的传输,并详细展示了如何进行UTF-8编码处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直以来大家都是用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()));
}

三、效果:

先运行服务器



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值