QT UDP练习

QT UDP练习

一、简述

      简单的基于UDP协议的双向通信 练习

二、效果


三、工程结构


四、源文件

Udp1.pro文件

QT +=widgets gui network

HEADERS += \
    udp1.h

SOURCES += \
    main.cpp \
    udp1.cpp

main.cpp文件

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

int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    Udp1 udp;
    udp.setWindowFlags(Qt::WindowCloseButtonHint);//只留下关闭按钮
    udp.setWindowTitle("UDP1[127.0.0.1:10001]");//设置窗体标题
    udp.show();//show出窗体
    return app.exec();
}

udp1.cpp文件

#include "udp1.h"

Udp1::Udp1(QWidget *parent) :
    QDialog(parent)
{
    //创建行文本编辑框
    _lineEdit = new QLineEdit(this);
    //设置位置、大小
    _lineEdit->setGeometry(10,10,130,20);
    //创建发送按钮
    QPushButton *sendBtn = new QPushButton("发送",this);
    //设置位置、大小
    sendBtn->setGeometry(150,10,50,20);
    //创建文本浏览框
    _text = new QTextBrowser(this);
    //设置位置、大小
    _text->setGeometry(10,40,190,200);
    // 创建udpsocket
    _udp = new QUdpSocket;
    //绑定端口
    _udp->bind(10001);
    //并连接槽函数,用来接收数据
    connect(_udp, SIGNAL(readyRead()),this, SLOT(MyRecive()));
    //连接发送信息的槽函数
    connect(sendBtn,SIGNAL(clicked()),this,SLOT(MySend()));
}

void Udp1::MyRecive()
{
    while(_udp->hasPendingDatagrams())
    {
        //获取收到的信息大小
        quint32 datagramSize = _udp->pendingDatagramSize();
        //用来存储接收到的信息
        QByteArray buf(datagramSize, 0);
        //发送方IP
        QHostAddress addres;
        //发送方端口
        quint16 port;
        //接收信息并存放到buf中
        _udp->readDatagram(buf.data(), buf.size(),&addres,&port);

        //将收到的信息追加展示
        _text->append("["+addres.toString()+":"+QString::number(port)+"]"+buf);
        }
}

void Udp1::MySend()
{
    //获取要发送的信息
    QString msg = _lineEdit->text();
    //以QByteArray格式将信息发送给主机IP为127.0.0.1的10002号端口
    if(!msg.isEmpty())
    {
        _udp->writeDatagram(msg.toUtf8(), QHostAddress("127.0.0.1"), 10002);
    }
}

Udp2.pro文件

QT +=widgets gui network

HEADERS += \
    udp2.h

SOURCES += \
    udp2.cpp \
    main.cpp

udp2.h文件

#ifndef UDP2_H
#define UDP2_H

#include <QDialog>
#include <QUdpSocket>
#include <QLineEdit>
#include <QTextBrowser>
#include <QPushButton>
class Udp2 : public QDialog
{
    Q_OBJECT
public:
    explicit Udp2(QWidget *parent = 0);

signals:

public slots:
    void MyRecive();//接收信息
    void MySend();//发送信息
private:
    QUdpSocket* _udp;//通信socket
    QLineEdit* _lineEdit;//行文本编辑框,编写要发送的信息
    QTextBrowser* _text;//展示接收到的信息
};

#endif // UDP2_H

main.cpp文件

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

int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    Udp2 udp;
    udp.setWindowFlags(Qt::WindowCloseButtonHint);//只留下关闭按钮
    udp.setWindowTitle("UDP2[127.0.0.1:10002]");//设置窗体标题
    udp.show();//show出窗体
    return app.exec();
}

udp2.cpp文件

#include "udp2.h"

Udp2::Udp2(QWidget *parent) :
    QDialog(parent)
{
    //创建行文本编辑框
    _lineEdit = new QLineEdit(this);
    //设置位置、大小
    _lineEdit->setGeometry(10,10,130,20);
    //创建发送按钮
    QPushButton *sendBtn = new QPushButton("发送",this);
    //设置位置、大小
    sendBtn->setGeometry(150,10,50,20);
    //创建文本浏览框
    _text = new QTextBrowser(this);
    //设置位置、大小
    _text->setGeometry(10,40,190,200);
    // 创建udpsocket
    _udp = new QUdpSocket;
    //绑定端口
    _udp->bind(10002);
    //并连接槽函数,用来接收数据
    connect(_udp, SIGNAL(readyRead()),this, SLOT(MyRecive()));
    //连接发送信息的槽函数
    connect(sendBtn,SIGNAL(clicked()),this,SLOT(MySend()));
}

void Udp2::MyRecive()
{
    while(_udp->hasPendingDatagrams())
    {
        //获取收到的信心大小
        quint32 datagramSize = _udp->pendingDatagramSize();
        //用来存储接收到的信息
        QByteArray buf(datagramSize, 0);
        //发送方IP
        QHostAddress addres;
        //发送方端口
        quint16 port;
        //接收信息并存放到buf中
        _udp->readDatagram(buf.data(), buf.size(),&addres,&port);

        //将收到的信息追加展示
        _text->append("["+addres.toString()+":"+QString::number(port)+"]"+buf);
    }
}

void Udp2::MySend()
{
    //获取要发送的信息
    QString msg = _lineEdit->text();
    //以QByteArray格式将信息发送给主机IP为127.0.0.1的10001号端口
    if(!msg.isEmpty())
    {
        _udp->writeDatagram(msg.toUtf8(), QHostAddress("127.0.0.1"), 10001);
    }
}


猜你喜欢

转载自blog.csdn.net/nanfeibuyi/article/details/80369632