Qt中的UDP通信

一、UDP的特点

UDP(用户数据报协议)是一种简单轻量级、不可靠的、面向数据报,无连接的传输层协议。而TCP/IP协议却是有连接的

二、UDP适合应用的几种情况

1、网络数据大多为短消息

2、拥有大量客户端

3、对数据安全性无特殊要求

4、网络负担非常重,但对响应速度要求高。

三、Qt中使用UDP通信

因为UDP是无连接的,所以两个通信设备利用UDP通信不需要建立连接,只需要知道对方的地址和端口号即可

添加网络模块

QT += network;

添加头文件

#include<QUdpSocket>

端口

所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。计算机共有65535个端口,但一般0~1024号端口都是被系统占用的,所以我们绑定端口号时记得使用1024~65535之间的端口号

绑定端口

udpsocket->bind(9000); //绑定端口号

发送数据

writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

参数介绍

1.发送的数据

2.发送数据的长度(可以省略)

3.对方的IP地址

4.对方的端口号

QString text = ui->te_input->toPlainText();
udpsocket->writeDatagram(text.toUtf8(),QHostAddress(IP),PORT);

获取用户编辑的文本信息,使用writeDatagram()发送

接收数据

readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)

参数介绍

1.将socket读取的数据放入到data中

2.读取的长度

3.对方的IP地址

4.对方的端口号

当socket接收到数据时,会自动触发readyRead信号,然后我们可以处理这个信号,接收对方发过来的信息

 connect(udpsockets,&QUdpSocket::readyRead,[=]
    {
           QByteArray arry;
           arry.resize(udpsockets->pendingDatagramSize());//获取数据报的长度
           QHostAddress cliaddr = QHostAddress("127.0.0.1");  //对方的IP
           quint16 port = 9000; //对方的端口号
           qint64 len = udpsockets->readDatagram(arry.data(),arry.size(),&cliaddr,&port);
           if(len>0)
           {
               ui->textEdit->append(arry.data());
           }
    });

为了区分两个设备,我这里建了两个工程,一个发送端,一个接收端

两个设备之间可以互相接收和发送数据,原理是一样的

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值