目录1、TCP复现2、解决方法1、TCP复现通过socket通信的数据的接收和发送是无关的,read()函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()和write()的执行次数有可能不相同。例如,write()重复执行了三次,每次都发送字符"abc",那么目标机器上的read()可能分三次接收,每次都接收"abc";也可能分两次接收,第一次接收“abcab”,
# Java TCP和拆处理 在网络编程领域,TCP协议由于其可靠性和有序性被广泛应用。然而,这也导致了一个问题——和拆现象。为了更好地理解这些概念,我们将探讨其原因、影响以及如何在Java中进行处理。 ## 与拆的定义 ### 是指多个数据包在传输过程中被合并成一个数据。此时,接收方无法确定数据的边界,导致数据解读错误。 ### 拆问题则是由于一个
原创 2024-10-27 05:05:26
221阅读
只可能出现在流传输中UDP是不会出现,因为他是基于报文的,也就是说UDP发送端调用几次write,接收端必须调用相同次数的read读完,他每次最多只能读取一个报文,报文与报文是不会合并的,如果缓冲区小于报文长度,则多出来的部分会被丢掉。TCP不同了,TCP是基于流传输的,他会合并消息,并且以不确定方式合并,这样就需要我们去处理了。TCP造成主要原因:    1、
转载 2023-07-15 13:22:43
188阅读
包产生的原因 网络通信方式主要有两种:TCP与UDP。 UDP是基于报文传输的,发送几次Write(),接收端就会用几次Read(),每次读取一个报文,报文间不合并,多余缓冲区的报文会丢弃。TCP是基于数据流传输的,Write()和Read()的次数不固定,报文间会以随机的方式合并,这就需要在接收 ...
转载 2021-07-28 23:03:00
305阅读
一般所谓的TCP是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致的存在。处理的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。在应用中处理的基础方法主要有两种分别是以4节字描
转载 2023-11-10 11:10:30
96阅读
这两天看csdn有一些关于socket,socket缓冲区设置的问题。发现自己不是非常清楚,所以查资料了解记录一下: 一两个简单概念长连接与短连接:1.长连接     Client方与Server方先建立通讯连接。连接建立后不断开。 然后再进行报文发送和接收。2.短连接     Client方与Ser
转载 2023-12-20 06:07:22
127阅读
最近发现自己对于TCP通讯中的黏问题还有疑问,查阅资料做下总结。 一、TCP问题 TCP问题是因为发送方把若干数据发送,接收方收到数据时候黏在一,从接受缓冲区来看,后一的数据黏在前一的尾部。 二、黏出现的原因 TCP问题主要出现在两个方面 (1)发送方问题 首先TCP会默认使用Nagle算法,Nagle算法主要做两件事。 第一:上一分组得到确认,才会发送下一分组。
转载 2023-11-24 19:03:02
48阅读
针对三种不同的现象,分包算法分别采取了相应的解决办法。其基本思路是首先将待处理的接收数据流(长度设为m)强行转换成预定的结构数据形式,并从中取出结构数据长度字段,而后根据n计算得到第一数据长度。1)若n<m,则表明数据流包含多数据,从其头部截取n个字节存入临时缓冲区,剩余部分数据依此继续循环处理,直至结束。2)若n=m,则表明数据流内容恰好是一完整结构数据,直接将其存入临时缓冲区即可
转载 2023-09-26 09:44:02
122阅读
大家都知道tcp的,比如你用1m去接收,它正常的单条数据是220,那么就会产生 5 到 6 个体,我们只能打标识,用结束字符去分割处理。我写的一个类,仅供大家参考。 public void Split(byte[] receiveData){ //整体的标识 List<int> end_i
IT
原创 2021-07-28 15:00:09
142阅读
1.什么是? “”这个说法已经被诟病很久了,既然坊间流传这个说法咱们就沿用吧,关于这个问题比较准确的解释可以参考下面几点: TCP是流传输协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议 TCP没有的概念,它只负责传输字节序列,UDP是面向数据报的协议,所以不存在拆问题 应 ...
转载 2021-09-17 11:03:00
448阅读
2评论
在使用 TCP 协议进行网络传输时,和拆现象是一个常见的问题。在 Java 应用程序中,尤其是服务器与客户端通信时,处理显得尤为重要。下面将详细探讨如何处理 TCP 问题,分析其产生的原因,并提供解决方案和优化措施。 ### 问题背景 在现代网络应用中,TCP 协议因其可靠性而广泛应用。然而,在数据传输中,由于 TCP 的特性,多个数据可能在传输过程中出现现象。这种现象会导致
原创 5月前
19阅读
一、1、定义指发送方发送的若干数据包在接收方接收时成一团,从接收缓冲区看,后一数据的头紧接着前一数据的尾。2、产生的原因(1)发送方的原因TCP默认使用 Nagle 算法,而 Nagle 算法主要做如下两件事情:只有上一个分组得到确认,才发送下一个分组。收集多个小分组,在一个确认到来时一起发送。Nagle 算法造成了发送方可能存在现象。(2)接收端的原因接收端接收到分组时,应用层并不
Netty实践(二):TCP问题-学海无涯 心境无限-51CTO博客 http://blog.51cto.com/zhangfengzhe/1890577 2017-01-09 21:56:06 什么是TCP? 在网络通信中,数据在底层都是以字节流形式在流动,那么发送方和接受方理
转载 2018-11-13 16:17:00
239阅读
2评论
一、分析 作者本人在写一个FTP项目时,在文件的上传下载模块遇到了问题。在网上找了一些解决办法,感觉对我情况都不好用,因此自己想了个比较好的解决办法,提供参考 1.1 现象 在客户端与服务器使用tcp通讯中,不同于http短连接,长链接在发送接收数据过程中,多个数据沾粘在一起,导致数据混乱的情况。 1.2 原因分析 发送方: TC
转载 2024-01-03 15:57:08
63阅读
# 如何实现 Java TCP处理 ## 一、流程概述 下面是实现 Java TCP处理的步骤: ```mermaid gantt title TCP处理流程 section 拆 接受数据 :done, a1, 2022-01-01, 1d 处理逻辑 :done, a2, after a1,
原创 2024-02-26 06:03:14
63阅读
本节导读什么是现象发生的两种情况解决现象的办法                   一 什么是现象须知:只有TCP现象,UDP永远不会不一定会发生,如果发生了:1.可能是在客户端已经了,2.客户端没有,可能是在服务端现象:TCP是指发送方发送的若干数据
转载 2023-10-23 16:59:24
361阅读
处理的方式是在消息头部加上消息总长度。采用该格式:消息总长度len(4字节)+命令字commandId(4字节)+消息msg。
转载 2022-06-13 17:18:25
360阅读
# Python TCP分包处理 在网络编程中,TCP协议是一种可靠的传输协议。但是在实际开发中,由于网络传输的特性,会出现TCP分包和的问题。TCP分包是指发送方发送的数据被分割成多个进行发送,而接收方接收的数据可能不完整;TCP是指发送方发送的多个消息粘在一起发送,而接收方接收到的数据可能是多个消息粘在一起。对于这些问题,我们需要进行合适的处理来保证数据的完整性和正确性。 #
原创 2024-04-22 04:41:44
146阅读
包举例比如发送端要往接收端发送2个数据 1.收到2个数据,没发送拆情况; 2.收到1个数据TCP把2个数据包合成1个发送给接收端了,这样应用层不能处理合成1个的两个数据,应用层不知道两个数据之间的分隔在哪,所以很难处理,这是问题; 3.收到2个数据,但1个数据包产生了(发送端的1个半数据),另1个数据包产生了拆(只有发送端中1个数据的半个),这样应用层
:发生原因:当调用send的时候,数据并不是即时发给客户端的。而是放到了系统的socket发送缓冲区里,等缓冲区满了、或者数据等待超时了,数据才会发送,所以有时候发送太快的话,前一份数据还没有传给客户端,那么这份数据和上一份数据一起发给客户端的时候就会造成“” 。 解决方案:解决根源的思想是避免不同段的数据一起发送。方案1:前一段数据send完后,等待一段时间再send第二段数据。缺点:
转载 2023-10-09 12:38:43
184阅读
  • 1
  • 2
  • 3
  • 4
  • 5