我正在尝试获取一个简单的多播示例以在Linux上工作(我已经

尝试了RHEL 4 2.6.9和Ubuntu 8.04 2.6.24).总体思路是

我希望服务器绑定到单播地址,然后添加

本身属于组ff02 :: 1.然后,我希望它收到

多播发送到ff02 :: 1.以下代码可在Mac OS X 10.5(适用于

实际上,在OS X上运行的服务器会从Linux发送多播

客户),但我无法使Linux服务器端正常工作.不会

获得任何多播.如果我更改代码以绑定到::(INADDR6_ANY)

而不是单播地址(我尝试了本地链接和全局链接

地址),它确实获得了多播.我想知道是否有人

可以指出我做错了什么.

服务器:

memset( &hint, 0, sizeof( hint ) );

hint.ai_family = AF_INET6;

hint.ai_socktype = SOCK_DGRAM;

// argv[1] is either a link-local or a global address

err = getaddrinfo( argv[1], NULL, &hint, &info );

if( err != 0 ) {

perror( "getaddrinfo" );

exit( 1 );

}

struct sockaddr_in6 * addr = (struct sockaddr_in6*)info->ai_addr;

//addr->sin6_addr = in6addr_any; // if this is uncommented, multicasts are received

addr->sin6_port = htons( 7890 );

s = socket( AF_INET6, SOCK_DGRAM, 0 );

if( bind( s, (struct sockaddr*) addr, info->ai_addrlen ) != 0 ) {

close( s );

perror( "bind" );

exit( 1 );

}

if( getaddrinfo( "ff02::1", NULL, &hint, &multi ) != 0 ) {

close( s );

perror( "getaddrinfo" );

exit( 1 );

}

struct ipv6_mreq mreq;

memset( &mreq, 0, sizeof(mreq) );

memcpy( &mreq.ipv6mr_multiaddr, &((struct sockaddr_in6 *) multi->ai_addr)->sin6_addr, sizeof(mreq.ipv6mr_multiaddr) );

mreq.ipv6mr_interface = 2; // 2 happens to be the interface ID; I've tried other values here

freeaddrinfo( multi );

if( setsockopt( s, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq) ) != 0 ) {

close( s );

perror( "IPV6_JOIN_GROUP" );

exit( 1 );

}

for( ; ; ) {

char data[6];

size_t len;

len = recvfrom( s, data, 5, 0, NULL, NULL );

data[5] = '\0';

printf( "Received %s\n", data );

if( strcmp( data, "exitt" ) == 0 ) {

break;

}

}

客户端代码如下:

memset( &hint, 0, sizeof( hint ) );

hint.ai_family = AF_INET6;

hint.ai_socktype = SOCK_DGRAM;

hint.ai_protocol = 0;

err = getaddrinfo( "ff02::1", NULL, &hint, &info );

if( err != 0 ) {

perror( "getaddrinfo" );

return 0;

}

struct sockaddr_in6 * addr = (struct sockaddr_in6*)info->ai_addr;

addr->sin6_port = htons( 7890 );

addr->sin6_scope_id = 2; // 2 happens to be the interface ID

s = socket( AF_INET6, SOCK_DGRAM, 0 );

for( ; ; ) {

char data[6];

size_t len;

scanf( "%5s", data );

data[5] = '\0';

printf( "Sending %s\n", data );

if( sendto( s, data, 5, 0, info->ai_addr, info->ai_addrlen ) != 5 ) {

printf( "Error sending\n" );

}

if( strcmp( data, "exitt" ) == 0 ) {

break;

}

}

close( s );

