组播的实现

本文详细介绍了组播通信的过程,包括组播发送和组播接收的步骤,并提供了组播代码范例,帮助开发者理解如何在服务器和客户端实现组播功能。

组播通信

通信步骤:

组播发送:

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

}

 

 

 

转载于:https://www.cnblogs.com/defen/p/5288157.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值