udp心跳包调试

优点

  1. 简单直观:这种方式非常直接,易于实现和理解。

  2. 快速反馈:一旦发现问题,可以立即采取相应的措施,如尝试重新连接或者执行其他恢复操作。

注意事项

  1. 对实时性要求高:这种检测方式能够迅速发现网络问题,但并不能提供详细的网络性能数据。如果需要更详细的性能分析,可能需要使用其他更复杂的监控手段。

  2. 需要一定的网络流量:发送心跳包会占用一些网络带宽,这在高速网络上可能不是问题,但在带宽有限的情况下可能会有影响。

  3. 无法确定具体问题:它可以指示网络连接问题,但无法提供故障的具体原因。可能需要其他方式来确定问题的具体原因,如网络拥塞、丢包率等。因为心跳包指示监测网络连接的存活性。高延迟和轻度地丢包会影响网络性能和程序的响应时间,但是不会导致心跳包丢失。

  4. 不一定适用于所有场景:在某些复杂的网络环境下,可能需要结合其他监控手段,如实时延迟测量、丢包率监测等。

流程

  1. 服务器端发送心跳包

    • 在服务器端,以固定的时间间隔10ms一帧,发送一个特定类型的数据包到车端。
  2. 车端接收并回应心跳包

    • 在车端,你需要监听服务器端发送的数据包,一旦接收到心跳包,就立即回应服务器,以表示连接是活跃的,并在服务端控制台输出“车端已连接”。
  3. 设置超时阈值

    • 在服务器端,设置一个超时阈值,如果在50ms间内没有收到车端的回应,就认为连接出现问题。
  4. 处理超时情况

    • 当超时发生时,继续心跳包监测,心跳包监测不要停,把超时的信息打印到控制台并写入输出的heartbeat文档里。
  5. 记录状态和日志

    • 可以在服务器端记录每次心跳包的发送和接收情况,以便后续分析和追踪网络连接的稳定性。将日志输出至控制台,同时保存文档到当前目录,当程序开始运行时,会删掉或者说覆盖掉上次输出的文档heartbeat.txt。
  6. 可选的扩展

    • 根据具体的需求,你可以扩展心跳包的功能,比如添加更多的状态信息,或者结合其他监控手段来做更详细的网络状态检测。
  7. 唯一标识符:
    • 第一辆车ID:vehicle_1 。ip: 10.10.1.160
    • 第二辆车ID:vehicle_2 。ip: 10.10.1.170
    • 第三辆车ID:vehicle_3 。ip: 10.10.1.180
    • 控制台ip:10.10.1.189


要文档输出的内容,文档叫做timeDifferences.txt。

当程序开始运行时,会删掉或者说覆盖掉上次输出的文档timeDifferences.txt。

如果遥控台收到心跳包:

Received from “车的ID”: Heartbeat response,每一帧收到包的当前系统时间,收到当前帧与收到上一帧的时间差。

如果遥控台没收到:

Timeout - no heartbeat response from “车的ID”

例如:

Received from vehicle_1: Heartbeat response,2023-10-24 15:53:59.436,3

Timeout - no heartbeat response from vehicle_3


服务器端需要控制台输出 :

Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Timeout - no heartbeat response from vehicle_3
Timeout - no heartbeat response from vehicle_2
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Timeout - no heartbeat response from vehicle_3
Timeout - no heartbeat response from vehicle_2
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response
Received from vehicle_1: Heartbeat response

一般服务器端如何记录每次心跳包的发送和接收情况?

日志流处理流程

1、logging四大组件介绍
logging模块包括Logger,Handler,Filter,Formatter四个部分。

Logger 记录器,用于设置日志采集。
Handler 处理器,将日志记录发送至合适的路径。
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter 格式化器,指明了最终输出中日志的格式。
————————————————

将日志输出至控制台,同时保存文档到当前目录,当程序开始运行时,会删掉或者说覆盖掉上次输出的文档heartbeat.txt。

我的项目目前情况:

无人驾驶项目,服务端是遥控台,客户端是三台车。

我对心跳包监测程序的理解是,遥控台程序只要启动就开始udp发心跳包,并实时监控接收来自车端返回的心跳包,只要收到车端返回的心跳包就与该车建立连接,之后如果超时,就与该车断掉连接。车端一启动就开始监控自己端口是否收到心跳包,只要收到就回传心跳包。

我计划用三个代码文件,RemoveControlServer.cs,VehicleClient.cs,config.json。

分成两个项目分别放到遥控端和车端。

RemoveControlServer.cs和config.json放到遥控端。

VehicleClient.cs和config.json放到车端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Qt中使用UDP发送定时心跳包的步骤如下: 1. 创建QUdpSocket对象 在需要使用UDP的类中,创建QUdpSocket对象,如下所示: ```c++ QUdpSocket *socket = new QUdpSocket(); ``` 2. 绑定本地端口 使用`QUdpSocket::bind()`函数绑定本地端口,如下所示: ```c++ socket->bind(QHostAddress::Any, 1234); ``` 其中,`1234`是本地端口号。 3. 发送心跳包 使用`QUdpSocket::writeDatagram()`函数发送心跳包,如下所示: ```c++ QByteArray datagram = "heartbeat"; socket->writeDatagram(datagram, QHostAddress("127.0.0.1"), 5678); ``` 其中,`"heartbeat"`是心跳包的内容,`QHostAddress("127.0.0.1")`是目标IP地址,`5678`是目标端口号。 可以使用Qt的定时器`QTimer`来定时发送心跳包,如下所示: ```c++ QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, [=]() { QByteArray datagram = "heartbeat"; socket->writeDatagram(datagram, QHostAddress("127.0.0.1"), 5678); }); timer->start(1000); // 每隔1秒发送一次心跳包 ``` 可以根据需要调整心跳包发送的时间间隔。 4. 接收心跳包 在`QUdpSocket::readyRead()`信号的槽函数中,接收心跳包,如下所示: ```c++ void MyClass::onReadyRead() { while (socket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(socket->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); if (datagram == "heartbeat") { // 收到心跳包 } else { // 处理其他数据包 } } } ``` 这样,就可以在Qt中使用UDP发送定时心跳包了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DFminer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值