一个接收组播报文例子帮忙看下谢谢。

coolx-w 2011-06-29 10:50:01
我在Windows平台一样的步骤可以正常,但在Linux上就不行,我的Linux平台是运行在VMware虚拟机上的,Linux版本是RHEL再编译发行的scientifc linux 6;

目前的问题是:发送端数据发送正常,接收端会阻塞住,接收不到任何数据,请帮忙看看或测试一下,谢谢

接收端代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/in.h>

int main(int argc, char** argv)
{
int s = socket(AF_INET,SOCK_DGRAM, 0);

struct sockaddr_in recv_addr = {0};

recv_addr.sin_addr.s_addr = INADDR_ANY;
recv_addr.sin_family = AF_INET;
recv_addr.sin_port = htons(8000);

int err = bind(s, (struct sockaddr*)&recv_addr, sizeof(recv_addr));
if (err < 0)
{
perror("bind()");
return -1;
}

int loop = 1;
// 设置循环许可
err = setsockopt(s,IPPROTO_IP, IP_MULTICAST_LOOP,&loop,sizeof(loop));

struct ip_mreq mreq;
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
mreq.imr_multiaddr.s_addr = inet_addr("224.0.1.99");

// 加入组播
err = setsockopt(s, IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
if (err<0)
{
perror("setsockopt:ADD");
return 0;
}

char buf[256] = "";
while(1) // 无循环无所论,关键是接收
{
recvfrom(s,buf,256,0,0,0);

puts(buf);
}

err = setsockopt(s, IPPROTO_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(mreq));


return (EXIT_SUCCESS);
}



发送端代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/in.h>

int main(void)
{
int s;
struct sockaddr_in mcast_addr;


s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == -1)
{
perror("Opening socket");
exit(0);
}

memset(&mcast_addr, 0, sizeof (mcast_addr));
mcast_addr.sin_family = AF_INET;
mcast_addr.sin_addr.s_addr = inet_addr("224.0.1.99");
mcast_addr.sin_port = htons(8000);

while (1)
{
int n = sendto(s,
"test from broadcast",
sizeof ("test from broadcast"),
0,
(struct sockaddr *) &mcast_addr,
sizeof (mcast_addr));
if (n < 0)
{
perror("sendto");
exit(EXIT_FAILURE);
}
sleep(5);
}
exit(EXIT_SUCCESS);

}

...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
金刚葫芦娃 2011-06-29
  • 打赏
  • 举报
回复
友情帮顶,等待高人.
leo_coolx 2011-06-29
  • 打赏
  • 举报
回复
好吧。。。来收分了
coolx-w 2011-06-29
  • 打赏
  • 举报
回复
没人回答。。。 自己顶一下。。。。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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