Socket通信疑问

sinall 2008-06-19 01:41:30
发送端发送两条数据,分别为aaaaa.....bbbbb 和 ccccc......ddddd
请问,接受端有可能一次接收到 ...bbbbbccccc....???
也就是说,接收端有可能一次收到发送端2条数据的组合吗?
...全文
156 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mhyx_2008 2008-06-22
  • 打赏
  • 举报
回复
恩,可能,不过还要看你recv(socketfd,buf,整数值,0)函数里 整数值 的设置大小。
如果你设置的很大,甚至超过 socket 缓冲区的大小,那就一次就把所有数据都读出来了。
winxxpSoft 2008-06-21
  • 打赏
  • 举报
回复
可能的!文件流吗?缓冲大小不一样!你把缓冲设置成和你发的一样大试试!
fbusybox 2008-06-21
  • 打赏
  • 举报
回复

answer有点乱了吧


首先排除发送 接收缓冲溢出处理问题,如果这个溢出而覆盖,结果就五花八门了


接着细分:

(1) TCP 数据流 不会有上述情况出现

(2)UDP 数据报文,网络路径差异,完全有上述问题的出现可能,(同个交换网络一般不会),需自己在应用层控制.
lin_style 2008-06-21
  • 打赏
  • 举报
回复
楼上的大大们也太武断了吧

连发送和接收的代码都不看

都臆测为“贴包”

建议LZ先把代码贴出来。
lala_benben 2008-06-19
  • 打赏
  • 举报
回复
...可能有这种情况。
sinall 2008-06-19
  • 打赏
  • 举报
回复
回楼上,指的是socket通信的两端!也就是send, recv这两个函数!
ouyh12345 2008-06-19
  • 打赏
  • 举报
回复
发送端和接收端到底指什么?
网卡的缓冲区?
na_he 2008-06-19
  • 打赏
  • 举报
回复
可能的,所以你必须制定自己的协议来控制自己的信息接收和发送了.
充电宝111 2008-06-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ooily 的回复:]
接收端会把收到的数据放到一个buffer里,如果两个包收到后,应用层还没有调用recv函数把buffer数据读走,则下一次应用层读数据时可以把两个包的内容一次读走
[/Quote]

你说的这种情况不太可能吧?那你的buffer怎么定义,能区分几个tcp包?
充电宝111 2008-06-19
  • 打赏
  • 举报
回复
一般情况下不会这样吧
我看过一个简单的TCPIP的协议栈,只会考虑IP包的拆分和合并
也就是说,如果你发送的时候没有IP分片,接收的时候是不会合并的
因为TCP包是独立的,不可能分片
yagebu1983 2008-06-19
  • 打赏
  • 举报
回复
关注+学习!!
帮你顶!!
stonezhong_2008 2008-06-19
  • 打赏
  • 举报
回复
如果是TCP的话有可能。因为发送的碎片在TCP协议栈中可能会合并。从用户的角度,你应该把TCP连接看成字节流。你可以根据需要在TCP上再进行封装,比如先送要发的字节数,再发数据等等。
artman 2008-06-19
  • 打赏
  • 举报
回复
需要自己根据需要定义通讯协议
csdn5211 2008-06-19
  • 打赏
  • 举报
回复
很可能,这叫粘包,几乎是必出现。跟收发缓冲区长度有一定关系。
ooily 2008-06-19
  • 打赏
  • 举报
回复
接收端会把收到的数据放到一个buffer里,如果两个包收到后,应用层还没有调用recv函数把buffer数据读走,则下一次应用层读数据时可以把两个包的内容一次读走
ooily 2008-06-19
  • 打赏
  • 举报
回复
可能的

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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