QT UDP网络编程实现简单消息传输

 更新时间:2022年08月18日 17:09:33   作者:直到流萤成飞火  
这篇文章主要为大家详细介绍了QT UDP网络编程实现简单消息传输,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了QT UDP实现简单消息传输的具体代码,供大家参考,具体内容如下

这几天看了下Qt的udp,顺便实现了下简单的消息传输,看起来比较简单。

UDP服务器:

截图如下:

代码:

server.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QUdpSocket>
#include<QtNetwork>
#include<QLabel>
#include<QPushButton>
#include<QLineEdit>
#include<QGridLayout>
#include<QTimer>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
protected:
    QTimer* timer;
    QImage* image;
private slots:
    void send();
    void bordcaststart();
private:
    QPushButton* start_ptn;
    QPushButton* close_ptn;
    QPushButton* send_ptn;
    QLabel* label;
    QLineEdit* edit;
    QLabel* image_label;
    QGridLayout* layout;
    QUdpSocket* udpsocket;
};

#endif // WIDGET_H

server.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    start_ptn=new QPushButton("start");
    close_ptn=new QPushButton("quit");
    send_ptn=new QPushButton("send");
    label=new QLabel;
    label->setText("this is test!");
    edit=new QLineEdit;
    layout=new QGridLayout(this);
    layout->addWidget(label);
    layout->addWidget(edit);
    layout->addWidget(send_ptn,1,1);
    layout->addWidget(start_ptn,2,0);
    layout->addWidget(close_ptn,2,1);
    this->resize(400,400);

    timer=new QTimer(this);
    udpsocket=new QUdpSocket(this);
    connect(start_ptn,SIGNAL(clicked(bool)),this,SLOT(bordcaststart()));
    connect(close_ptn,SIGNAL(clicked(bool)),this,SLOT(close()));
//    connect(timer,SIGNAL(timeout()),this,SLOT(send()));
}

Widget::~Widget()
{

}

void Widget::send()
{

    QByteArray datagram= "Broadcast message " +edit->text().toUtf8();
    udpsocket->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,45454);
}

void Widget::bordcaststart()
{
   // timer->start(1000);
    start_ptn->setDisabled(true);
    connect(send_ptn,SIGNAL(clicked(bool)),this,SLOT(send()));
}

客户端

截图:

client.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QUdpSocket>
#include<QtNetwork>
#include<QLabel>
#include<QTimer>
#include<QPushButton>
#include<QGridLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
protected:

private:
    QGridLayout* layout;
    QPushButton* quit_ptn;
    QLabel* label;
    QUdpSocket* udpsocket;
private slots:
    void boarcast();
};

#endif // WIDGET_H

client.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    label=new QLabel;
    quit_ptn=new QPushButton("quit");

    layout=new QGridLayout(this);
    layout->addWidget(label);
    layout->addWidget(quit_ptn);
    this->resize(200,200);

    udpsocket=new QUdpSocket(this);
    udpsocket->bind(45454, QUdpSocket::ShareAddress);
    connect(udpsocket,SIGNAL(readyRead()),this,SLOT(boarcast()));
    connect(quit_ptn,SIGNAL(clicked(bool)),this,SLOT(close()));
}

Widget::~Widget()
{

}

void Widget::boarcast()
{
    while (udpsocket->hasPendingDatagrams()) {
            QByteArray datagram;
            datagram.resize(udpsocket->pendingDatagramSize());
            QHostAddress sender;
            quint16 senderPort;

            udpsocket->readDatagram(datagram.data(), datagram.size(),
                                    &sender, &senderPort);

            label->setText(datagram);
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++20 新特性 协程 Coroutines(2)

    C++20 新特性 协程 Coroutines(2)

    上篇文章简单给大介绍了 C++20 特性 协程 Coroutines co_yield 和 co_return 那么这篇文章继续给大家介绍C++20 的新特性协程 Coroutines co_await,需要的朋友可以参考一下
    2021-10-10
  • C++ Boost ScopeExit超详细讲解

    C++ Boost ScopeExit超详细讲解

    最近研究了boost中的ScopeExit,发现是个这是个很高级的特性,可以在作用域结束时自动关闭已经打开的资源或做某些清理操作,这篇文章主要介绍了C++ Boost ScopeExit
    2022-11-11
  • C++11中R字符串的作用小结

    C++11中R字符串的作用小结

    这篇文章主要介绍了C++11中R字符串的作用小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-07-07
  • C基础 寻找随机函数的G点详解

    C基础 寻找随机函数的G点详解

    下面小编就为大家带来一篇C基础 寻找随机函数的G点详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • c语言尾队列tailq使用示例分享

    c语言尾队列tailq使用示例分享

    这篇文章主要介绍了c语言尾队列tailq使用示例,大家参考使用吧
    2014-01-01
  • C++提取文件名与提取XML文件的方法详解

    C++提取文件名与提取XML文件的方法详解

    这篇文章主要为大家详细介绍了C++提取文件名与提取XML文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2022-03-03
  • C++11非受限联合体的使用

    C++11非受限联合体的使用

    本文主要介绍了C++11非受限联合体的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 关于C语言中弱符号与弱引用的实际应用问题

    关于C语言中弱符号与弱引用的实际应用问题

    在编码过程中,我们经常遇到符号重定义的错误问题,本文通过实例代码展示给大家介绍了C语言弱符号与弱引用的实际应用问题,一起看看吧
    2021-09-09
  • Qt中const QString转换 char *可能的坑

    Qt中const QString转换 char *可能的坑

    本文主要介绍了Qt中const QString转换 char *可能的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C++实现雷霆战机可视化小游戏

    C++实现雷霆战机可视化小游戏

    这篇文章主要为大家详细介绍了C++实现雷霆战机可视化小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论