我超级郁闷的,别人用TCP经常会粘包,我的TCP不会粘包,反而会断包!!
是这样的,最近在做一个项目,需要用到socket发送文件,我在每次发送的时候定义了发送的包的总个数,包当前ID,最后包的大小,可是在发送的过程中,经常出现了发送失败,结果我对发送缓冲区的数据,和接收缓冲区的数据打印出来,发现,发送方的数据正常,但是接收方却把一个发送包拆成了两次接收,就变成了下面这样
发送方数据:
185,88,141,134,95,212,80,26,167,6,29,34,21,243,100,7,63,250,100,65,194,102,162,63,222,255,224,214,173,222,179,92,121,103,115,169,248,136,164,108,115,224,225,231,224,190,124,70,70,212,143,144,81,132,225,133,146,121,101,218,149,71,202,174,84,
接收方第一个包的数据:
185,88,141,134,95,212,80,26,167,6,29,34,21,243,100,7,63,250,100,65,194,102,162,63,222,255,224,214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
接收方第二个包的数据:
173,222,179,92,121,103,115,169,248,136,164,108,115,224,225,231,224,190,124,70,70,212,143,144,81,132,225,133,146,121,101,218,149,71,202,174,84
可是我明明每个接收方的缓冲区都设定了大小,为什么会出现以上这种情况??
谁懂的麻烦告诉我一下
是这样的,最近在做一个项目,需要用到socket发送文件,我在每次发送的时候定义了发送的包的总个数,包当前ID,最后包的大小,可是在发送的过程中,经常出现了发送失败,结果我对发送缓冲区的数据,和接收缓冲区的数据打印出来,发现,发送方的数据正常,但是接收方却把一个发送包拆成了两次接收,就变成了下面这样
发送方数据:
185,88,141,134,95,212,80,26,167,6,29,34,21,243,100,7,63,250,100,65,194,102,162,63,222,255,224,214,173,222,179,92,121,103,115,169,248,136,164,108,115,224,225,231,224,190,124,70,70,212,143,144,81,132,225,133,146,121,101,218,149,71,202,174,84,
接收方第一个包的数据:
185,88,141,134,95,212,80,26,167,6,29,34,21,243,100,7,63,250,100,65,194,102,162,63,222,255,224,214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
接收方第二个包的数据:
173,222,179,92,121,103,115,169,248,136,164,108,115,224,225,231,224,190,124,70,70,212,143,144,81,132,225,133,146,121,101,218,149,71,202,174,84
可是我明明每个接收方的缓冲区都设定了大小,为什么会出现以上这种情况??
谁懂的麻烦告诉我一下
这是什么逻辑呢?如果你设置buffer为10240个字节,那么就意味着一次receive最多1020个字节,更多的字节需要再执行receive。这丝毫也没有说明它不会是10239、4096或者甚至只有120个字节啊。“拆成了两次接收”,就是分10次又怎么呢?不是都收到了嘛!
还等什么答案哟
答案不是很明了了吗?
TCP是一种流协议
流嘛
可以慢慢的流
也可以流得快点
也可以分两次流
也可以三次合成一次流
看情况看心情
所以嘛
TCP有粘包的情况
但没有断包的情况
断包,只是没流到而已
而
UDP才是以包的形式发
UDP没有粘包只有丢包
比如
你一次发送1024M的数据
发100次都可能发不出说错了喷我吧