首页 > 其他分享 >【多播】编写UDP代码,可以接受224.0.0.2组内消息

【多播】编写UDP代码,可以接受224.0.0.2组内消息

时间:2023-12-13 22:11:19浏览次数:35  
标签:多播 UDP myaddr 组内 srcaddr sockfd sizeof buf addr

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main(int argc, char const *argv[])
{
    // 1.创建套接字
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0)
    {
        perror("sockfd");
        return -1;
    }
    // 2.多播
    struct ip_mreq mul;
    mul.imr_multiaddr.s_addr = inet_addr("224.0.0.2");
    mul.imr_interface.s_addr = htonl(INADDR_ANY);
    setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *)&mul, sizeof(mul));
    // 3.绑定
    struct sockaddr_in myaddr;
    myaddr.sin_family = AF_INET;
    myaddr.sin_port = htons(8000);
    myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    int ret = 0;
    ret = bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr));
    if (ret != 0)
    {
        perror("bind");
        return -1;
    }
    // 4.接受数据
    char buf[1500] = "";
    char ip[16] = "";
    unsigned short port = 0;
    struct sockaddr_in srcaddr;
    socklen_t len = sizeof(srcaddr);
    while (1)
    {
        bzero(buf, sizeof(buf));
        bzero(&srcaddr, len);
        recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&srcaddr, &len);
        inet_ntop(AF_INET, (void *)&srcaddr.sin_addr, ip, 16);
        port = ntohs(srcaddr.sin_port);
        printf("%s/%hu:%s\n", ip, port, buf);
    }
    // 5.关闭套接字
    close(sockfd);
    return 0;
}

 

标签:多播,UDP,myaddr,组内,srcaddr,sockfd,sizeof,buf,addr
From: https://www.cnblogs.com/mengyaoli/p/17900061.html

相关文章

  • TCP和UDP的区别
    TCPTCP(TransmissionControlProtocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立,其中的过程非常复杂,过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同......
  • 传输层TCP|UDP
    TCP/UDP简介TCP和UDP是两种常见的互联网传输协议,它们都是在IP网络上运行的传输层协议。TCP(TransmissionControlProtocol:传输控制协议)是一种面向连接的可靠协议。它提供数据传输的有序性、完整性、流量控制和拥塞控制。TCP的通信过程包括三次握手建立连接和四次挥手断开连接。使用......
  • 既然UDP更快,为啥这么多年一直用TCP ?
    你们好啊,我是老杨。有点基本技术常识的粉丝朋友都知道,UDP肯定是比TCP快的。很多人对TCP和UDP的了解很浅,直到自己真的经历了一些通信项目之后,你才会愿意根据实际情况埋头苦学,企图“速成”一下。要是问你为什么快,我相信大多数人,也是能从各个角度,说上几句有的没的。但是,既然如此,为什么......
  • 构建用于复杂数据处理的高效UDP服务器和客户端
    title:构建用于复杂数据处理的高效UDP服务器和客户端banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-723:03:00tags:-踩坑构建用于复杂数据处理的高效UDP服务器和客户端引言在当今快速发展的网络通信世界......
  • 网络通信、UDP通信、TCP通信、BS架构模拟、URL了解
    网络编程可以让程序与网络上的其他设备中的程序进行数据交互所以,我们学习网络编程的主要目的就是为了实现网络通信网络通信网络通信基本模式常见的通信模式有如下2种形式:Client-Server(Cs)、Browser/Server(Bs)Client-Server(Cs)主要是客户端与服务端之间的联系(就是相应的App和后......
  • 【小沐学前端】Node.js实现UDP通信
    1、node简介Node.js是一个开源的、跨平台的JavaScript运行时环境。Node.js是一个开源和跨平台的JavaScript运行时环境。它是几乎任何类型项目的流行工具!Node.js在浏览器之外运行V8JavaScript引擎(GoogleChrome的内核)。这使得Node.js非常高效。Node.js应用在......
  • Qt之UDP多播(组播)的使用
    UdpSocket::UdpSocket(QObject*parent):QObject(parent){//本机IPQStringlocal_ip="192.168.101.11";m_udp_socket=newQUdpSocket(this);connect(m_udp_socket,&QUdpSocket::readyRead,this,&UdpSocket::received_data);......
  • UDP通信
    一、UDP概述传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议。TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输。但UDP也是网络通信中不可或缺的重要通信手段。相较于TCP而言,UDP通信的形式更像是发短信。不需要在数据传输之前建立、维......
  • C# Lambda 分组排序问题(先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再
    问题:先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再按照某数字或字符正序排列解答:vardata=list.OrderByDescending(i=>i.Date).ToList();vargData=data.GroupBy(g=>g.code).Select(l=>l.OrderBy(i=>i.Step));varinvData=newList<IndexVM>();fore......
  • 链表K个节点的组内逆序调整问题
    链表K个节点的组内逆序调整问题作者:Grey原文地址:博客园:链表K个节点的组内逆序调整问题CSDN:链表K个节点的组内逆序调整问题题目描述LeetCode25.ReverseNodesink-Group本题的followup是:Follow-up:CanyousolvetheprobleminO(1)extramemoryspace?即用\(O(......