注意事项:
发送端
- 绑定本地IP地址,否则的话组播报文可能从其他接口发送出去。
- 目的地址设置成组播地址,然后调用sendto()即可。
接收端
- 设置socket为SO_REUSEADDR,否则调试的时候会导致接收端程序无法重复绑定同一个端口号。
- 使用setsockopt(listener, IPPROTO_IP, IP_ADD_MEMBERSHIP, &remote, len)把相应的接口加入到组播组。一定要指明需要接受的接口IP地址。
- 调用recvfrom()就可以接受组播报文了。
接收端代码:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <arpa/inet.h>
#define PORT 2020
int main(int argc, char *argv[])
{
/* server address */
struct sockaddr_in serveraddr;
/* listening socket descriptor */
int listener;
/* buffer for client data */
char