组播发送

**************************************************************************************************************

#include <stdio.h>
#include <sys/types.h>         
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>                          
#include <string.h>
#include <unistd.h>
 #include <net/if.h>
//本机IP
#define PORT 8888
#define IP   "192.168.43.148"
//组播地址
#define mu_IP   "224.1.2.3"
#define ERR_MSG(msg) do{\
    fprintf(stderr,"__%d__\n",__LINE__);\
    perror("msg");\
}while(0)

int main(int argc, const char *argv[])
{
    //1、创建套接字
    int sfd = socket(AF_INET,SOCK_DGRAM,0);
    if(sfd<0)
    {
        ERR_MSG("socket");
        return -1;
    }

//加入多播组
    struct ip_mreqn mreq;
    mreq.imr_multiaddr.s_addr =inet_addr(mu_IP);//组播IP
    mreq.imr_address.s_addr           =inet_addr(IP);// 本机IP
    mreq.imr_ifindex = if_nametoindex("ens37");
    if(setsockopt(sfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))<0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }
    printf("加入多播组成功\n");
    
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port  = htons(PORT);//端口号号(转为网络字节序)
    sin.sin_addr.s_addr  =inet_addr(mu_IP);//组播IP的网络字节序,要在224.0.0.0-239.255.255.255
    //2、绑定组播IP地址、端口号和套接字生成的文件描述符
    if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))<0)
    {
        ERR_MSG("bind");
        return -1;
    }
    printf("Udp服务器绑定成功\n");
    //变量初始化
    char buf[32]="";
    struct sockaddr_in cin;
    socklen_t cinlen=sizeof(cin);

while(1)
    {

//3、接收数据
    ssize_t rcv=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&cinlen);
        if(rcv<0)
        {
            ERR_MSG("recvfrom");
            return -1;
        }
    printf("__%d__,%s:%d:%s\n",\
            __LINE__,inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
    
    }
    //5、关闭套接字
    close(sfd);
    return 0;
}
**************************************************************************************************************

组播接收

**************************************************************************************************************

#include <stdio.h>
#include <sys/types.h>         
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>                          
#include <string.h>
#include <unistd.h>
//组播的端口号和IP
#define SIN_PORT 8888
#define SIN_IP   "224.1.2.3"

#define ERR_MSG(msg) do{\
    fprintf(stderr,"__%d__\n",__LINE__);\
    perror(msg);\
}while(0)

int main(int argc, const char *argv[])
{
    //1、创建套接字(服务器端)
    int sfd = socket(AF_INET,SOCK_DGRAM,0);
    if(sfd<0)
    {
        ERR_MSG("socket");
        return -1;
    }
    //接收方的地址信息结构体
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port  = htons(SIN_PORT);//组播端口号(端口号转为网络字节序)
    sin.sin_addr.s_addr  =inet_addr(SIN_IP);//组播IP的网络字节序

//变量初始化
    char buf[32]="";

socklen_t sinlen=sizeof(sin);
    ssize_t sd=0;
    while(1)
    {

//4、发送数据,要指定发送到的地址
        bzero(buf,sizeof(buf));
        printf("要发送到服务器的数据-->");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1] = 0;
        
        sd = sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sinlen);    
        if(sd<0)
        {
            ERR_MSG("sendto");
            return -1;
        }
        printf("发送成功\n");

}
    //5、关闭套接字
    close(sfd);
    return 0;
}

