Qt学习(十五)—— 网络通信之UDP

本文深入讲解了Qt中UDP通信的实现细节,包括bind(), readDatagram(), writeDatagram(), close()等关键函数的使用,以及UDP广播和组播的原理与实践。

在这里插入图片描述

UDP通信是无连接的,与TCP通信相比,少了一步建立连接的过程,只要经过绑定,就可以直接进行数据的发送和接收。

在Qt的UDP通信中,由于少了连接这一个步骤,客户端和服务端没有太大区别,所以也可以看作只有发送端和接收端。无论是发送端还是接收端,都只有一个套接字,也就是QUdpSocket。此外,UDP通信中没有监听listen(),只有绑定bind(),往套接字中读写数据用的是readDatagram()writeDatafram(),关闭套接字时同样是调用close()

P.S:datagram是数据报 / 数据包 / 数据报文的意思

和TCP相同的地方是,发送端向接收端发送数据时,会触发接收端的readyRead()信号。

UDP收发消息的实现

首先,为了方便测试需要绘制两个窗口,在它们之间互相通信:

//WidgetA.h
#ifndef WIDGETA_H
#define WIDGETA_H

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
class WidgetA : public QWidget
{
   
   
    Q_OBJECT

public:
    WidgetA(QWidget *parent = 0);
    ~WidgetA();
private:
    QLineEdit *p_ipEdit;
    QLineEdit *p_portEdit;
    QPushButton *p_connectButton;
    QTextEdit *p_sendBox;
    QPushButton *p_sendButton;
    QPushButton *p_closeButton;
};

#endif // WIDGETA_H
//WidgetA.cpp
#include "WidgetA.h"
#include <QGridLayout>
WidgetA::WidgetA(QWidget *parent)
    : QWidget(parent)
{
   
   
    this->resize(640,480);
    this->move(300,300);
    this->setWindowTitle("Port 9999");
    QGridLayout *p_layout=new QGridLayout(this);
    p_ipEdit=new QLineEdit(this);
    p_portEdit=new QLineEdit(this);
    p_sendBox=new QTextEdit(this);
    p_sendButton=new QPushButton("send",this);
    p_closeButton=new QPushButton("close",this);
    p_layout->addWidget(p_ipEdit,0,0,1,10);
    p_layout->addWidget(p_portEdit,1,0,1,10);
    p_layout->addWidget(p_sendBox,2,0,8,10);
    p_layout->addWidget(p_sendButton,10,0,1,2
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值