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

吉安网站推广徽hyhyk1wordpress主题 外贸

吉安网站推广徽hyhyk1,wordpress主题 外贸,国平seo,嵌入式开发培训哪家好Qt 是一个跨平台C图形界面开发库#xff0c;利用Qt可以快速开发跨平台窗体应用程序#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置#xff0c;实现图形化开发极大的方便了开发效率#xff0c;本章将重点介绍如何运用QUdpSocket组件实现基于UDP的网络通信…Qt 是一个跨平台C图形界面开发库利用Qt可以快速开发跨平台窗体应用程序在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置实现图形化开发极大的方便了开发效率本章将重点介绍如何运用QUdpSocket组件实现基于UDP的网络通信功能。 与QTcpSocket组件功能类似QUdpSocket组件是 Qt 中用于实现用户数据报协议UDPUser Datagram Protocol通信的类。UDP 是一种无连接的、不可靠的数据传输协议它不保证数据包的顺序和可靠性但具有低延迟和简单的特点。 以下是 QUdpSocket 类的完整函数及其简要解释 函数描述QUdpSocket(QObject *parent nullptr)构造函数创建一个新的 QUdpSocket 对象。~QUdpSocket()析构函数释放 QUdpSocket 对象及其资源。void bind(const QHostAddress address, quint16 port, BindMode mode DefaultForPlatform)将套接字绑定到指定的本地地址和端口。void close()关闭套接字。bool joinMulticastGroup(const QHostAddress groupAddress, const QNetworkInterface iface QNetworkInterface())加入多播组。bool leaveMulticastGroup(const QHostAddress groupAddress, const QNetworkInterface iface QNetworkInterface())离开多播组。qint64 pendingDatagramSize() const返回下一个待读取的数据报的大小。qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address nullptr, quint16 *port nullptr)读取数据报。QByteArray readDatagram(qint64 maxSize, QHostAddress *address nullptr, quint16 *port nullptr)读取数据报返回 QByteArray 对象。qint64 writeDatagram(const char *data, qint64 size, const QHostAddress address, quint16 port)发送数据报。qint64 writeDatagram(const QByteArray datagram, const QHostAddress address, quint16 port)发送数据报接受 QByteArray 对象。QAbstractSocket::SocketState state() const返回套接字的当前状态。QAbstractSocket::SocketType socketType() const返回套接字的类型。bool isValid() const如果套接字有效则返回 true否则返回 false。int error() const返回套接字的当前错误代码。QHostAddress localAddress() const返回本地地址。quint16 localPort() const返回本地端口。int readBufferSize() const返回读取缓冲区的大小。void setReadBufferSize(int size)设置读取缓冲区的大小。QNetworkInterface multicastInterface() const返回多播组的网络接口。void setMulticastInterface(const QNetworkInterface iface)设置多播组的网络接口。bool hasPendingDatagrams() const如果有待读取的数据报则返回 true否则返回 false。bool isReadable() const如果套接字可读则返回 true否则返回 false。bool isWritable() const如果套接字可写则返回 true否则返回 false。bool setSocketDescriptor(int socketDescriptor, QUdpSocket::SocketState socketState ConnectedState, QIODevice::OpenMode openMode ReadWrite)设置套接字描述符。int socketDescriptor() const返回套接字描述符。bool waitForReadyRead(int msecs 30000)等待套接字可读取数据。bool waitForBytesWritten(int msecs 30000)等待套接字已写入指定字节数的数据。void ignoreSslErrors(const QListQSslError errors)忽略 SSL 错误。void abort()强制关闭套接字。QNetworkProxy proxy() const返回套接字的代理设置。void setProxy(const QNetworkProxy networkProxy)设置套接字的代理设置。QString errorString() const返回套接字的错误消息字符串。 这些函数提供了在 UDP 通信中使用 QUdpSocket 的各种功能包括绑定、发送和接收数据报、设置和获取套接字的状态等。 1.1 初始化部分 在初始化部分我们首先通过new QUdpSocket来实现创建UDP对象QUdpSocket 构造函数的函数原型如下 QUdpSocket::QUdpSocket(QObject * parent nullptr)如上构造函数创建一个新的 QUdpSocket 对象。如果提供了 parent 参数则会将新创建的 QUdpSocket 对象添加到 parent 对象的子对象列表中并且在 parent 对象被销毁时自动销毁 QUdpSocket 对象。如果没有提供 parent 参数则 QUdpSocket 对象将不会有父对象并且需要手动管理其生命周期。 初始化结束后则下一步需要调用bind()bind() 函数是 QUdpSocket 类的一个成员函数用于将套接字绑定到特定的本地地址和端口。它的函数原型如下 void QUdpSocket::bind(const QHostAddress address, quint16 port, BindMode mode DefaultForPlatform)address要绑定的本地地址通常是 QHostAddress::Any表示绑定到所有可用的网络接口。port要绑定的本地端口号。mode绑定模式指定套接字的行为。默认值是 DefaultForPlatform表示使用平台默认的绑定模式。 该函数允许 QUdpSocket 在本地网络接口上监听传入的数据报。一旦调用了 bind() 函数QUdpSocket 就可以接收来自指定地址和端口的数据报。 在调用 bind() 函数之后如果成功绑定了指定的地址和端口套接字将处于 BoundState 状态。如果出现错误可以通过检查 error() 函数获取错误代码并通过 errorString() 函数获取错误消息。 接着我们通过connect()函数依次绑定套接字到stateChanged状态改变信号以及readyRead()读取信号上这段初始化代码如下所示 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);udpSocketnew QUdpSocket(this);// 生成随机整数 包含2000 - 不包含65534int randomInt QRandomGenerator::global()-bounded(2000, 65534);if(udpSocket-bind(randomInt)){this-setWindowTitle(this-windowTitle() | 地址: getLocalAddress() 绑定端口 QString::number(udpSocket-localPort()));}connect(udpSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(onSocketStateChange(QAbstractSocket::SocketState)));onSocketStateChange(udpSocket-state());connect(udpSocket,SIGNAL(readyRead()),this,SLOT(onSocketReadyRead())); }接着切换到读取信号所对应的槽函数上onSocketReadyRead是我们自定义的一个槽该槽函数功能如下所示 // 读取收到的数据报 void MainWindow::onSocketReadyRead() {while(udpSocket-hasPendingDatagrams()){QByteArray datagram;datagram.resize(udpSocket-pendingDatagramSize());QHostAddress peerAddr;quint16 peerPort;udpSocket-readDatagram(datagram.data(),datagram.size(),peerAddr,peerPort);QString strdatagram.data();QString peer[消息来自 peerAddr.toString():QString::number(peerPort)] | ;ui-plainTextEdit-appendPlainText(peerstr);} }首先在代码中调用pendingDatagramSize函数pendingDatagramSize() 是 QUdpSocket 类的一个成员函数用于获取下一个待读取的数据报的大小。它的函数原型如下 qint64 QUdpSocket::pendingDatagramSize() const该函数返回一个 qint64 类型的值表示下一个待读取的数据报的大小以字节为单位。如果没有待读取的数据报或者发生了错误该函数将返回 -1。 通常可以在调用 readDatagram() 函数之前调用 pendingDatagramSize() 函数来获取下一个待读取的数据报的大小。这样可以为数据缓冲区分配正确大小的空间以确保完整地读取数据报。 当有了待读取字节后接着就可以直接通过调用readDatagram函数来从套接字中读取数据报readDatagram() 是 QUdpSocket 类的一个成员函数它有几个重载形式其中最常用的是 qint64 QUdpSocket::readDatagram(char * data, qint64 maxSize, QHostAddress * address nullptr, quint16 * port nullptr)该函数用于读取数据报并将其存储到指定的缓冲区 data 中最多读取 maxSize 个字节的数据。可选参数 address 和 port 用于返回数据报的源地址和端口号。如果不需要这些信息可以将它们设置为 nullptr。 函数返回实际读取的字节数如果发生错误返回 -1。要查看错误信息可以使用 error() 和 errorString() 函数。 另外还有一个更简单的重载形式 QByteArray QUdpSocket::readDatagram(qint64 maxSize, QHostAddress * address nullptr, quint16 * port nullptr)这个重载函数直接返回一个 QByteArray 对象其中包含了读取的数据报。 1.2 单播与广播消息 单播Unicast和广播Broadcast是网络通信中常见的两种数据传输方式它们在数据包的传输范围和目标数量上有所不同。 单播Unicast 单播是一种一对一的通信方式其中数据包从一个发送者传输到一个接收者。在单播通信中数据包只发送到目标主机的网络接口并且只有目标主机能够接收和处理这个数据包。 一对一通信每个数据包只有一个发送者和一个接收者。目标明确数据包只发送到特定的目标主机其他主机不会接收到这个数据包。点到点通信适用于直接通信的场景如客户端与服务器之间的通信。 当按钮发送消息被点击后则是一种单播模式通常该模式需要得到目标地址与端口号并通过调用writeDatagram来实现数据的发送该函数通过传入三个参数分别是发送字符串目标地址与目标端口来实现一对一推送。 void MainWindow::on_pushButton_clicked() {QHostAddress targetAddr(ui-lineEdit_addr-text());QString portString ui-lineEdit_port-text();quint16 targetPort portString.toUShort();QString msgui-lineEdit_msg-text();QByteArray strmsg.toUtf8();// 发送数据报udpSocket-writeDatagram(str,targetAddr,targetPort);ui-plainTextEdit-appendPlainText([单播消息] | msg); }广播Broadcast 广播是一种一对多的通信方式其中数据包从一个发送者传输到同一网络中的所有主机。在广播通信中数据包被发送到网络中的所有主机并且所有的主机都能够接收和处理这个数据包。 一对多通信每个数据包有一个发送者但可以有多个接收者。目标不明确数据包被发送到网络中的所有主机不需要知道接收者的具体地址。广播域在局域网中进行广播只有在同一广播域内的主机才能接收到广播消息。网络负载在大型网络中使用广播可能会产生大量的网络流量影响网络性能。 当按钮广播消息被点击后则同样是调用writeDatagram函数与唯一的区别在于第二个参数并未指定地址而是使用了QHostAddress::Broadcast来代替意味着只要端口是一致的则对所有的客户推送消息其他保持不变。 void MainWindow::on_pushButton_2_clicked() {// 广播地址QString portString ui-lineEdit_port-text();quint16 targetPort portString.toUShort();QString msgui-lineEdit_msg-text();QByteArray strmsg.toUtf8();udpSocket-writeDatagram(str,QHostAddress::Broadcast,targetPort);ui-plainTextEdit-appendPlainText([广播消息] | msg); }读者可自行运行两次客户端此时的端口将会随机分配当指定对端端口后就可以向其发送数据如下图所示具体实现细节请参考文章附件。
http://www.w-s-a.com/news/607705/

