数据包接收和发送问题

yphuan 2005-01-13 11:20:48
在使用tcp连接发送数据包时,我连续调用send,发送不同的数据,可是在接收的时候,如果两次发送的数据包不是很大,则接收时,将一起接收,即一次recv动作将把两次send的数据全都接收进来,也可能是两次的数据被一次send出去,请问如何才能使得,每一次recv就接收一次send的数据,无论数据包有多小?谢谢!
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fisker0303 2005-01-14
  • 打赏
  • 举报
回复
严重同意楼上的。
是的,粘包问题。
可以去网上搜一下。
aspvbjava 2005-01-14
  • 打赏
  • 举报
回复
tcp没有包边界的概念,数据是一个字节一个字节发送的,只能你自己分析收到的数据
可以发送一个结构,传送数据包的长度
struct datastruct{
char *flag;
int len;
}
或者采用udp
99263 2005-01-14
  • 打赏
  • 举报
回复
设两个缓冲区,一个为数据缓冲区,一个为临时缓冲区,接收数据时,将接收到的数据保存到临时缓冲区中,然后拷贝到数据缓冲区中,然后分析数据缓冲区中的内容,不过你得定义数据包头和包尾,有时可能还剩半个包,就先放在数据缓冲区中,下次会再收到另一个半包的数据。
newshute 2005-01-14
  • 打赏
  • 举报
回复
传送时指定传输的数据大小,接收时不管接收到多少都只取你要求的大小。或者看一下异步传输...
sharkhuang 2005-01-14
  • 打赏
  • 举报
回复
粘包问题。解决方法之一:甚至socket为不缓存直接发送!
二:发送和接受头里面有长度的校验
yphuan 2005-01-14
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1203,这个是带图的。
HHunter 2005-01-14
  • 打赏
  • 举报
回复
同意 newshute(小武) 的说法
yphuan 2005-01-14
  • 打赏
  • 举报
回复
谢谢楼上的几位,我找到了那个帖子http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=146252

大致有思路了,谢谢!!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