问题描述
- 关于tcp粘包问题,还望大神指点
-
看到说tcp粘包问题的可能原因之一是接收端未及时从缓冲区接收数据造成的。于是我想自己
测试一下,就写了一个程序。
服务端是这样的:等待客户端连接成功之后,先等待10秒钟,然后在while循环里用read读取
读取数据,每次读取四个字符。客户端是这样的:与服务端连接成功之后,立即用write函数循环发送4个字符,每次发送一个字符,共发送四次。
但是我发现服务端在10秒钟过后,并没有像我预期的直接把这四个字符一次性全部读取,而是循环读了四次,一次一个。。这是为什么?在服务端读取之前,客户端不是已经把四个字符都发过来了吗?服务端读取之前应该已经有四个字符了啊,为什么没有一次性读取,而是分了四次?
还请了解的能帮忙解答下。
解决方案
最近需要用TCP传输大量数据,但是中间出现了一些问题。
又问本人菜鸟,什么都是自己摸索!
其中就出现了粘包问题。
粘包问题可以看看下面的链接,下面讲解的很详细
粘包问题链接:点击打开链接
?
?
而我发送的大量数据包,每次发送的长度不相等。
微软对TCP发送的数据优化算法还是有用的,可以不需要设置“发送不延迟”。
所以就在每次发送数据包的开头定义一个定长大小的结构体,里面描述一些......
答案就在这里:TCP粘包问题
解决方案二:
你可以参考这么做:
先发送发送数据包的长度和包编号,然后接收端以此长度开启一个接收空间,编号作为组包顺序,就开始传输真正的数据,客户端若没接受到该长度的数据,则继续等待,有的写入保存
时间: 2025-01-25 07:12:10