两个不同的socket之间怎么会粘包了呢?

tangshiping 2008-09-10 11:35:15
有这么一个继续继承的类CmySocket,生成了一个实例A,用来接收两个客户端发送的UDP多媒体数据包。接收一个客户端数据的时候没有问题,但是当两个客户端同时发送数据的时候,由于二者的编码格式一致,都没有包的标志头和尾,无法区分包与包之间的间隔,导致数据播放的时候,两个客户端的数据互有串入,在播放一个客户端多媒体流的时候,总有另一个客户端的声音串入。为了快速解决这个问题继续后面的测试,我把类生成了两个实例来接收两个客户端的数据,因为两个实例的socket空间是独立的,有独立的接收和发送缓冲区,应该在没有数据包标志保证的情况下也不会出现数据交叉。
于是我按这个思路生成了两个实例A和B,分别绑定了两个端口,然后每个客户端给不同的端口发,实现一对一的接收。结果居然在播放一路客户端音频流的时候,还是有另一路的杂音串入,难道socket的空间是共用的吗?
...全文
157 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
icosagon 2008-09-17
  • 打赏
  • 举报
回复
udp还得自己控制包的先后顺序
tangshiping 2008-09-10
  • 打赏
  • 举报
回复
recvfrom可以区分啊,但是由于两个客户端的数据没有包头,在缓冲区内就会连在一起,所以分了两个socket来收,但是还是串,奇怪了
kangaroo1012 2008-09-10
  • 打赏
  • 举报
回复
楼主是从什么类继承下来的?怎么会串入呢,,

试试楼上的方法

关注中……
Cowboy22 2008-09-10
  • 打赏
  • 举报
回复
recvfrom不是可以获取对方的地址参数吗,你用这个来区分对端就行了,怎么会串入,也许是其它地方错了

18,363

社区成员

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

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