使用UDP协议,sendto可将数据一次性发送给多个接收者吗 ?

wmrwinhap 2002-08-22 10:45:33
sendto的函数原型如下:

int sendto( SOCKET s, const char FAR * buf, int len, int flags, const struct sockaddr FAR * to, int tolen );

我将 to 指向一个sockaddr的三元数组,数组的每个元素指向一个地址,tolen赋值为sizeof(sockaddr)*3,调用成功(返回发送的字节数),但却只有第一个地址接收到数据。

请问怎样才能一次性将数据发送到多个地址?
...全文
32 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmrwinhap 2002-08-23
如果不用全网广播,并且接收方本身不做特别处理(我指的是接收方不做处理,发送方做一些再复杂的处理也没关系),发送方倒底有没办法一次性将数据发送到网络内多个接收者呢?
回复
HansXu 2002-08-22
哈哈!I 服了 u!sendto居然能被你如此创造行的使用。
还是用广播(Broadcasting)(x.x.x.255)或是多播(Multicasting)(224.0.0.0 - 239.255.255.255)吧。
回复
wmrwinhap 2002-08-22

广播会使子网内所有节点都接收,不是我想要的。

组播要先加入组,而且好象要接收方必须自已主动加入组,应用就受很多限制。除非发送方能自动将接收方加入组(但好象这样会失败)。

能否多个接收方不作特殊处理(如主动加入多播组)就能象接收单播或广播数据一样接收这些数据,而发送方共只需发送一次呢?

对于组播,至于是子网内还是子网外,倒没什么限制,只要组播地址选取大于224.0.0.255且小于等于239.255.255.255并将TTL值设置为N(大于1)就可以在N个子网内传播(穿越N-1个路由器)的。

回复
taoni 2002-08-22
好像在socket初始化的时候的第一各参数可以指定。
回复
genjurolyb 2002-08-22
居于网内还是可以的,sockaddr为组播地址。

224.0.0.x吧,好象。
回复
dingkl 2002-08-22
不可能一次发送给多个地址
回复
NowCan 2002-08-22
哈哈,厉害!
不过倒是真的应该建议M$把这个函数改成这种方式。哈哈。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告