接收
#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