使用socket的tcp方式通信接收数据的问题

sdwalnut1 2007-04-27 05:17:16
在使用socket的tcp方式接收数据时,发现有些接收到的数据是发送端两次消息内容合并后的结果。哪位知道产生这种情况的原因是什么?tcp方式是否会经常导致该问题?
...全文
225 点赞 收藏 7
写回复
7 条回复
vince_cici 2007年05月05日
感觉都说的对

我认为也可以

自定义一个 语句终止符!~代表一块信息的结束
回复 点赞
wmhnq 2007年05月02日
包头(4byte)+包长度+保留位(4)+数据(不定)

////按照这个办法到是不错,不过传输的性能要下降很多倍。
回复 点赞
dreamskyashion 2007年04月30日
TCP是流式传输,接收的时候当然不知道要可能会接收到多少数据,再说包头和数据是同时发送的又不是分开发送
回复 点赞
redex 2007年04月30日
to 楼上:

"在接收数据的时候首先判断是否接收到了 大于 包头的数据", 你接收的时候不是先接收包头长的数据, 再接收包体?? 那么如何会"收到了大于包头的数据"???
回复 点赞
dreamskyashion 2007年04月28日
同意楼上的观点。 在接收数据的时候首先判断是否接收到了 大于 包头的数据,如果是则将该数据转换为包头,分析包头中数据长度字段,然后判断是否该包已经完全到达如果没有则继续接收直到收齐为之

另外请用 setsockopt 将 socket的TCP_NODELAY 设为TRUE
回复 点赞
netsys2 2007年04月28日
这是很正常的,TCP是个流协议,中间的分割你必须自己做!

你在设计协议时,应该确定帧格式,下面是常用的:


包头(4byte)+包长度+保留位(4)+数据(不定)

接收数据先看包头,然后根据包长度读数据,这样不管几个包发过来,你都能正确解开!
回复 点赞
xiaozhumaomao 2007年04月27日
你每次发送的时候
用一次 flush() 方法将缓冲区清空
回复 点赞
发动态
发帖子
通信技术
创建于2007-08-27

2781

社区成员

2.8w+

社区内容

通信技术相关讨论
社区公告
暂无公告