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

风水网站建设的策划书高端营销型网站

风水网站建设的策划书,高端营销型网站,做招标应该关注什么网站,网站提交链接入口目录 UDP: 举例: 服务器端: 客户端: 使用示例: 错误例子并且改正: UDP: (User Datagram Protocol即用户数据报协议)是一个轻量级的,不可靠的&#xff0…

目录

UDP:

举例:

服务器端:

客户端:

使用示例:

错误例子并且改正:


UDP:

(User Datagram Protocol即用户数据报协议)是一个轻量级的,不可靠的,面向数据报的无连接
协议。在网络质量令人十分不满意的环境下,UDP协议数据包丢失严重。由于UDP的特性:它不属于连
接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用
UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。所以QQ这种对保密
要求并不太高的聊天程序就是使用的UDP协议。
在Qt中提供了QUdpSocket 类来进行UDP数据报(datagrams)的发送和接收。Socket简单地说,就是
一个IP地址加一个port端口 。
流程:①创建QUdpSocket套接字对象 ②如果需要接收数据,必须绑定端口 ③发送数据用
writeDatagram,接收数据用 readDatagram 。

举例:

  1. 导入必要的头文件:

#include <QUdpSocket>

  1. 创建UDP套接字:

QUdpSocket *udpSocket = new QUdpSocket(this);

  1. 绑定本地端口(可选): 通常,UDP套接字不需要绑定到特定的本地端口,而是通过writeDatagram()函数直接指定目标IP地址和端口。但如果需要从特定的本地端口接收数据,可以进行绑定:

udpSocket->bind(localPort, QUdpSocket::ShareAddress);

  1. 发送数据: 使用writeDatagram()函数发送数据包到目标地址和端口:

QHostAddress targetAddress("192.168.0.100"); // 目标IP地址 quint16 targetPort = 1234; // 目标端口 QByteArray data = "Hello, UDP!"; // 要发送的数据 udpSocket->writeDatagram(data, targetAddress, targetPort);

  1. 接收数据: 为了接收数据,我们需要连接readyRead信号到一个槽函数,并在槽函数中读取数据:

connect(udpSocket, &QUdpSocket::readyRead, this, &MyClass::readPendingDatagrams);

然后在槽函数readPendingDatagrams()中处理接收到的数据:

void MyClass::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); // 在这里处理接收到的数据 // ... } }

这样,你就可以使用UDP套接字在Qt中进行简单的UDP通信了。

示例说明: 假设我们有两个Qt应用程序,一个作为UDP服务器,另一个作为UDP客户端。服务器监听特定端口接收来自客户端的消息,并将消息原样发送回客户端。

服务器端:

#include <QTcpServer>
#include <QTcpSocket>class Server : public QObject
{Q_OBJECTpublic:Server(QObject *parent = nullptr) : QObject(parent){udpSocket = new QUdpSocket(this);udpSocket->bind(QHostAddress::Any, 1234);connect(udpSocket, &QUdpSocket::readyRead, this, &Server::readPendingDatagrams);}private slots:void readPendingDatagrams(){while (udpSocket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());udpSocket->readDatagram(datagram.data(), datagram.size());// 将接收到的数据原样发送回客户端udpSocket->writeDatagram(datagram, QHostAddress::LocalHost, 5678);}}private:QUdpSocket *udpSocket;
};

客户端:

#include <QTcpSocket>class Client : public QObject
{Q_OBJECTpublic:Client(QObject *parent = nullptr) : QObject(parent){udpSocket = new QUdpSocket(this);}void sendMessage(const QByteArray &message){udpSocket->writeDatagram(message, QHostAddress::LocalHost, 1234);}private:QUdpSocket *udpSocket;
};

使用示例:

// 在服务器端创建服务器对象
Server server;// 在客户端创建客户端对象
Client client;// 客户端发送消息给服务器
client.sendMessage("Hello, server!");// 服务器会将消息原样发送回客户端// 可以在客户端的槽函数中处理接收到的消息

以上示例演示了简单的UDP通信过程,在实际应用中,你可以根据需要进行更复杂的数据处理和错误处理。

错误例子并且改正:

在UDP通信中,一些常见的错误例子可能包括:

错误1:未绑定本地端口 在使用QUdpSocket时,如果忘记将UDP套接字绑定到本地端口,可能会导致数据无法正确发送或接收。

错误示例:

QUdpSocket *udpSocket = new QUdpSocket(this); udpSocket->writeDatagram("Hello, UDP!", QHostAddress::LocalHost, 1234);

改正方法: 确保在发送或接收数据前,先将UDP套接字绑定到本地端口。

QUdpSocket *udpSocket = new QUdpSocket(this); udpSocket->bind(QHostAddress::Any, 5678); // 绑定本地端口 udpSocket->writeDatagram("Hello, UDP!", QHostAddress::LocalHost, 1234);

错误2:接收数据时未处理所有数据报 在UDP通信中,可能会有多个数据报同时到达,如果只处理其中一个数据报,可能会导致其他数据报被丢弃。

错误示例:

void MyClass::readPendingDatagrams() { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); // 处理接收到的数据(仅处理一个数据报) // ... }

改正方法: 使用循环处理所有待处理的数据报。

void MyClass::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); // 处理接收到的数据(处理所有数据报) // ... } }

