前言

我在做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通信数据黏包和数据丢失问题相关推荐

  1. 网络通信中TCP出现的黏包以及解决方法 socket 模拟黏包

    粘包问题概述 1.1  描述背景 采用TCP协议进行网络数据传送的软件设计中,普遍存在粘包问题.这主要是由于现代操作系统的网络传输机制所产生的.我们知道,网络通信采用的套接字(socket)技术,其实 ...

  2. Python攻城师的成长————网络编程(socket套接字、通信循环、链接循环、黏包问题)

    今日学习目标 学习什么是socket套接字,并依靠它去处理TCP协议等网络编程问题 文章目录 今日学习目标 学习内容 一. socket套接字 1.什么是socket 2.套接字发展史及分类 3.套接 ...

  3. 04、Netty学习笔记—(黏包半包及协议设计解析)

    文章目录 一.粘包与半包 1.1.现象分析 1.1.1.粘包.半包情况分析 1.1.2.滑动窗口.MSS限制.Nagle算法介绍 1.2.粘包.半包现象复现 1.2.1.粘包复现 1.2.2.半包复现 ...

  4. Python笔记 UDP 黏包

    前言: 上节课逃课了做的简单笔记复习见:  http://t.csdn.cn/5zbB6  这节课打算逃课,被我们的可爱的琪琪拦下了 目录   (目录没搞好将就一下下啦) UDP 小案例  : CMD ...

  5. Python学习日记(三十一) 黏包问题

    import subprocessres = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PI ...

  6. netty——黏包半包的解决方案、滑动窗口的概念

    黏包半包 滑动窗口 在深入理解黏包半包问题之前,先了解TCP的一个知识点--滑动窗口 我们都指定tcp是一种可靠的传输协议,这主要是因为在tcp中客户端给服务器端发送一条消息,要等待服务器端的应答,如 ...

  7. python中黏包问题的解决

    python中黏包问题的解决 1.在前面我们知道tcp容易产生黏包的问题,而udp不会产生黏包的问题,但是会产生丢包的问题,tcp应用的场景很多所以黏包问题必须要解决. 1.解决黏包问题第一种方法,我 ...

  8. python 心电处理包_python 黏包现象及其解决方案

    一.数据缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的 ...

  9. TCP与UDP协议、socket套接字编程、通信相关操作(cs架构软件)、TCP黏包问题及解决思路

    OSI七层协议 传输层 1.PORT协议:前面讲过 2.TCP协议与UDP协议:规定了数据传输所遵循的规则(数据传输能够遵循的协议有很多,TCP和UDP是较为常见的两个) TCP协议 基于TCP传输数 ...

最新文章

  1. windows7下安装MongoDB数据库
  2. java if 没有_java – 如何做一个决定没有if语句
  3. 利用circpedia 数据库探究circRNA的可变剪切
  4. 八种反应表示员工认可你
  5. 通用!Python保存一个对象的方式
  6. Scala中映射的语法(对应Java中的Map集合的定义)
  7. linux 主目录 配置文件
  8. break和continue-continue代码演练
  9. MSSQL 如何实现 MySQL 的 limit 查询方式【转存】
  10. 崩坏3服务器故障 临时维护,崩坏3 11.5游戏故障处理及补偿说明
  11. python 微信机器人教程_Python实现微信机器人的方法
  12. C#WebClient常见用法
  13. python把字典转换成json字符串
  14. 宽屏系统上播放幻灯片的设想
  15. Ubuntu 16.04错误:The update information is outdated this may be caused by network...的问题解决...
  16. 医疗系统流程软件测试用例,医疗管理系统案例测试用例.doc
  17. Debian 10上设置和配置证书颁发机构(CA)
  18. A065_运行前端_跨域_列表_删除
  19. 【NB-ioT模组】移远BC35-G 基于STM32连接电信云(附代码)
  20. C语言-概念-fscanf函数和fprintf函数

热门文章

  1. 路由协议与交换技术——OSPF
  2. 初出茅庐的小李第59篇博客之测试Modbus协议的继电器
  3. c++中三角函数的用法
  4. 一次性永久解决fake_useragent出现的异常: Maximum amount of retries reached
  5. springboot 集成 es基本使用
  6. Deep Forest(gcforest)通俗易懂理解
  7. 嵌入式软件开发经典面试题
  8. Instagram 爱好者必备:如何使用Inscarry浏览器扩展插件批量下载博主内容(照片视频)
  9. java window10 等64位系统调用32位dll库
  10. Battle over Cities