如何用udp实现消息群发?

macri 2006-04-22 11:09:07
我知道内网中50台机器的IP,现在服务器要向这50台机器发送一条消息,如何用udp实现?
最好代码事例,我马上给分结贴。。。。THANKS
...全文
1028 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
pp616 2006-05-08
  • 打赏
  • 举报
回复
广播就好了。用不着组播。
铖邑 2006-05-08
  • 打赏
  • 举报
回复
楼上说的是用广播发送的吧?广播地址是192.168.*.255,是255不是0

另外,象楼主这个需求根本不需要用广播。

楼主好象不在意,发了帖子以后就没什么回音了
rookieme 2006-05-06
  • 打赏
  • 举报
回复
那么198网段的机子都将收到你的信息,如果有路由器则需要在socket中bind一个ttl数字,该数字在经过路由器时自动减一,直至0则不再传递,NMUDP的该黙认值为0,所以不能穿越路由器
iec 2006-05-06
  • 打赏
  • 举报
回复
路过.
rookieme 2006-05-06
  • 打赏
  • 举报
回复
如果有路由器,需bind一个参数,并对多播地址发
其实象LZ的需求,只需将发数时的IP的后面几亿改为0就行,如:198.0.0.0
rookieme 2006-05-06
  • 打赏
  • 举报
回复
NMUDP
rookieme 2006-05-06
  • 打赏
  • 举报
回复
我是说UDP控件不行
yuyulily 2006-04-26
  • 打赏
  • 举报
回复
学习了。。
铖邑 2006-04-23
  • 打赏
  • 举报
回复
多播不需要交换机的支持,但需要路由器的支持。

在一个局域网(以太网)内,多播可以无条件发送。但是如果想让多播通过路由器,就需要在路由器上配置多播路由,这个是比较复杂的,因为在互联网中使用的多播地址本身也是要申请的。在 局域网内部可以使用保留的多播地址,这个地址段有个范围,如果我没有记错的话应该是224.*.*.*-239.*.*.*,这里面还有一些规定,最好用后面的吧。这个我就记得不太清楚了,可以查资料看,多播地址是怎么规定的。

有什么问题可以继续保持联系。
macri 2006-04-23
  • 打赏
  • 举报
回复
谢谢楼上的兄弟,只怪我学业不精啊。。不过有人说udp不行,确实是害人哈。。
其实我就是想实现一个给所有用户发送通知的功能。以前看过一资料,说群发还要什么交换机的支持,不是是否存在这个问题。还请赐教。
铖邑 2006-04-23
  • 打赏
  • 举报
回复
不是在下自夸,本人从事网络编程多年,对协议与套接口编程还是比较了解的,既然回帖了,就不会瞎说。难道楼上的怀疑我的人品???


建议楼主看看有关多播方面的协议,再看UDP、多播socket编程资料。
铖邑 2006-04-23
  • 打赏
  • 举报
回复
回复人:rookieme(rookieme) ( 四级(中级)) 信誉:100 2006-04-23 08:57:00 得分:0
?
UDP不行


回帖也要负责任的,乱出主意是害人的。你告诉我UDP怎么不行了?群发消息(多播)不是需要用UDP吗???
铖邑 2006-04-23
  • 打赏
  • 举报
回复
不是UDP???要不要查一下SOCK_DGRAM是啥东东???

你说的是用UDP控件???
rookieme 2006-04-23
  • 打赏
  • 举报
回复
UDP不支持的,可用indy
rookieme 2006-04-23
  • 打赏
  • 举报
回复
UDP不行
铖邑 2006-04-23
  • 打赏
  • 举报
回复
192.168.*.* 是C类保留地址,ABC三类地址都有保留地址,用于普通IP寻址的。
D类地址:224.*.*.*-239.*.*.*,是专门留给多播使用的,也有保留地址。
macri 2006-04-23
  • 打赏
  • 举报
回复
大多数局域网内的IP都好像是这样的 192.168.*.* ,没有在你说那个范围内啊?
macri 2006-04-22
  • 打赏
  • 举报
回复
不明白,楼上的兄弟好像不是用的udp吧,我把问题再简化一下,就是向内网的所有客户端上线的的用户发
铖邑 2006-04-22
  • 打赏
  • 举报
回复
将socket加入239.255.193.250多播组,就可以接收目的IP地址为239.255.193.250的数据,发送数据则是发送至239.255.193.250地址。

不知楼主明白了没?
铖邑 2006-04-22
  • 打赏
  • 举报
回复
int s = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if(s < 0)return;
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(APort);
if(bind(s, (sockaddr *)&addr, sizeof(addr)) < 0)
{
closesocket(s);
return;
}


ip_mreq mr;
mr.imr_interface.s_addr = INADDR_ANY;
mr.imr_multiaddr.s_addr = inet_addr("239.255.193.250"); // 加入多播組
setsockopt(FSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char *)&mr, sizeof(ip_mreq));

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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