24.Qt-MyChat04 Udp套接字原理

UDP通信
    new出套接字
    绑定端口
    书写报文 writeDatagram
    ReadyRead监听信号
    读取报文
    报文长度 qint64 size =  udp->pendingDatagramSize();
    同步聊天记录

main.cpp

#include "udp1.h"
#include <QApplication>
#include "udp2.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Udp1 w;
    w.show();

    Udp2 u2;
    u2.show();

    return a.exec();
}

udp1.h

#ifndef UDP1_H
#define UDP1_H

#include <QWidget>
#include <QUdpSocket>

namespace Ui {
class Udp1;
}

class Udp1 : public QWidget
{
    Q_OBJECT

public:
    explicit Udp1(QWidget *parent = 0);
    ~Udp1();

private:
    Ui::Udp1 *ui;

public:

    //套接字
    QUdpSocket * udp;


};

#endif // UDP1_H

udp1.cpp

#include "udp1.h"
#include "ui_udp1.h"

Udp1::Udp1(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Udp1)
{
    ui->setupUi(this);


    //初始化属性
    ui->myPort->setText("8888");
    ui->toPort->setText("9999");
    ui->toIp->setText("127.0.0.1");


    //创建套接字
    udp = new QUdpSocket(this);

    //绑定自身端口号
    udp->bind(ui->myPort->text().toInt());

    //点击发送按钮,发送报文
    connect(ui->sendBtn,&QPushButton::clicked,[=](){

        //书写报文 参数1  内容 2 对方Ip  3 对方端口
        udp->writeDatagram(ui->input->toPlainText().toUtf8(),QHostAddress(ui->toIp->text()),ui->toPort->text().toInt());

        ui->record->append("my Say :"+ui->input->toPlainText());

        //清空输入框
        ui->input->clear();

    });

    //接受数据
    connect(udp,&QUdpSocket::readyRead,[=](){

        //获取到报文长度
        qint64 size =  udp->pendingDatagramSize();

        QByteArray array = QByteArray(size,0);

        //读取报文
        udp->readDatagram( array.data() , size );

        //将数据同步到聊天记录中
        ui->record->append(array);

    });
}

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

udp2.h

#ifndef UDP2_H
#define UDP2_H

#include <QWidget>
#include <QUdpSocket>

namespace Ui {
class Udp2;
}

class Udp2 : public QWidget
{
    Q_OBJECT

public:
    explicit Udp2(QWidget *parent = 0);
    ~Udp2();

private:
    Ui::Udp2 *ui;
public:
    QUdpSocket * udp;
};

#endif // UDP2_H

udp2.cpp

#include "udp2.h"
#include "ui_udp2.h"

Udp2::Udp2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Udp2)
{
    ui->setupUi(this);


    //初始化属性
    ui->myPort->setText("9999");
    ui->toPort->setText("8888");
    ui->toIp->setText("127.0.0.1");


    //创建套接字
    udp = new QUdpSocket(this);

    //绑定自身端口号
    udp->bind(ui->myPort->text().toInt());

    //点击发送按钮,发送报文
    connect(ui->sendBtn,&QPushButton::clicked,[=](){

        //书写报文 参数1  内容 2 对方Ip  3 对方端口
        udp->writeDatagram(ui->input->toPlainText().toUtf8(),QHostAddress(ui->toIp->text()),ui->toPort->text().toInt());

        ui->record->append("my Say :"+ui->input->toPlainText());

        //清空输入框
        ui->input->clear();

    });

    //接受数据
    connect(udp,&QUdpSocket::readyRead,[=](){

        //获取到报文长度
        qint64 size =  udp->pendingDatagramSize();

        QByteArray array = QByteArray(size,0);

        //读取报文
        udp->readDatagram( array.data() , size );

        //将数据同步到聊天记录中
        ui->record->append(array);

    });
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值