组播的实现

组播通信

通信步骤:

组播发送:

1、 创建数据报套接字socket()

2、 接收方地址指定为组播地址(ip port

3、 发送数据包sendto()

4、 关闭套接字close()

组播的接受:

1、 创建数据报套接字

2、 加入多播组

struct ip_mreq

{

struct in_addr imr_multiaddr;

struct in_addr imr_interfacd;

};//头文件中已包含不需要定义

struct ip_mreq mreq;

mreq.imr_multiaddr.s_addr=inet_addr(“224.10.10.1”);

mreq.imr_interface.s_addr=htol(INADDR_ANY);

Setsockopt(sockfd,IPPROTO_IP,IP_ADDR_MEMBERSHIP,&mreq,sizeof(mreq));

3、 绑定本机ipport bind()

4、 接受数据recvfrom()

 

组播代码范例:
服务器(发送数据)
#include<stdio.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include<strings.h>

int main()
{    int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、1创建套接字socket
    struct sockaddr_in saddr;
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;//、、、、、、、2、指定发送地址,(为组播地址)
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = inet_addr("230.1.1.1");//发送给组播ip
    char *buf = "hello";
    
    sendto(socketfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,s);    //、、、、3、发送数据
    close(socketfd);

}

客户端(接受数据)
#include<stdio.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include<strings.h>
int main()
{    
int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、、、、、1、创建套接字socket
    struct sockaddr_in saddr;
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);
    struct ip_mreq mreq;
    bzero(&mreq,sizeof(struct ip_mreq));
    mreq.imr_multiaddr.s_addr = inet_addr("230.1.1.1");//组播的ip
    mreq.imr_interface.s_addr = htonl(INADDR_ANY);

    setsockopt(socketfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));//、、、2、加入多播组
    int s = sizeof(struct sockaddr_in);    
    bind(socketfd,(struct sockaddr *)&saddr,s);//、、、、3、绑定本机ip
    struct sockaddr_in caddr;
    char buf1[20];
    int n;
    n = recvfrom(socketfd,buf1,20,0,(struct sockaddr *)&caddr,&s);//、、4、绑定本机ip
        buf1[n] = '\0';
        printf("%s\n",buf1);
    close(socketfd);//、、、、、、、、5、关闭socket

}

 

 

 

posted @ 2016-03-17 17:06  高傲的monkey  阅读(3763)  评论(0编辑  收藏  举报