linux服务器无法接收到组播

  1. net.ipv4.conf.all.rp_filter=1

  2. net.ipv4.conf.default.rp_filter=1

  3. net.ipv4.conf.eth0.rp_filter=1

  4. 将以上三个参数调整为0

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Linux C语言程序实现UDP组播服务器的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define PORT 6666 #define GROUP "239.0.0.1" int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in addr; struct ip_mreq group; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); exit(1); } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(PORT); if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); exit(1); } group.imr_multiaddr.s_addr = inet_addr(GROUP); group.imr_interface.s_addr = htonl(INADDR_ANY); if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group)) < 0) { perror("setsockopt"); exit(1); } while (1) { char msg[1024]; struct sockaddr_in src; socklen_t srclen = sizeof(src); int n = recvfrom(sockfd, msg, sizeof(msg), 0, (struct sockaddr *)&src, &srclen); if (n < 0) { perror("recvfrom"); exit(1); } printf("Received message from %s:%d: %s\n", inet_ntoa(src.sin_addr), ntohs(src.sin_port), msg); } close(sockfd); return 0; } ``` 该程序使用socket API创建一个UDP Socket,并使用bind绑定到本地IP和端口。然后使用setsockopt API将该Socket加入到组播组中。最后使用recvfrom API从Socket中读取数据,并打印接收到的数据和发送者的IP地址和端口号。 使用该程序需要在运行前先加入组播组,可以使用以下命令加入组播组: ``` sudo route add -net 224.0.0.0 netmask 240.0.0.0 eth0 ``` 其中,eth0为网卡名称。 注意:运行该程序需要使用root权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值