求问Qt中如何对通过UDP的ReadDatagram()函数收到的帧进行操作 20C

新手求问,在QT中我用UDP进行收数,接收的是16进制,发端发送的是一组类似于FF 01 0B 11 22 33的帧,通过udp_socket_rx->readDatagram(datagram.data(),datagram.size());这个函数接收到的datagram直接打印出来是ASCII码的形式的字符串,我想在接收端队帧进行操作,比如寻找帧头0XFF然后再对后面的帧进行操作,这个寻找的判断该如何用代码表示

0

4个回答

就是假设判断的语句是if(temp[0]==0xFF) 这个temp[0]应该是如何通过datagram转换过来的呢?

0
0

datagram 类型是 QByteArray ,可以转化为各种数据类型,具体可以参考 转化方法的源码实现

0

你可以定义个static QByteArray,每收到一个字节就append到最后,然后遍历这个数组就能找到帧头了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
从Qt的图片文件传输来看Qt 中UDP的收发消息writeDatagram和readDatagram
上一篇博客写的是利用Qt的UDP协议传输图片文件。但是有一些问题,比如说还得自己新建一个文件夹存放图片等等。项目想实现的功能是在一个Qt工程的label打开图片文件,另一端就能显示同样的图片,所以加以改进。不需要把接收到的图片写入文件夹中,而是直接把数据都读到picBuffer里面,最后统一显示在label上面。        过程特别曲折,现在也不敢保证完全明白,还望有明白的高人指点。
QT使用UDP方式传输文件的关键代码
QT中使用UDP传输的核心代码: void Sender::sendData() { if (!file.atEnd()) { QByteArray line = file.read(8000); udpSocket->writeDatagram( line , QHostAddress("192.168.0.175"),7755); i++; qDebug() << "send over!
QT类学习系列(4)- 01*-对QUdpSocket中的过程分析
转自:https://wuyuans.com/2013/03/qt-socket/   发送方: writeDatagram方法中的成员分析: qint64 QUdpSocket::writeDatagram ( const char * data,qint64 size, const QHostAddress & address, quint16 port ) 其中的第二个参数
QT下udpsocket一段时间接收不到数据的问题
最近在做一个项目  采用UDPSOCKET进行数据的传输,发现在一段时间后,UDP接收不到数据了,找了很久的资料 才发现解决该问题的方法,估计不是最好的。代码如下: #include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : Q
[Qt学习篇]UDP编程
QUdpSocket提供了UDP套接字API,用来接收和发送UDP数据报。 QUdpSocket类最通用的使用方式是:用bind()函数绑定一个IP地址和端口Port,然后调用writeDatagram()和readDatagram()函数传输数据。如果要使用QIODevice中的read(), readLine(), write()等函数,必须首先调用connectToHost()函数,直接建立一个和对方的连接。
关于Qt中Udp通信过程中的接收数据部分注意
Communication::Communication(Global *a) { varcom=a; msg=new QMessageBox(); udpclient=new QUdpSocket(this); // QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
UDP协议详解与QUdpSocket编程
UDP报头由4个域组成,其中每个域各占用2个字节,具体如下: 端口号 ,目标端口号 ,数据报长度 ,校验值  UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注
QT udp自动获取对方ip和端口号
Tip: 用printf打印QString方法如下: QString output printf(&quot;%s\n&quot;,output.toStdString().data()); 正文:Qt自动获取对方ip和端口号 QHostAddress targetaddr;//ip quint16 targetport;//端口号 while (clientudp-&amp;gt;hasPend...
Qt之局域网UDP通讯
创建两个QUdpSocket对象,一个用来发送数据,一个用来接收数据。发送数据的QUdpSocket需要绑定本机IP和端口,要不然是收不到数据的。 界面最上面的IP输入框是发送到的对方IP地址。中间是显示收到数据。下面的输入框是用来发送数据的。 在虚拟机中和本机通讯: Qt没有IP输入框,需要自己去封装,也可以网上下载。我前面也发了一个自己封装的IP输入框,功能大部分和Windows
QT UDP Socket数据接收与解析
主题 概要 QT UDP Socket 编辑 时间 新建 20180331 序号 参考资料 1 https://doc.qt.io/qt-5/qudpsocket.html 做直升机航电系统仿真,类似GPS导航接收机的按钮很多,显示的仪表也很多。 按钮的状态是通过底层程序通过U...
Qt入门学习小记——UDP收发解决汉字乱码问题
Qt入门学习小记——UDP收发解决汉字乱码问题。在看霍亚飞的Qt入门教程时,使用Qt5.4做简单的通讯实验,在显示汉字方面发现了问题,在网上找到的几种方法都是在发送前将Qstring转化成Latin1放入QByteArray中,不过在接收端都显示??乱码,似乎在Qt5.4中并不适用。
qt中编写udp实践
今天初学udp传输协议,先了解了一下DUP的内容,UDP是一个用户数据报协议,是一个传输层的协议。其传输速度快。但是传输的质量有时不好。今天我学习了一下udp需要用qt来进行的操作,下面介绍一下我遇到的问题和解决方法首先我建立了一个qt的项目,发现出现问题,widget不是类或命名空间,经过排查发现是是因为这个widget应该是自己创建的窗口的名字而不是同意的widget但是在添加头文件是遇到问题...
Qt中udp实现中文字符串的传输
Qt实现的udp局域网聊天里面困扰小生多时的还是中文文本的传输这一环节,多方寻找,浪迹江湖各处,最后一一解决。其中的一些问题着实需细心对待。 udp传输中文文本字符串首先注意的是不能传输QString类的中文字符,因为它只是一个指针。如果写入,传入的只是一串地址并没有具体意义。 我们在传入中文字符串的时候要用到char类型的帮助才能达到目的。 在我写的发送和接受的程序里面我定义了一个info
QT 通过UDP广播获取网络中所有设备信息
【客户端:(代码顺序按照图片中顺序)】QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets QT += network TARGET = UDPTestClient TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS +...
Qt通过UDP传图片,实现自定义分包和组包
一.包头结构体 //包头 struct PackageHeader { //包头大小(sizeof(PackageHeader)) unsigned int uTransPackageHdrSize; //当前包头的大小(sizeof(PackageHeader)+当前数据包长度) unsigned int uTransPackageSize; //数
QT学习笔记17Socket通信
Qt中提供的所有的Socket类都是非阻塞的。 Qt中常用的用于socket通信的套接字类: QTcpServer 用于TCP/IP通信, 作为服务器端套接字使用 QTcpSocket 用于TCP/IP通信,作为客户端套接字使用。 QUdpSocket 用于UDP通信,服务器,客户端均使用此套接字。 1 TCP/IP 在Qt中实现TCP/IP服务器端通信的流程: 创建套接字
QThread监听UDP报文实践
参考 线程参考 https://blog.csdn.net/jinhucheng/article/details/70371724 udp参考 https://blog.csdn.net/weixin_42216430/article/details/80780297 代码 #ifndef UDPRECEIVER_H #define UDPRECEIVER_H #include &amp;amp;amp;amp;lt;QObj...
QT学习笔记 -->接受一帧数据并不是一次接受完,分多次接受
一帧数据多次接受处理方法在使用Qt自带的串口QtSerialPort时。其发送过来的数据需要进行接受,则需要连接一个相应的槽函数: //连接槽函数,当有串口数据来时,进入槽函数。 connect(serial,SIGNAL(readyRead()),this,SLOT(Read_Data()));其中只要是串口中有数据,便会执行Read_Data()槽函数,并不是说一帧数据发送完了,才执行
自学QT之UDP发送数据
例子采用的是单播方式,其他组播和广播也都是一样的代码,稍微修改一下。 首先要写一个发送端。发送端比较简单,只需要几行代码: 当然哦,因为要用到网络,所以这里你需要在pro文件中加入QT+=network,别忘了,执行以下qmake撒,不然是不行的。 main.cpp的代码 #include #include #include #include int main(int a
Qt 如何发送和接收UDP数据报
在Qt4中,提供了QUdpSocket类,由于udp不像tcp,没有连接的概念,所以就没有QUdpServer,监听也是用同一个类,用法如下 #include &amp;amp;amp;lt;QUdpSocket&amp;amp;amp;gt; int main() { QUdpSocket *socket = new QUdpSocket; socket-&amp;amp;amp;gt;writeDatagram(QByteArray(&amp;amp;quot;Hello&amp;amp;quot
Qt创建多线程接收惯导UDP数据
项目需求,要用Qt接收惯导数据,数据采用UDP传输,在Qt中提供了QUdpSocket类来进行UDP数据报(datagrams)的发送和接收。这里我们还要了解一个名词Socket,也就是常说的“套接字”。 Socket简单地说,就是一个IP地址加一个port端口。因为我们要传输数据,就要知道往哪个机子上传送,而IP地址确定了一台主机,但是这台机子上可能运行着各种各样的网络程序,我们要往哪个程序中发
QT中UDPSocket丢包问题
Qt中的QUdpSocket发生严重丢包现象,在Linux下使用while死循环接收来解决,但存在CPU占用率太高的问题。
QT 通过UDP广播获取网络中所有设备ip地址
说明:源码下载:提供源码下载地址,源码使用说明,先在需要获取IP地址的主机上运行server端程序,然后在需要搜索主机的Pc上运行client端程序本文是QT版本,有时候需要搜索网络中的设备,机器,服务器等,这就要要用到UDP广播的方式,发送广播命令,广播给网络中的每一个主机,该主机搜到广播命令后,立刻发送给请求端自己的设备信息,这里以IP信息为例子。思路在每一个设备中部署sever端程序进行监控,
Qt中使用UDP的方式传送图片
1.首先将图片转换成QByteArrayQPixmap pixmap = QPixmap::fromImage(image);QByteArray bytes;QBuffer buff(&amp;amp;bytes);buff.open(QIODevice::ReadWrite);pixmap.save(&amp;amp;buff, &quot;JPG&quot;);2.定义数据包包头结构体struct ImageFrameHead...
QT UDP传结构体数据
发送端: 头文件中建立结构体state: #pragma pack(1) struct state{ int order; int speed; double longitude; double latitude; }; #pragma pack() 实现cpp文件: state data; data.order=1; data.speed=50; d...
Qt使用udp发送消息
首先介绍一下,TCP/IP其实是一个四层协议系统,主要包括链路层,网络层,传输层,应用层。udp属于传输层内容。         以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个
Qt实现UDP广播简例
Qt的UDP广播简例
1.4 数据的接收 之 UDP解析
​ 对于UDP协议的处理是从udp_handler()函数开始的。我们知道,这个函数是从tcp_tick()调过来的,其参数就是要处理的数据指针。此时,我们已经可以确定这个数据包使用的是UDP协议。接下来就是判断一下该数据包是否是发送给我们的包。很简单,我们仅仅处理我们感兴趣的包就可以了。其中,包括广播包和明确发给我们的数据包(当然,还应该有我们加入的组播组的数据包,但是WatTCP并不支持组播
Qt网络编程之QUdpSocket实例(三)
设想有如下场景:若干的客户端与服务器端建立连接,建立连接后,服务器端随机发送字符串给客户端,客户端打印输出。该节案例使用UDP编程。 服务器端 头文件 #pragma once ////////////////////////////////////////////////////////////////////////// //UDP服务器端 #include &amp;amp;lt;QObject&amp;amp;gt; ...
Qt编译错误:底层由于接收到操作系统的信号而停止
double vec = ((m_game-&amp;gt;startpos-endPos)*4).length(); /* char Info[24]; sprintf(Info,&quot;%0.2f&quot;,sqrt(vec)); m_lable-&amp;gt;setText(QString(Info));*/ double vec = ((m_game-&amp;gt;startpos-en...
UDP报文传输的差错控制
了解TCP/IP协议的人都知道TCP协议是可靠传输的,而UDP协议是不可靠传输。“可靠传输”大家基本上可以达成共识,就是协议确保数据正确到达目标机器;但是“不可靠传输”可能就存在争议了,到底是不保证数据到达?还是不保证数据正确?又或者是两者都不保证?
qt中QUdpSocket的readyRead信号不被触发
       在之前的qt控制台程序udp编程中始终面临着一个问题,就是socket的readRead信号绑定了类中的某个接收函数,但是始终不会被自动触发,只能通过手动进行触发,因为不知道何时会接收到消息,所以手动触发的方法不可取。分析之后,可能由于下面三种问题引起的不能触发: socket的构造方法不对 main函数启动的顺序不对 焦点问题       经过几天的尝试,发现是由第三种情况引...
sock使用UDP协议进行广播发送数据
使用ifconfig命令查看自己的广播地址: wlp3s0b1 Link encap:以太网 硬件地址 inet 地址:192.168.1.102 广播:192.168.1.255 掩码:255.255.255.0 可以看到主机的广播地址是192.168.1.255 编写UDP服务器程序: #include &amp;l...
以太网帧、IP 帧、UDP/TCP帧、http 报文结构解析
我们从 OSI/RM 参考模型入手,来看 OSI/RM 七层模型中的每一层数据帧结构。 一 OSI/RM 结构 OSI 是不同制造商的设备和应用软件在网络中进行通信的标准,此模型已经成为计算机间和网络间进行通信的主要结构模型, 目前使用的大多数网络通信协议的结构都是基于 OSI 模型的。OSI 包括体系结构、服务定义和协议规范三级抽象。OSI 体系结构定义了一个七层模型用于进行进程间的通信,并...
Wireshark 分析 UDP 数据帧实例
先说个人的一点见解:真实地去分析一个协议的数据帧,还是对照着“TCP/IP详解卷1:协议”上的四层模型更加合适(四层模型见这儿:点击打开链接),按照 OSI 7层模型的话有些东西对应起来会比较困惑。
在QT下的基于UDP协议的消息收发程序
前段时间学了Linux高级编程,其中网络编程部分中有一个基于Udp/Tcp的聊天编程给我感觉蛮有趣的,但是只能在命令行收发信息还是显得单调,远远没有图形界面的方便和美观。有没有办法做的漂亮一点呢?强大又低调的QT可以做到这一点。 QT为提供了强大的网络编程接口类供我们使用。QAbstractSocket类提供所有的socket(套接口)类型的公共功能。QAbstractSocket是QUdpSo
基于QT对UDP类的封装
main.cpp#include &amp;lt;iostream&amp;gt; #include &quot;udp.h&quot; using namespace std; int main(int argc, char *args[]) //argc表示接收的命令个数,args[]传入的命令内容 { cout&amp;lt;&amp;lt; &quot;argc===&quot; &amp;lt;&amp;lt; argc &amp;lt;&amp;lt;endl; ...
qt udp程序,在Windows中可以正常收取数据,到了Ubuntu中无法正常收取数据问题解决办法
本人在开发qt udp程序的过程中遇到一个很奇怪的问题,同样的程序,在windows中能够正常收取数据,换到Ubuntu中就不行了,问题困扰了两天,后来终于找到了解决办法,问题如下: 一开始使用如下方法: qLidarSocket = new QUdpSocket(this); QHostAddress serverAddress = QHostAddress("192.168.1
C++ QT中 通过UDP广播获取网络中所有设备ip地址
代码说明参考博客:http://blog.csdn.net/dxzysk/article/details/55511269 本文是C++的QT版本,有时候需要搜索网络中的设备,机器,服务器等,这就要要用到UDP广播的方式,发送广播命令,广播给网络中的每一个主机,该主机搜到广播命令后,立刻发送给请求端自己的设备信息,这里以IP信息为例子。
UDP传送和接受结构体结构的消息--Qt
    最近的项目用到UDP接收结构体,以为和普通的传送字符串的一样,没想到我还是太天真。要能够接收或者传送结构体,一个很重要的知识点是:结构体字节对齐。废话不多说,小课堂开始了! 结构体对齐 参考https://www.cnblogs.com/codingnutter/p/5634482.html     许多计算机系统对基本数据类型合法的进行了一些限制,要求某种类型对象的地址必须是某个值...
文章热词 设计制作学习 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 通过对游戏开发的学习 通过对大数据的学习