网络编程:组播发送接收相关推荐

  1. Linux组播编程 组播发送和组播接收

    接收端 int init_recv_socket(int *pSockfd) {int recv_sockfd = -1;struct ip_mreq mreq;bzero(&mreq, si ...

  2. Linux网络编程组播测试代码

    Linux网络编程组播测试代码 (转载) 组播客户端代码如下: #include <sys/types.h> #include <sys/socket.h> #include ...

  3. iOS14 广播组播发送失败问题

    我们App之前用到广播组播发送配网信息,然后设备收到信息后自动配网的功能.在iOS14以后的版本突然失效.调试发现是发送广播包一直失败,组播包也没发送成功.查阅了相关资料,发现需要申请一个广播包发送的 ...

  4. 组播发送端接收端,广播发送端接收端

    1. 组播 1)概念 1. 广播方式是发送给同一网段下的所有主机,过多的广播会占用大量网络带宽,会造成广播风暴,影 响正常通讯: 2. 主机之间一对一组的通讯模式,也就是只有加入了同一个组的主机可以接 ...

  5. Linux网络编程——组播和广播

    文章目录 前言 一.组播 二.广播 总结 前言 学习了TCP和UDP协议,可以发现TCP可靠但只能一对一且传输速度较慢:UDP不可靠,但可以一对多且传输速度快,由此不难发现,实现组播和广播的功能的,只 ...

  6. 嵌入式linux局域网组播发不了,组播 IP_MULTICAST_LOOP回环在Linux和Windows的差异

    在TX2嵌入式开发板上(Ubuntu操作系统)编写网络组播发送接收程序,首先了解一下组播. linux多播编程 linux多播编程步骤: 1>建立一个socket; 2>设置多播的参数,例 ...

  7. JAVA 网络编程(5) SOCKET UDP 单播和组播,以及组播其他机器收不到报文的解决方法

    UDP既可以单播也可以组播 一,单播 单播的过程为 发送方: InetAddress destAddr = InetAddress.getByName("192.168.4.199" ...

  8. lv6 网络编程(9)-网络编程扩展下

    目录 前言 1.广播 1.1广播发送/接收: 2.组播 2.1网络地址: 2.2组播发送/发送 3.UNIX域套接字 3.1socket可以用于本地通信 3.3.1进程间通信: 3.2本地地址结构 3 ...

  9. Java的 网络编程

    目录 什么是网络编程 网络编程三要素 IP IPv4 IPv6 ipv4的细节 InetAddress的使用 端口号 协议 UDP通信程序 练习:聊天室 UDP的三种通信方式 TCP通信程序 三次握手 ...

最新文章

  1. Unity3D研究院之与Android相互传递消息
  2. thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离
  3. rails中对应关系
  4. vnc远程桌面复制文件Linux,vncviewer远程桌面linux
  5. CEF:MFC 对话框 Demo(VS2013)
  6. Java程序员面试必备的一些流程图
  7. Careercup - Google面试题 - 4877486110277632
  8. 哈希表 - (代码、分析 )
  9. python3 gui tk代码_【基础】学习笔记30-python3 tkinter GUI编程-实操12
  10. spring 通过id 查询数据_Spring 数据初始 H2 后进行数据查询提示 Schema not found 错误...
  11. 一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)
  12. getshell工具下载批量ecshop4.0全版本通杀工具下载
  13. 矩正式键盘程序c语言,单片机键盘程序(4×4矩阵式)
  14. MAC小技巧|Mac屏幕截图去除窗口阴影
  15. 指针输出与取地址符输出
  16. 跨品种套利 (期货)
  17. dnf剑魂buff等级上限_DNF:护石2.0副本将至!新增“金币燃烧机”,30W点一下
  18. ZYNQ LWIP实验
  19. 虚拟机中的Linux系统如何联网?
  20. rtthread 线程

热门文章

  1. PLC按条件查询MySQL/SQLServer/PostgreSQL数据库,将数据写入寄存器
  2. 10.(地图工具篇)PostgreSQL导入shape数据
  3. C语言坐标系求两点距离
  4. Windows下安装Anaconda3并使用Jupyter进行基础练习
  5. 基于Matlab的图像处理②(图像增强技术,中值滤波,均值滤波)
  6. c语言入门经典18个程序,C语言入门经典
  7. 如何选择合适的连锁管理软件?
  8. HDR对人眼的模拟介绍
  9. 世界上唯一可以刷卡买飞机的信用卡
  10. 【Linux】linux 快速入门(精讲)