当前位置: 首页 > wzjs >正文

天台建设局网站德阳定制建站网站建设制作

天台建设局网站,德阳定制建站网站建设制作,销售网站设计,东莞住建局投诉电话是多少在 Qt 中实现 UDP 通信主要使用 QUdpSocket 类。以下是 UDP 通信的详细实现步骤和示例代码: 一、UDP 通信基础 无连接协议:不需要建立持久连接数据报模式:以独立数据包(datagram)形式发送适用场景:实时性要…

在 Qt 中实现 UDP 通信主要使用 QUdpSocket 类。以下是 UDP 通信的详细实现步骤和示例代码:


一、UDP 通信基础

  • 无连接协议:不需要建立持久连接
  • 数据报模式:以独立数据包(datagram)形式发送
  • 适用场景:实时性要求高、允许少量丢包(如视频流、游戏、传感器数据)

二、核心类 QUdpSocket

1. 发送数据流程
// 创建 socket 对象
QUdpSocket *udpSocket = new QUdpSocket(this);// 准备数据
QByteArray datagram = "Hello UDP!";
QHostAddress targetAddress = QHostAddress("192.168.1.100");
quint16 targetPort = 1234;// 发送数据报(单播)
qint64 bytesSent = udpSocket->writeDatagram(datagram, targetAddress, targetPort);// 广播示例(发送到所有子网设备)
// udpSocket->writeDatagram(datagram, QHostAddress::Broadcast, 1234);
2. 接收数据流程
// 创建 socket 并绑定端口
QUdpSocket *udpSocket = new QUdpSocket(this);
bool bindResult = udpSocket->bind(1234);  // 绑定接收端口// 连接信号槽
connect(udpSocket, &QUdpSocket::readyRead, [=]() {while (udpSocket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());QHostAddress senderAddress;quint16 senderPort;udpSocket->readDatagram(datagram.data(), datagram.size(),&senderAddress, &senderPort);qDebug() << "Received from" << senderAddress.toString() << ":" << senderPort<< "Data:" << datagram;}
});// 错误处理
connect(udpSocket, &QUdpSocket::errorOccurred, [=](QAbstractSocket::SocketError error){qDebug() << "UDP Error:" << udpSocket->errorString();
});

三、多播(组播)实现

// 加入多播组
QHostAddress multicastGroup("239.255.43.21");
udpSocket->joinMulticastGroup(multicastGroup);// 设置TTL(生存时间)
udpSocket->setSocketOption(QAbstractSocket::MulticastTtlOption, 1);// 发送多播数据
udpSocket->writeDatagram(datagram, multicastGroup, 1234);// 离开多播组
udpSocket->leaveMulticastGroup(multicastGroup);

四、完整示例

发送端类
class UdpSender : public QObject {
public:UdpSender(QObject *parent = nullptr) : QObject(parent) {socket = new QUdpSocket(this);}void sendMessage(const QString &message, const QHostAddress &target, quint16 port) {QByteArray data = message.toUtf8();socket->writeDatagram(data, target, port);}private:QUdpSocket *socket;
};
接收端类
class UdpReceiver : public QObject {Q_OBJECT
public:UdpReceiver(quint16 port, QObject *parent = nullptr) : QObject(parent) {socket = new QUdpSocket(this);connect(socket, &QUdpSocket::readyRead, this, &UdpReceiver::processPendingDatagrams);socket->bind(port);}private slots:void processPendingDatagrams() {while (socket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(socket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);emit messageReceived(QString::fromUtf8(datagram), sender.toString(), senderPort);}}signals:void messageReceived(const QString &message, const QString &senderIp, quint16 senderPort);private:QUdpSocket *socket;
};

五、注意事项

  1. .pro 文件中添加网络模块:

    QT += network
    
  2. UDP 数据报最大长度通常为 65507 字节(IPv4)

  3. 处理数据时考虑:

    • 数据可能分片到达
    • 可能收到不完整数据包
    • 需要自行处理数据校验
  4. 广播地址:

    • 受限广播:255.255.255.255
    • 子网广播:192.168.1.255(具体取决于子网掩码)

通过以上实现,您可以轻松在 Qt 应用中完成 UDP 通信功能。根据具体需求选择单播、广播或多播模式,并注意处理可能的网络异常情况。

http://www.dtcms.com/wzjs/811406.html

相关文章:

  • 武昌有专业做网站学做衣服的网站有哪些
  • 网络服务提供商漳州seo网站快速排名
  • 大众点评如何做团购网站网上推广手段包括
  • 高新区微网站建设wordpress图片如何存储
  • 虚拟主机建设网站绑定域名网站设计费
  • 企业网站建设怎么选择空间网站开发里程碑
  • 收费网站建设视频教程免费下载网站免费建站系统 六
  • 网站开发设计前景网上购物网站开发报价
  • 查询数据的网站怎么做云南移动和生活app安装
  • mvc做的网站wordpress格子主题
  • 万网网站备案婚纱网站html模板
  • 描述建设一个网站的具体流程软件外包公司为什么不好
  • 做展示型网站个人建设网站维护费是多少
  • 重庆建工第二建设有限公司网站wordpress系列教程
  • 电白区住房和城乡建设局网站企业网站备案资料
  • 如何做机票预订网站如何做网站授权
  • 英文网站 常用字体四川建筑人员证书查询官网
  • 网站推广方式的策划网站seo优化方案策划书
  • 四川省住房与城乡建设厅网站百度平台推广的营销收费模式
  • 在网站上做播放视频广告是否违法徐州网站备案
  • 做网站行业统称叫什么行业成都网站建设服务
  • 天津 网站设计公司百度查询关键词排名工具
  • 建设银行英文网站自己做的网站怎么样合法
  • seo中国是什么长沙 网站seo服务 网络服务
  • 违规网站开发 开发者如何规避风险网游开发培训中心
  • 网站产品怎么优化免费注册建网站
  • 养生网站模板下载农产品推广方案
  • led网站建设保亭县住房城市建设局网站
  • wordpress什么删留言合肥推广优化公司
  • 织梦移动网站wordpress博客菜单颜色怎么改