C#实现数据采集系统-Tcp粘包处理

Tcp通信中会出现粘包的情况,Tcp数据不是完全一收一发,而是会将接收到数据存在一个接收缓冲区,等到调用接收的把数据从缓冲区取出来

大部分时候,我们收发消息频率不高,看上去就是发一条,收一条,完整数据;理论上,接收一次,是会出现各种情况,

粘包的几种情况

  1. 接收不完整一条数据,多次接收
  2. 接收到2条(或者N条)连在一起的数据
  3. 接收到1条(或者N条)完整加一条不完整的数据

示例:

比如 modbustcp响应报文,我们查询三次,正常是收到三条下面这样报文

1

00 01 00 00 00 05 FF 01 02 0A 02

2

00 01 00 00 00 05 FF 01 02 0A 02

3

00 01 00 00 00 05 FF 01 02 0A 02

情况1:不完整报文

每条都分开几次收到

1

00 01 00 00 00 05

FF 01 02 0A 02

2

00 01 00 00

00 05 FF 01 02 0A 02

3

00 01 00 00 00 05

FF 01 02

0A 02

情况2:粘连

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot入门指南:留言板

一.留言板 1.输⼊留⾔信息,点击提交.后端把数据存储起来. 2.⻚⾯展⽰输⼊的表⽩墙的信息 规范: 1.写一个类MessageInfo对象,添加构造方法 虽然有快捷键,但是还是不够偷懒 项目添加Lombok。 Lombok是⼀个Java⼯具库,通过添加注…

Java从基础到高级特性及应用

Java,作为一门历史悠久且广泛应用的编程语言,自1995年问世以来,便以其跨平台性、面向对象、自动内存管理等特点,在软件开发领域占据了举足轻重的地位。从桌面应用到企业级系统,从移动开发到云计算服务,Java…

Spring Boot 与 MongoDB 整合指南

MongoDB MongoDB 是一种基于文档的NoSQL数据库,以其高性能、高可用性和易扩展性而著称。它使用 BSON(类似 JSON 的二进制格式)来存储数据,提供了灵活的数据模型,使得开发者可以更轻松地存储和查询复杂的数据结构。将M…

2024年钉钉杯大数据竞赛A题超详细解题思路+python代码手把手保姆级运行讲解视频+问题一代码分享

初赛A:烟草营销案例数据分析 AB题综合难度不大,难度可以视作0.4个国赛,题量可以看作0.35个国赛题量。适合于国赛前队伍练手,队伍内磨合。竞赛获奖率50%,八月底出成绩,参赛人数3000队左右。本文将为大家进行…

七夕特献:用代码编织爱情的浪漫,程序员的专属爱情证书生成器

文章目录 1. 背景介绍2. **为什么是爱情证书生成器?**3. **功能亮点**4. **技术实现**5. **如何获取?**6. 总结 1. 背景介绍 在这个数字化的时代,程序员们用代码编织世界,创造无限可能。七夕将至,一个充满古老传说和浪…

ElasticSearch核心之DSL查询语句实战

什么是DSL? Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的,所以你必…

Dockerfile指令详解和Docker操作命令

1.容器的特点:1)自包含(包括应用程序及其运行环境);2)可移植;3)相互隔离;4)轻量级。 2.docker成为容器的事实标准在于:1)在运行环境上…

【区块链】如何发行自己的加密货币到以太坊测试网络,remixIDE发行自己的数字货币

如何发行自己的加密货币到以太坊测试网络 环境 reminx在线编辑器:https://remix.ethereum.org/安装有小狐狸钱包插件(MetaMask) 如何部署代币? 创建一个名字叫做HelloMyToken.sol的文件。编写好智能合约,这边我要发…

文件包含漏洞--pyload

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter :用于在读取作用和写入文件时进行过滤和转换操作。 作用1:利用base64编码过滤器读取源码 通常利用文件包含执行php://filte…

Opencv学习项目4——手部跟踪

上一篇博客我们介绍了mediapipe库和对手部进行了检测,这次我们进行手部关键点的连线 代码实现 import cv2 import mediapipe as mpcap cv2.VideoCapture(1) mpHands mp.solutions.hands hands mpHands.Hands() mpDraw mp.solutions.drawing_utilswhile True:…

Flutter - 安卓一次打包不同包名的apk

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 有时为了方便测试,同一个app需要在一个手机上装两个,直接改包名的话比较麻烦,这时可以通过添加flavor进行多维度打包&#xff0c…

Spring Security面试三道题

针对Spring Security的面试题,从简单到困难,我可以给出以下三道题目: 1. Spring Security的基本功能是什么? 答案: Spring Security是Spring Framework的一部分,它提供了一种将安全层应用于Java应用程序的…

Flink入门(更新中)

目录 一、Flink 1.1 基本概念 1.1.1 flink简介 1.2 flink编程模版 1.3 常用概念 1.2.1 datastream 1.2.2 算子、Task 1.2.3 多流操作 1.2.6 时间语义 二、Flink编程实战(Java) 2.1 wordcount 一、Flink 1.1 基本概念 1.1.1 flink简介 1.图片介绍 性能&#xff1a…

OpenAI推出SearchGPT:革新搜索体验的新工具

引言 原文链接 在信息爆炸的时代,搜索引擎已经成为人们日常生活中不可或缺的工具。然而,传统的搜索引擎在理解复杂查询和提供准确答案方面仍有许多不足。为了解决这一问题,OpenAI与20240725推出了SearchGPT原型,将生成式AI与传统…

kafka源码阅读-ReplicaStateMachine(副本状态机)解析

概述 Kafka源码包含多个模块,每个模块负责不同的功能。以下是一些核心模块及其功能的概述: 服务端源码 :实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络…

Vue常用指令及其生命周期

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 目录 1.常用指令 1.1 v-bind 1.2 v-model 注意事项 1.3 v-on 注意事项 1.4 v-if / v-else-if / v-else 1.5 v-show 1.6 v-for 无索引 有索引 生命周期 定义 流程 1.常用指令 Vue当中的指令…

数据库水印算法三道题

针对数据库水印算法的面试题,由简单到困难,可以设计以下三道题目: 1. 基础理解题 题目:请简要解释什么是数据库水印算法,并说明其主要应用场景。 参考答案: 数据库水印算法是一种在数据库中嵌入隐蔽信息…

Red Hat 9.4 配置Yum镜像源

1. 虚拟机信息 镜像:rhel-server-9.4-x86_64-dvd.iso 系统版本:Red Hat 9.4 版本信息: cat /etc/redhat-release Red Hat Enterprise Linux release 9.4 (Plow)2. 配置文件 vim /etc/yum.repos.d/local.repo # 按i键,输入以下内…

Linux 普通用户启动Nginx使用80端口,小于1024的端口

让 Nginx 运行在 root 权限下: 在root用户下执行 cd /usr/local/nginx/sbin/ chown root nginx chmod us nginx或者:cd /usr/local/nginx/sbin/ sudo chown root nginx sudo chmod us nginx

远程项目调试-informer2020

informer2020 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting(原文)Informer 是一个基于Transformer的模型,是为了应对长依赖关系而开发的。本文的主要主题是序列预测。序列预测可以在任何具有不断变化的数据的地方…