【C/C++学院】(20)QT:udp通信

简介: <p><span style="color:rgb(44,44,44); font-family:SimSun; font-size:20px; line-height:20px; text-align:center"><strong>基于QT的UDP协议的通信</strong></span></p> <p></p> <pre code_snippet_id="611440" snip

基于QT的UDP协议的通信

#-------------------------------------------------
#
# Project created by QtCreator 2014-05-22T21:39:26
#
#-------------------------------------------------

QT       += core gui
QT += network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = udpchat
TEMPLATE = app


SOURCES += main.cpp\
        dialog.cpp

HEADERS  += dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QUdpSocket>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    QLabel *label1, *label2, *label3, *label4;
    QLineEdit *edit1, *edit2, *edit3, *edit4;
    QPushButton *btn1, *btn2;
    QUdpSocket *udpsocket;


private slots:
    void on_clicked1();
    void on_clicked2();
    void dataReceived();
};

#endif // DIALOG_H

#include "dialog.h"
#include <QMessageBox>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QByteArray>
#include <QHostAddress>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    udpsocket = new QUdpSocket(this);

    setWindowTitle(tr("udp聊天"));//设置窗口标题
    label1 = new QLabel;
    label1->setText(tr("请输入bind端口号"));
    label2 = new QLabel;
    label2->setText(tr("请输入目的IP地址"));
    label3 = new QLabel;
    label3->setText(tr("请输入目的端口号"));
    label4 = new QLabel;
    label4->setText(tr("请输入发送消息"));


    edit1 = new QLineEdit;
    edit2 = new QLineEdit;
    edit3 = new QLineEdit;
    edit4 = new QLineEdit;

    btn1 = new QPushButton;
    btn1->setText(tr("bind"));//设置btn1标题
    btn2 = new QPushButton;
    btn2->setText(tr("发送"));//设置btn2标题

    QGridLayout *layout1 = new QGridLayout(this);

    layout1->addWidget(label1, 0, 0);//加入label1控件
    layout1->addWidget(edit1, 0, 1);//加入edit1控件
    layout1->addWidget(btn1, 1, 0);//加入btn1控件
    layout1->addWidget(label2, 2, 0);//加入label2控件
    layout1->addWidget(edit2, 2, 1);//加入edit2控件
    layout1->addWidget(label3, 3, 0);//加入label3控件
    layout1->addWidget(edit3, 3, 1);//加入label3控件
    layout1->addWidget(label4, 4, 0);//加入label4控件
    layout1->addWidget(edit4, 4, 1);//加入label4控件
    layout1->addWidget(btn2, 5, 0);//加入btn2控件

    connect(btn1, SIGNAL(clicked()), this, SLOT(on_clicked1()));
    connect(btn2, SIGNAL(clicked()), this, SLOT(on_clicked2()));
    connect(udpsocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));

}

Dialog::~Dialog()
{

}

void Dialog::on_clicked1()
{
    udpsocket->close();
    udpsocket->bind(edit1->text().toInt());
}

void Dialog::on_clicked2()
{
    QHostAddress addr;
    addr.setAddress(edit2->text());
    int port = edit3->text().toInt();
    udpsocket->writeDatagram(edit4->text().toUtf8(), addr, port);
}

void Dialog::dataReceived()//接收socket消息的槽函数
{
    QHostAddress addr;
    char buf[1024];
    while(udpsocket->hasPendingDatagrams())
    {
        memset(buf, 0, sizeof(buf));
        udpsocket->readDatagram(buf, sizeof(buf), &addr);
        QMessageBox::information(this, tr("消息"), tr("来自") + addr.toString() + tr("的消息:\n") + buf);
    }
}









目录
相关文章
|
12天前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
31 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
11天前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
|
2月前
|
网络协议 算法 Java
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
42 3
|
14天前
|
数据可视化 开发者 C++
Qt(C++)使用QChart静态显示3个设备的温度变化曲线
QChart模块是Qt Charts库的基础,提供了用于创建和显示各种类型图表的类和接口。Qt Charts库是一个功能丰富、易于使用的数据可视化工具库,可以帮助开发者在应用程序中添加漂亮而又交互性强的图表。
21 1
Qt(C++)使用QChart静态显示3个设备的温度变化曲线
|
11天前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
|
13天前
|
存储 JSON 数据可视化
Qt(C++)使用QChart动态显示3个设备的温度变化曲线
Qt的QChart是一个用于绘制图表和可视化数据的类。提供了一个灵活的、可扩展的、跨平台的图表绘制解决方案,可以用于各种应用程序,如数据分析、科学计算、金融交易等。
24 1
|
2月前
|
网络协议 安全 Java
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
36 1
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
|
11天前
基于QT实现的QQ聊天简易版(UDP通信版)
源码已经给小伙伴们整理好了,微信搜索 嵌入式工程之家 关注公众号回复 QQ 即可获得源码和详细操作指示哦~
|
1月前
UDP通信
UDP通信
15 1
|
19天前
|
数据采集 自然语言处理 数据挖掘
一文搞懂:【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
一文搞懂:【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信