tcp通信数据黏包和数据丢失问题
前言:
我在做tcp通信项目,负责客户端,想要实现文件传输等功能,遇到了以下问题:1,数据黏包问题;2,数据丢失问题;
一,tcp数据黏包问题:
数据黏包是指tcp会对要传输的数据进行切割,然后再进行传输。比如,客户端发送两条json消息:{“type”:1,“pcmName”:test.raw,“isEnd”:1}和{“type”:4,“pcmName”:test2.raw,“isEnd”:0},但是服务器可能先收到{“type”:1,“pcmName”:test.raw, 再收到"isEnd":1{“type”:4,“pcmName”:test2.raw,“isEnd”:0}。
解决办法:1.添加数据头来说明本次发送消息的长度,如39{“type”:1,“pcmName”:test.raw,“isEnd”:1} ;2.接收端设置接收buffer,进行黏包处理,处理程序我会稍后贴出来;
一,tcp数据丢失问题:
现象:tcp通信过程,客户端发送了一条消息,但是windows端的服务器却没有收到。
原因:同事通过网络抓包确定windows主机收到了这条消息,但是windows提前向客户端发送了响应的ack信号并清空了相应的缓冲区(客户端收到此信号后就认为服务器接收成功,便不会再次发送本次数据),这导致应用层没有来得及处理。
解决办法:暂时没有找到解决办法,欢迎有好的建议的大牛们留言指导!
tcp通信数据黏包和数据丢失问题相关推荐
- 网络通信中TCP出现的黏包以及解决方法 socket 模拟黏包
粘包问题概述 1.1 描述背景 采用TCP协议进行网络数据传送的软件设计中,普遍存在粘包问题.这主要是由于现代操作系统的网络传输机制所产生的.我们知道,网络通信采用的套接字(socket)技术,其实 ...
- Python攻城师的成长————网络编程(socket套接字、通信循环、链接循环、黏包问题)
今日学习目标 学习什么是socket套接字,并依靠它去处理TCP协议等网络编程问题 文章目录 今日学习目标 学习内容 一. socket套接字 1.什么是socket 2.套接字发展史及分类 3.套接 ...
- 04、Netty学习笔记—(黏包半包及协议设计解析)
文章目录 一.粘包与半包 1.1.现象分析 1.1.1.粘包.半包情况分析 1.1.2.滑动窗口.MSS限制.Nagle算法介绍 1.2.粘包.半包现象复现 1.2.1.粘包复现 1.2.2.半包复现 ...
- Python笔记 UDP 黏包
前言: 上节课逃课了做的简单笔记复习见: http://t.csdn.cn/5zbB6 这节课打算逃课,被我们的可爱的琪琪拦下了 目录 (目录没搞好将就一下下啦) UDP 小案例 : CMD ...
- Python学习日记(三十一) 黏包问题
import subprocessres = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PI ...
- netty——黏包半包的解决方案、滑动窗口的概念
黏包半包 滑动窗口 在深入理解黏包半包问题之前,先了解TCP的一个知识点--滑动窗口 我们都指定tcp是一种可靠的传输协议,这主要是因为在tcp中客户端给服务器端发送一条消息,要等待服务器端的应答,如 ...
- python中黏包问题的解决
python中黏包问题的解决 1.在前面我们知道tcp容易产生黏包的问题,而udp不会产生黏包的问题,但是会产生丢包的问题,tcp应用的场景很多所以黏包问题必须要解决. 1.解决黏包问题第一种方法,我 ...
- python 心电处理包_python 黏包现象及其解决方案
一.数据缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的 ...
- TCP与UDP协议、socket套接字编程、通信相关操作(cs架构软件)、TCP黏包问题及解决思路
OSI七层协议 传输层 1.PORT协议:前面讲过 2.TCP协议与UDP协议:规定了数据传输所遵循的规则(数据传输能够遵循的协议有很多,TCP和UDP是较为常见的两个) TCP协议 基于TCP传输数 ...
最新文章
- windows7下安装MongoDB数据库
- java if 没有_java – 如何做一个决定没有if语句
- 利用circpedia 数据库探究circRNA的可变剪切
- 八种反应表示员工认可你
- 通用!Python保存一个对象的方式
- Scala中映射的语法(对应Java中的Map集合的定义)
- linux 主目录 配置文件
- break和continue-continue代码演练
- MSSQL 如何实现 MySQL 的 limit 查询方式【转存】
- 崩坏3服务器故障 临时维护,崩坏3 11.5游戏故障处理及补偿说明
- python 微信机器人教程_Python实现微信机器人的方法
- C#WebClient常见用法
- python把字典转换成json字符串
- 宽屏系统上播放幻灯片的设想
- Ubuntu 16.04错误:The update information is outdated this may be caused by network...的问题解决...
- 医疗系统流程软件测试用例,医疗管理系统案例测试用例.doc
- Debian 10上设置和配置证书颁发机构(CA)
- A065_运行前端_跨域_列表_删除
- 【NB-ioT模组】移远BC35-G 基于STM32连接电信云(附代码)
- C语言-概念-fscanf函数和fprintf函数
热门文章
- 路由协议与交换技术——OSPF
- 初出茅庐的小李第59篇博客之测试Modbus协议的继电器
- c++中三角函数的用法
- 一次性永久解决fake_useragent出现的异常: Maximum amount of retries reached
- springboot 集成 es基本使用
- Deep Forest(gcforest)通俗易懂理解
- 嵌入式软件开发经典面试题
- Instagram 爱好者必备:如何使用Inscarry浏览器扩展插件批量下载博主内容(照片视频)
- java window10 等64位系统调用32位dll库
- Battle over Cities