相关文章:

  • 专业建设专题网站wordpress lnmp wamp
  • 环保网站 下载页网站
  • 开源小程序模板江门关键词优化排名
  • 网站开发 知乎房地产型网站建设
  • 买完域名网站怎么设计wordpress 纯代码
  • 公司网站怎么做百度竞价宁波网络公司哪家好
  • 河西网站建设制作微信分销系统多层
  • 网站制作完成后应进入什么阶段石家庄网站建设找哪家好
  • 南通外贸网站推广自在源码网官网
  • 个人网站模板html下载餐饮vi设计案例欣赏
  • 高端网站建设wanghess网站开发售后服务承诺
  • 江西网站建设费用企业网站推广的方法有( )
  • 中国十大网站开发公司企业网站建设的要素有哪些
  • 网站防站做网站吉林
  • 嘉定区网站建设公司企业信息公示查询系统官网
  • 一个具体网站的seo优化产品介绍网站模板下载地址
  • 怎么做网站在网上能搜到你哈尔滨网站建立公司
  • 做家旅游的视频网站上海百度公司总部
  • 微信小程序公司网站怎么制作区块链平台定制开发
  • 网站资质优化ip地址域名解析
  • 如何搭建个人网站ps做网站首页怎么运用起来
  • 中小企业商务网站建设wordpress 安全加固
  • asp网站开发设计文档php建设网站怎么用
  • 服装公司网站建设需求分析报告seo搜索引擎优化实战
  • wordpress 扒站最近最新新闻
  • 手机wap网站开发与设计wordpress域名无法访问
  • 百度收录网站收费吗做网站用vs还是dw
  • 维度网络专业做网站嘉兴网站建设方案服务
  • 成品电影网站建设中国最顶尖设计师
  • 网站建设报价清单明细视频网站如何做营销