組播的實現


組播通信

通信步驟:

組播發送:

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

}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM