【100分】SOCKET 同步发送 粘包

成都锦福工作室 2009-06-09 09:41:45
自己尝试完成了一个即时通讯工具 但在多人会话时 遇到了一个问题:
A发起与B C的三人会话 那么当A发送消息时 连续两次 socket.send(_msg)
服务端代码
byte[] _msg = new byte[_maxPacket];
clientSocket.Receive(_msg);
//查找HASH表 客户在线则发送消息
if (_table.ContainsKey(_receiver))
{
Socket receiverSocket = (Socket)_table[_receiver];
receiverSocket.Send(_msg);//此时发送的是B+C的信息 不是B->C信息
}

可能这个例子不太恰当 我想问 当遇到这种 需要和2个人以上发送信息时 必须连续send 如何避免粘包的情况发生 谢谢
...全文
113 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-06-09
  • 打赏
  • 举报
回复
即时通讯用UDP协议更适合,占用资源少而且不会粘包,可以广播或多播,不过需要有应答机制,发现可能丢包后重发。
wwei466 2009-06-09
  • 打赏
  • 举报
回复
自己价格识别字符串,瘦的时候判断一下不就得了、
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zxy98 的回复:]
加帧标识符即可解决的,以前这样用过
[/Quote]
如何加 能否贴下代码?
guohouchang1 2009-06-09
  • 打赏
  • 举报
回复
mark
mlliqiushi 2009-06-09
  • 打赏
  • 举报
回复
mark
3楼正解?
peterb 2009-06-09
  • 打赏
  • 举报
回复
加报文头来标识你发送的数据
shiling_02404 2009-06-09
  • 打赏
  • 举报
回复
up
zlb789 2009-06-09
  • 打赏
  • 举报
回复
up
shuiwenyu 2009-06-09
  • 打赏
  • 举报
回复
多线程啊
十八道胡同 2009-06-09
  • 打赏
  • 举报
回复
zxy98 2009-06-09
  • 打赏
  • 举报
回复
加帧标识符即可解决的,以前这样用过
满衣兄 2009-06-09
  • 打赏
  • 举报
回复
加帧头和帧尾,接收端加个缓冲,收到一句话的结束标志再显示.
  • 打赏
  • 举报
回复
你好 我只是举一个连续Send的应用环境
网上很少关于粘包的资料 如果可以 希望看到解决粘包的代码 ^_^
满衣兄 2009-06-09
  • 打赏
  • 举报
回复
这里应该用组播技术.

还可以开多个线程,通过管道实现一对多发送.
还可以采用消息队列的机制发送数据.不过这样会有一点延迟.
  • 打赏
  • 举报
回复
算了 这个问题 还得深入研究 结贴!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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