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++的友元(friend)

    一篇文章详细解释C++的友元(friend)

    这篇文章主要为大家详细介绍了C++的友元(friend),文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • DSP中浮点转定点运算--举例及编程中的心得

    DSP中浮点转定点运算--举例及编程中的心得

    本文主要讲解DSP浮点转定点运算举例及编程中的心得 ,具有参考价值,需要的朋友可以参考一下。
    2016-06-06
  • Qt 进度条的实现示例

    Qt 进度条的实现示例

    进度条在很多时候都可以用到,有时我们需要在表格,树状栏中直观显示任务进度或消耗百分比,本文就详细的介绍一下Qt 进度条的使用实例,感兴趣的可以了解一下
    2021-06-06
  • C++开发之PugiXML库基础用法示例详解

    C++开发之PugiXML库基础用法示例详解

    PugiXML库是一个功能强大、简单易用的C++ XML解析库,它提供了一组方便的函数来解析、创建和修改XML文档,本文介绍了如何使用PugiXML库来解析、创建和修改XML文档,以及如何处理错误和异常,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • 详解C语言中scanf函数使用的一些注意点

    详解C语言中scanf函数使用的一些注意点

    这篇文章主要介绍了C语言中scanf函数使用的一些注意点,scanf函数的使用是C语言入门学习中的基础知识,需要的朋友可以参考下
    2016-04-04
  • C++实现企业职工工资管理系统

    C++实现企业职工工资管理系统

    这篇文章主要为大家详细介绍了C++实现企业职工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 关于C++运算符重载的一些困惑详解

    关于C++运算符重载的一些困惑详解

    这篇文章主要给大家介绍了关于C++运算符重载的一些困惑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C语言实现单词小助手改进版

    C语言实现单词小助手改进版

    这篇文章主要为大家详细介绍了C语言实现单词小助手的改进版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 解析wprintf 中使用%I64d格式化输出LONGLONG的详细介绍

    解析wprintf 中使用%I64d格式化输出LONGLONG的详细介绍

    本篇文章是对wprintf 中使用%I64d格式化输出LONGLONG进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++异步数据交换实现方法介绍

    C++异步数据交换实现方法介绍

    这篇文章主要介绍了C++异步数据交换实现方法,异步数据交换,除了阻塞函数 send() 和 recv() 之外,Boost.MPI 还支持与成员函数 isend() 和 irecv() 的异步数据交换
    2022-11-11

最新评论