Qt使用UDP进行单波通信

Qt使用UDP进行单波通信

我们一般学习完基础的一些编程之后就会开始接触网络编程,我们熟悉的网络编程一般会涉及到两个协议一个时TCP,一个是UDP。TCP一般是point to point,UDP一般有单播和广播两种方式,那么我们今天就来学习一下单播。

单播通信

UI界面设计

就不多介绍怎么设计的了,这个和之前讲的是一样的

编写代码

.pro文件

我们要使用网络编程就要引入模块

QT  += core gui network

widget.h文件

我们要先引入头文件

#include"QUdpSocket"

然后要声名对象

QUdpSocket *udpSocket

还有我们的槽函数

//读信息要用
void readPendingDatagrams();
完整代码:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include"QUdpSocket"

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void readPendingDatagrams();

    void on_pushButton_3_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QUdpSocket *udpSocket;
};
#endif // WIDGET_H

widget.cpp文件

我们创建了udpSocket对象要定义一下,然后实现以下对应的方法

    udpSocket = new QUdpSocket(this);  // 创建UDP套接字,并设置为当前Widget的子对象

    udpSocket->bind(7755);  // 绑定套接字到端口7755

    // 当UDP套接字有数据可读时,连接信号到槽函数readPendingDatagrams
    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(readPendingDatagrams()));
槽函数的设置
void Widget::readPendingDatagrams()
{
    QByteArray tmpByArray;
    tmpByArray.resize(udpSocket->pendingDatagramSize());  // 根据待处理数据报的大小调整缓冲区
    QHostAddress ipaddr;
    quint16 port;
    while (udpSocket->hasPendingDatagrams()) {
        // 读取数据报,并获取发送方的IP地址和端口号
        udpSocket->readDatagram(tmpByArray.data(), udpSocket->pendingDatagramSize(), &ipaddr, &port);
        // 将接收到的信息显示在textBrowser控件中
        ui->textBrowser->append("接收来自" + ipaddr.toString() + ":" + QString::number(port) + tmpByArray);
    }
}

有的朋友就问,为啥要传这些参数,我不知道怎么查看。这个简单:

有问题就看帮助文档!!!这个是最权威的!!!!!!!!!!

或者直接将鼠标放到方法上,就会显示如下内容:

按钮槽函数的绑定
// 当点击发送按钮时,调用此函数
void Widget::on_pushButton_3_clicked()
{
    // 在textBrowser中显示发送的文本
    ui->textBrowser->append("发送:" + ui->lineEdit->text());
    // 向本地地址127.0.0.1的7755端口发送数据
    udpSocket->writeDatagram(ui->lineEdit->text().toUtf8(), QHostAddress("127.0.0.1"), 7755);
}

// 当点击绑定按钮时,调用此函数
void Widget::on_pushButton_clicked()
{
    udpSocket->bind(7755);  // 绑定套接字到端口7755
    ui->pushButton->setEnabled(false);  // 禁用绑定按钮
    ui->pushButton_2->setEnabled(true);  // 启用解绑按钮
}

// 当点击解绑按钮时,调用此函数
void Widget::on_pushButton_2_clicked()
{
    udpSocket->abort();  // 终止UDP套接字的操作
    ui->pushButton->setEnabled(true);  // 启用绑定按钮
    ui->pushButton_2->setEnabled(false);  // 禁用解绑按钮
}

### 回答1: 计算机图形学是一门涉及计算机图像处理与图像生成的学科,需要掌握很多数学知识与编程技能,建议学习者在学习这门课程之前先具备一定的编程能力数学基础,特别是线性代数、微积分离散数学等知识。另外,选好一本好的教材、查看相关的视频教程、参加实践项目,都是非常有效的学习方法。加油! ### 回答2: 学好计算机图形学这门课需要付出一定的努力持久的学习态度。以下是一些建议: 1. 扎实的数学基础:计算机图形学涉及很多数学知识,包括线性代数、微积分、概率统计等,因此需要建立扎实的数学基础,以便理解应用相关算法理论。 2. 学习相关算法技术:计算机图形学涵盖了很多算法技术,如光线追踪、三维模型建模、纹理映射等。要学好这门课,需要了解并掌握这些算法技术的基本原理应用。 3. 多实践多实验:通过动手实践相关实验,能够加深对计算机图形学概念技术的理解,提高自己的实际操作能力。 4. 参与项目或竞赛:参与计算机图形学相关的项目或竞赛可以提供实践机会交流平台,帮助加深对知识的理解,并与他人分享交流学习经验。 5. 多阅读相关文献教材:查阅相关的学术论文、教材专业书籍,了解所学内容的最新进展研究方向,以及学术界的思考观点。 6. 寻找学习资源讲解视频:在网上可以找到很多计算机图形学方面的学习资源讲解视频,通过观看这些资源的内容,能够进一步巩固扩展自己的知识。 7. 坚持每天学习:学习计算机图形学需要时间耐心,建议每天都进行一定的学习复习,保持持续的积累进步。 8. 寻求帮助交流:如果在学习中遇到困难,可以寻求老师或同学的帮助,也可以参加相关学术或技术的交流活动,与他人共同学习进步。 ### 回答3: 学好计算机图形学这门课需要付出一定的努力时间。以下是一些建议: 首先,需要理解基础概念原理。图形学是一门理论与实践相结合的学科,了解基本原理对学好这门课非常重要。学生应该学习光栅化、矢量图像、三维模型曲线绘制等基础概念,并理解它们在图形学中的应用。 其次,掌握相关编程技术。计算机图形学通常与编程密切相关,因此学生需要熟悉编程语言,如C++或Python,并了解相关的图形库API,如OpenGL或DirectX。通过编代码来实现图形学中的各种算法技术,能够加深对图形学概念的理解。 此外,多实践是学好计算机图形学的关键。通过完成一些实际项目,如绘制简单的图形、模拟光照效果或创建三维场景,可以巩固所学知识,并获得更多的经验。同时,可以参加一些相关的竞赛或比赛,如计算机图形学会议或比赛,以提升自己的技能水平。 还可以积极参与相关课外活动。参加学术研讨会、工作坊或讲座,与其他学习者专家交流,了解最新的研究进展技术趋势。同时,可以通过阅读学术论文专业书籍,加深对图形学领域的理解。 最后,保持耐心持续学习的态度。计算机图形学是一门广阔且不断发展的学科,需要持续学习新的算法技术。学生应该保持持续学习的态度,不断扩展自己的知识技能,与行业的发展保持同步。 综上所述,学好计算机图形学需要对基础概念原理有深入的理解,掌握相关的编程技术,进行实践参与相关活动,并持续学习保持耐心。通过这些努力,能够取得更好的学习成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值