linux程序只监听了ipv6端口,c-在Linux上侦听IPv6多播相关推荐

  1. java 监听本地端口_Java-在本地端口上侦听RTP数据包

    因此,我目前正在开发一个客户端应用程序,该应用程序在端口5004上侦听RTP数据包.由于可能有多个服务器发送RTP数据包,因此我无法使用套接字连接到特定的远程主机.相反,我尝试了以下方法来侦听本地端口 ...

  2. vue 监听map数组变化_解决vue无法侦听数组及对象属性的变化问题

    一.数组 1.可以监听到的情况 如push.splice.=赋值(array=[1,2,3]) 2.无法监听到的情况 使用下标修改某个元素(这种比较常见) array[index] = 1 objec ...

  3. ipv6学习之旅--组播侦听发现协议(MLD)

    组播侦听发现协议是ipv6才有的协议,他的原理是当源主机发送一份数据到一个组播地址,所有加入了这个组播地址的成员都可以收到一份数据的拷贝.并且只有组播成员才可以接收到数据.路由器通过MLD协议,可以了 ...

  4. 无人机侦听与反制_使用SWTEventHelper清除SWT侦听器通知

    无人机侦听与反制 为基于SWT的UI编写测试通常需要以编程方式通知小部件侦听器. 不幸的是,用于创建,初始化并最终触发事件的代码有点冗长,并且分散了测试的实际目的. 在编写了类似的初始化例程几次之后, ...

  5. linux程序独占桌面,桌面应用|14个可以提升Linux桌面体验的应用程序

    转战到Ubuntu,或者是别的流行的Linux发行版,不仅仅是操作系统的操作方式的改变,更多的是你还需要一些能支持你完成工作的好的应用. 在这篇文章中,我将分享一些我精选出来不可或缺的应用程序,并谈谈 ...

  6. linux程序已经在后台运行冻结了_让linux下程序永远后台运行

    今天写了一个后台运行的脚本,发现只要我关终端,脚本也就随之停止了,昨天还不是这样啊?发现,细节之处有所不同,昨天我在运行该脚本之后,在终端shell中用exit命令退出,而今天则是直接关了终端,就这么 ...

  7. 【连接ipv6】有ipv6地址,但是还是上不了ipv6的网站

    条件 注意一下,这里有条件的!! 这里是有ipv6地址的 并且你需要改好host,否则也是不行的.可以根据下面的github上的来做修改 https://github.com/Sean16SYSU/i ...

  8. linux ps 只显示端口,这30个Linux系统监控工具,每个系统管理员都应该知道

    是否需要监控Linux服务器的性能?试试这些内置的命令和附加工具.大多数发行版都附带了大量的Linux监控工具,这些工具提供了可以用来获取系统活动信息的指标.你可以使用这些工具来查找性能问题的可能原因 ...

  9. 如何解决Linux下侦听端口被占用

    本文介绍了 Linux 下随机端口和侦听端口重复的原因以及解决方法,虽然可以通过设置本地保留端口来解决,但这毕竟需要多一步配置操作,而且如果服务迁移到其他机器或者当前机器上有服务使用新的侦听端口,还得 ...

最新文章

  1. 杭电 hdu 1003
  2. 如何在网站建设时正确设置符合SEO优化的元素?
  3. 不是我吹,20M的压缩文件我只用了1秒!
  4. 今日头条 Go 建千亿级微服务的实践
  5. Object Detection中的IOU
  6. java多维数组的指针_Java基础之二维数组
  7. Python中的urllib,urllib三种不同的请求方式
  8. hihoCoder #1872 : Pythagorean triple
  9. html不用点击自动执行,页面自动执行(加载)js的几种方法
  10. java 怎么接收xml_Java如何提取完整的XML块
  11. linux下组管理命令详解
  12. 互联网企业架构初期选择--初期技术选型
  13. Win10系统键盘正常但不能输入
  14. 笔记本电脑的计算机名称在哪里看,如何查看笔记本电脑的IP地址
  15. html中重置居中单词是,HTML中的居中方法
  16. 将本地文件上传到码云(gitee远程仓库)
  17. 程序员,未来你要成为CTO、技术VP还是架构师?
  18. android导入support-v4包(导包通用教程)
  19. PIA系列 合并式功率放大器DAVSE PIA-1080 合并式功率放大器
  20. firewall-cmd设置防火墙规则

热门文章

  1. jQuery学习之八---文档处理
  2. mongodb更新操作符$unset
  3. 新增数组_数组链表和List部分理解总结
  4. java程序包不存在_idea Error:(3, 32) java: 程序包***不存在的问题
  5. php radio样式美化,微信小程序修改radio组件默认样式
  6. ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用
  7. linux chattr修改文件属性,linux chattr(改变文件属性)
  8. 路由器有一个android设备连接不上,Android http连接 – 多个设备无法连接同一台服务器...
  9. java 避免重定向_java重定向与转发的问题
  10. 解决Hadoop总是处于安全模式的问题