组播ip mac转换 c语言,#每日骚操作 之 组播

接收

#if 1/*

'''*/

//vim: set synyax=c

#include

#include

#include

#include

#include

int main(void) {

int sock = socket(AF_INET, SOCK_DGRAM, 0);

struct sockaddr_in localaddr;

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

localaddr.sin_family = AF_INET;

localaddr.sin_port = htons(2222);

inet_pton(AF_INET, "0.0.0.0", &localaddr.sin_addr.s_addr); // 239.0.0.9 also ok

if (bind(sock, (void *)&localaddr, sizeof(localaddr)))

exit(1);

struct ip_mreqn group;

inet_pton(AF_INET, "239.0.0.9", &group.imr_multiaddr);

inet_pton(AF_INET, "192.168.150.202", &group.imr_address); // OR: group.imr_ifindex = if_nametoindex("eth0");

if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group)))

exit(2);

for (;;) {

char buf[128] = {0};

recvfrom(sock, buf, sizeof(buf), 0, NULL, 0);

printf("%s\n", buf);

}

}

//'''

#else

# vim: syntax=python

from socket import *

s = socket(AF_INET, SOCK_DGRAM, 0)

s.bind(('0.0.0.0',2222))

s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, inet_aton('239.0.0.9')+inet_aton('192.168.150.202'))

while True:

print s.recvfrom(1024)

#endif

发送

#if 1/*

'''*/

// vim: syntax=c

#include

#include

#include

#include

int main(void) {

int sock = socket(AF_INET, SOCK_DGRAM, 0);

struct sockaddr_in localaddr;

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

localaddr.sin_family = AF_INET;

inet_pton(AF_INET, "192.168.15.201", &localaddr.sin_addr.s_addr);

if (bind(sock, (void *)&localaddr, sizeof(localaddr)))

exit(1);

struct sockaddr_in gaddr;

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

gaddr.sin_family = AF_INET;

gaddr.sin_port = htons(2222);

inet_pton(AF_INET, "239.0.0.9", &gaddr.sin_addr.s_addr);

for (;;) {

char buf[128];

fgets(buf, sizeof(buf), stdin);

printf("%zd\n", sendto(sock, buf, strlen(buf), 0, (void *)&gaddr, sizeof(gaddr)));

}

}

//'''

#else

# vim: syntax=python

from socket import *

s = socket(AF_INET, SOCK_DGRAM, 0)

s.bind(('192.168.15.201', 0))

while True:

msg = raw_input()

print s.sendto(msg, ('239.0.0.9', 2222))

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中实现组播可以使用套接字(socket)编程。组播是一种多点广播技术,可以将数据包发送给一个组中的所有主机,而不是只发送给一个特定的主机。以下是一个简单的C语言组播示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define GROUP "239.0.0.1" // 组播地址 #define PORT 8888 // 组播端口号 int main(int argc, char **argv) { int sockfd; struct sockaddr_in group_addr; char buffer[256]; // 创建套接字 sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); exit(1); } // 设置组播地址和端口 memset(&group_addr, 0, sizeof(group_addr)); group_addr.sin_family = AF_INET; group_addr.sin_addr.s_addr = inet_addr(GROUP); group_addr.sin_port = htons(PORT); // 将套接字加入组播组 struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr(GROUP); mreq.imr_interface.s_addr = htonl(INADDR_ANY); if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) { perror("setsockopt"); exit(1); } // 接收组播消息 while (1) { memset(buffer, 0, sizeof(buffer)); if (recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL) < 0) { perror("recvfrom"); exit(1); } printf("Received message: %s\n", buffer); } // 关闭套接字 close(sockfd); return 0; } ``` 在上面的代码中,首先创建了一个UDP套接字,然后设置了组播地址和端口,并将套接字加入到组播组中。最后使用recvfrom函数接收来自组播组的消息。要发送组播消息,只需要将数据包发送到组播地址和端口即可。 需要注意的是,向组播地址发送数据包时,需要将套接字的IP_MULTICAST_TTL选项设置为大于0的值,以确保数据包能够到达组播组内的所有主机。 以上就是一个简单的C语言组播示例代码。实际应用中还需要考虑更多的细节,如错误处理、超时重传等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值