图片为测试每次发送长度 1024*1024 Byte数据的延时,每次间隔20毫秒,同一台电脑,WIN10系统,32G内存,24核心; 测试代码用QT自带例子修改。

结果:

TCP/IP 延时30毫秒左右,

DBUS 延时超过100毫秒,连续次数越多时差和延时越大;

DBUS 优点是保证每次收发成功,作为指令收发、短数据(512B)收发还是可以的,建议要间隔500毫秒以上;

TCP/IP 优点快,想保证收发数据,就要自己写协议了,下面的保证收发的简单代码。

突发数据 TCP/IP 一样比 DBUS 反应快。

// dbus 发送数据
void Controller::on_pushButton_clicked()
{QDBusVariant data;uint size =0;qlonglong time = QDateTime::currentMSecsSinceEpoch();QVariant m_variant;QByteArray m_ByteArray( 1024*1024, Qt::Uninitialized );m_variant.setValue( m_ByteArray );data.setVariant( m_variant );car->sendData( data, size, time );
}// dbus 接收数据
void  Car::sendData(const QDBusVariant &data, uint size, qlonglong time)
{qlonglong ti=QDateTime::currentMSecsSinceEpoch();static double count =0;static double tis=0; // 时差累计static double tiss=0; // 时差static double tism=0; // 最大时差tiss=(ti-time);tis+=tiss;count+=1;tism = tism<tiss? tiss:tism;qDebug()<<time<<ti<<tism<<tiss<<count<<(tis/count);
}// dbus xml 配置
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN""http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/com/trollech/examples/car"><interface name="org.example.Examples.CarInterface"><method name="accelerate"/><method name="decelerate"/><method name="turnLeft"/><method name="turnRight"/><method name="sendData"><arg name="data" type="v" direction="in"/><arg name="size" type="u" direction="in"/><arg name="time" type="x" direction="in"/></method><signal name="crashed"/></interface>
</node>
// TCP/IP 发送数据
void Server::sendData( )
{static bool ss=false;static QMutex Mutex;qApp->processEvents();//   if(ss)//      return ;//  ss=true;//  Mutex.lock();QByteArray block;QDataStream out(&block, QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_4_0);volatile uint size ;//=qrand() % fortunes.size();volatile qlonglong time;QByteArray m_ByteArray( 1024*1024, Qt::Uninitialized );size = qrand() % fortunes.size();time = QDateTime::currentMSecsSinceEpoch();uint ii=(m_ByteArray.size()+sizeof (qlonglong) +fortunes.at(size).size() );out <<ii<<time<<m_ByteArray<<fortunes.at(size);uint ic=block.size();block.insert(0,(char*)&ic,4);clientConnection->write(block);//   clientConnection->flush();//  Mutex.unlock();
//    ss=false;qDebug()<<ic<<ii<<time;
}// TCP/IP 接收数据
void Client::readFortune()
{loop_read:static uint si = 0;if(tcpSocket->bytesAvailable()<4){si = 0;return ;}if(si==0){tcpSocket->read( (char*)&si, 4);}if( tcpSocket->bytesAvailable()<si )return ;QString nextFortune;in.startTransaction();QByteArray m_ByteArray;uint size = 0;qlonglong time;in >> size>>time>>m_ByteArray>>nextFortune;si = 0;qlonglong ti=QDateTime::currentMSecsSinceEpoch();static double count =0;static double tis=0;static double tiss=0;static double tism=0;tiss=(ti-time);tis+=tiss;count+=1;tism = tism<tiss? tiss:tism;qDebug()<<time<<ti<<tism<<tiss<<count<<(tis/count)<<nextFortune;if(tcpSocket->bytesAvailable()>=4)goto loop_read;if (!in.commitTransaction())return;if (nextFortune == currentFortune) {QTimer::singleShot(0, this, &Client::requestNewFortune);return;}currentFortune = nextFortune;statusLabel->setText(currentFortune);getFortuneButton->setEnabled(true);
}