错误3:接收数据时未正确处理数据大小 当接收到的数据大小超过pendingDatagramSize()返回的值时,可能会导致数据截断。

错误示例:

void MyClass::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; // 问题:未正确处理数据大小,导致截断 datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); // 处理接收到的数据 // ... } }

改正方法: 在读取数据之前,先获取实际接收到的数据大小,并根据该大小调整数组大小。

void MyClass::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); // 获取实际接收到的数据大小,并根据该大小调整数组大小 qint64 bytesRead = udpSocket->readDatagram(datagram.data(), datagram.size()); // 处理接收到的数据 // 注意:如果需要使用`bytesRead`来截取datagram的有效部分,确保不使用未读取部分。 // ... } }

这些是一些常见的错误例子和相应的改正方法。通过注意这些细节,可以更好地编写稳定和可靠的UDP通信代码。

http://www.hkea.cn/news/935114/

相关文章:

  • 网站建设的图片叠加步骤过程2021年搜索引擎排名
  • 网站链接到邮箱怎么做搜索引擎推广试题
  • 十堰城市建设网站制作自己的网站
  • 传媒网站建设公司深圳百度seo优化
  • 公司需要网站 该怎么做公司推广咨询
  • 高中男女做那个视频网站seo做的好的网站
  • 网站建设 摄影服务上海seo网站排名优化公司
  • 网页设计中html代码seo博客网站
  • 怎样建设小游戏网站google关键词搜索技巧
  • 淘宝 客要推广网站怎么做全媒体广告代理
  • 那个b2b网站可以做外贸武汉全网推广
  • 深圳css3网站开发多少钱如何策划一个营销方案
  • 织梦统计网站访问量代码网络营销公司如何建立
  • 外贸营销型网站建设今日最新重大新闻
  • 个性化定制网站长春网络推广优化
  • 合肥庐阳区疫情最新消息seo优化首页
  • h5网站制作接单最新中高风险地区名单
  • 北京市住房城乡建设委网站公司怎么在网上推广
  • 网站建设首页怎样插入视频百度指数在线查询小程序
  • 青州网站制作哪家好aso优化哪家好
  • wordpress做网站优点郑州网站seo优化
  • 宝安做棋牌网站建设找哪家公司好湖南长沙疫情最新消息
  • 四川专业网站建设中国十大企业培训机构排名
  • 怎么切页面做网站灰色词首页排名接单
  • 网站右侧浮动广告代码百度推广代理公司广州
  • 固原建站公司旺道seo推广系统怎么收费
  • 适合做外链的网站海外广告联盟平台推广
  • 建筑模板规格型号郑州厉害的seo顾问
  • ppt做书模板下载网站有哪些内容国际婚恋网站排名
  • 上海网站建设内容更新网络营销策划目的