TCP/IP 与 DBUS 发送数据速度对比 进程间通信相关推荐

  1. java服务器tcpip协议,Java 实现TCP/IP协议的收发数据(服务端)

    功能如下: 注: 只有服务端,没有客户端,测试时采用第三方软件作为客户端的. 收发数据目前能正常收发数据,只是中文的会变成乱码显示. 采用Thread类实现一个收发数据的线程. 服务端代码: impo ...

  2. 硬件 TCP/IP 协议栈(SPI 发送命令字)

    目录 全硬件的TCP/IP 协议栈简介 以太网接入单片机方案 以太网接口芯片CH395Q 简介 以太网接口芯片 CH395Q 命令简介 以太网接口芯片CH395Q 寄存器配置与使用 移植CH395Q ...

  3. PRX 通过LSP实现浏览器Socks5/Tcp代理(从发送数据上着手)

    本文阐述针对市面上主流的浏览器 实现基于Socks5协议Tcp代理部分原理 它是浏览器翻墙的一种方法 这只是在LSP实现方式中一种类别 它具备很多不同方式 但在本文中不在累赘:此方法适应"C ...

  4. TCP/IP 广播的发送和接收

    发送端: 1: /* 2: * ==================================================================================== ...

  5. 使用c#实现tcp的连接和发送接收数据

    最近有个小项目,需要调用装置的录波数据,使用tcp模式,在这里整理了下如何使用c#实现tcp连接并实现发送接收数据,分享出来. 我这里使用的tcpclient ,终端是tcpserver模式. 首先自 ...

  6. ip fragmentation_为什么 TCP/IP 协议会拆分数据

    来自公众号:真没什么逻辑 链接:https://draveness.me/whys-the-design-tcp-segment-ip-packet/ 为什么这么设计(Why's THE Design ...

  7. TCP/IP协议栈之LwIP(二)---网络接口管理

    文章目录 一.网络接口层简介 1.1 物理层 1.2 逻辑链路控制层 1.3 以太网数据帧简介 二.网络接口管理 2.1 网络接口的描述 2.2 网络接口的操作 三.特殊的环回接口 更多文章 一.网络 ...

  8. 面试时,你被问到过 TCP/IP 协议吗?

    前言: 精通 TCP/IP,熟练使用 Socket 进行网路编程. 看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这 ...

  9. TCP/IP完整的一套基础介绍

    TCP/IP完整的一套基础介绍 TCP/IP应该是个协议集,根据OS的七层理论,TCP/IP分为四层.分别是应用,传输,Internet和网络界面. 我们一般说TCP在传输层,而IP在Internet ...

最新文章

  1. 10 个神奇的网站显示超强的 HTML5 技术
  2. 为SQL Server 2005启用对 4 GB 以上物理内存的支持
  3. 经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已~~主要是:ceil,floor,round,intval...
  4. 数字图像处理:第十三章 图象复原
  5. 数据库迁移_数据库迁移了解一下
  6. kali使用笔记本自带无线网卡_无线网卡?那是什么?
  7. POJ 1189 钉子和小球
  8. 愿望满足系统 1020 分支与循环控制
  9. linux python2.7安装教程_Linux RedHat下安装Python2.7开发环境
  10. Hadoop伪分布式集群的安装部署
  11. Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨
  12. 计算机硬件维修的步骤和方法,计算机硬件维护的具体方法
  13. 程序员用什么软件做笔记?
  14. 科研绘图图表类型种类繁多,本文告诉你如何选择!
  15. C语言数组比较相等memcmp,使用memcmp比较两个变量结果一定吗?
  16. 【Photoshop】——Ps基础学习笔记
  17. Python编程基础题(2-求一元二次方程的解Ⅱ)
  18. Hardware/Firmware/Software
  19. 店盈通:如何打造赚钱的拼多多店铺?
  20. Android Process管理(进程管理) 详解

热门文章

  1. 脚本(计算机术语)简介
  2. 关于多用户日历提醒功能的数据库设计
  3. [青少年CTF]-MISC WP(三)
  4. win10 cd到盘符及文件方法
  5. 虚拟机网络的拓扑结构
  6. 【数据库可视化工具】免费数据库可视化工具(免费)
  7. 在谷歌浏览器安装了Vue.js devtools发现不能用显示Vue.js is not detected
  8. matlab 处理眼动仪数据总结(一) :数据读取
  9. 虎牙java工资_【虎牙直播工资】用户运营待遇-看准网
  10. 树莓派之快速上手-变身个人Linux电脑