UDP的一对多通信(广播)-----个人笔记

这篇具有很好参考价值的文章主要介绍了UDP的一对多通信(广播)-----个人笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

补充:

1、TCP通信采用一对一的通信模式。日常生活中的网络会议通知、广告、网络信息公告等功能,需要采用UDP实现一对多的群发功能。

        通过Internet实现群发功能的形式有两种:
(1)利用广播向子网中的所有客户发送消息,比如各类通知、单位公告、集体活动日程安排等:
(2)利用组播向Internet网上不同的子网发送消息,比如集团向其所属的公司或用户子网发布信息公告等。

        广播,就是想对局域网内所有的主机同时发送数据,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。广播IP地址:192168.1.255/1921681(-1)广播MAC 地址:255.255255.255

2、广播的特点:子网中未参加相应广播应用的所有主机都会受到广播影响。

3、向一个广播地址发送UDP数据报时所发生的步骤为:

        首先假设子网地址为192.168.34,该子网的广播地址为192168.34.255,此子网下有俩台IP地址分别为192.168.341和192168.34.2的主机

(1)广播时sendto向IP为192168.34.255端口为3333发送数据报,此IP数据报在以太网下会激活ARP将目的广播地址192.168.34.255映射成相应的以太网地址(物理地址),然后将目的地址为此地址的帧发出去

(2)这次IP为192168.341和192168342的主机接口都会和此广播地址匹配成功,直到该数据报进入UDP层时根据端口是否匹配才判断是否丢弃该数据,端口为3333的会保留该数据,否则将数据丢弃。
4、广播:根据定义,广播分组会去往子网上的所有主机,包括发送主机自身,广播的缺点:未参加广播的主机也会受到影响

5、关于setsockopt

int setsockopt(int sockfd , int level, int optname, void *optval, socklen_t *optlen);

函数功能:设置套接字描述符的属性。

参数:
sockfd:要设置的套接字描述符。
level:选项定义的层次。或为特定协议的代码(如IPv4,IPv6,TCP,SCTP),或为通用套接字代码(SOL_SOCKET)。
optname:选项名。level对应的选项,一个level对应多个选项,不同选项对应不同功能。
optval:指向某个变量的指针,该变量是要设置新值的缓冲区。可以是一个结构体,也可以是普通变量

(参数optval表示选项的值,是一个指向选项值的指针。具体来说,它的类型和长度与所设置的选项有关,不同的选项可能需要不同类型和长度的参数。下面举例说明几种常见的选项及其对应的optval参数:

  1. SO_REUSEADDR选项:用于允许重用本地地址,其optval参数类型为int,表示是否允许重用地址,通常取值为1或0。

  2. SO_KEEPALIVE选项:用于启用TCP的心跳机制,其optval参数类型为int,表示是否启用心跳机制,通常取值为1或0。

  3. TCP_NODELAY选项:用于禁用Nagle算法,其optval参数类型为int,表示是否禁用Nagle算法,通常取值为1或0。

  4. SO_SNDBUF和SO_RCVBUF选项:用于设置发送和接收缓冲区的大小,其optval参数类型为int,表示缓冲区的大小,单位为字节。)

optlen:optval的长度。

一、通信框架

udp广播,udp,网络协议,网络

二、示例代码

recv端

#include<stdio.h>
#include<sys/ipc.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<fcntl.h>
#include<sys/stat.h>

int main()
{
        int recv_fd;
        struct sockaddr_in recv_addr,send_addr;
        socklen_t recv_len,send_len;
        char rdBuffer[64] = {0};

        recv_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
        if(recv_fd < 0)
        {
                perror("socket failed\n");
                exit(1);
        }
        printf("recv_fd:%d\n",recv_fd);

        recv_addr.sin_family = AF_INET;
        recv_addr.sin_port = htons(8090);//设定一个服务器的端口号
        recv_addr.sin_addr.s_addr =htons(INADDR_ANY);
        recv_len = sizeof(recv_addr);
        send_len = sizeof(send_addr);
        bind(recv_fd,(struct sockaddr *)&recv_addr,recv_len);
        while(1)
        {
                recvfrom(recv_fd,rdBuffer,64,0,(struct sockaddr *)&send_addr,&send_len);
                printf("%s\n",rdBuffer);
        }
        printf("recv over\n");
        close(recv_fd);
        return 0;
}

send端

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
        struct sockaddr_in broadcast_addr = {0};
        int send_fd;
        socklen_t broadcast_len;

        char rdBuffer[64] = {0};

        send_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
        if(send_fd < 0)
        {
                perror("socket failed\n");
                exit(1);
        }
        printf("send_fd:%d\n",send_fd);
        int on = 1;
        setsockopt(send_fd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));//允许发送广播数据包

        broadcast_addr.sin_family = AF_INET;
        broadcast_addr.sin_port = htons(8090);
        broadcast_addr.sin_addr.s_addr = inet_addr("192.168.56.255");
        broadcast_len = sizeof(broadcast_addr);

        int i = 5;
        while(i--)
        {
        sendto(send_fd,"helloworld",12,0,(struct sockaddr *)&broadcast_addr,broadcast_len);
        sleep(2);
        }
        close(send_fd);

        return 0;
}

四、结果

 udp广播,udp,网络协议,网络

五、参考文献

(63条消息) setsockopt()函数详解_Linux冰岛的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-753791.html

到了这里,关于UDP的一对多通信(广播)-----个人笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java UDP通信详解:单播、广播、组播

    1.UDP是一种无连接、不可靠传输的协议; 2.将数据源IP、目的地IP和端口封装成数据包,不需要建立连接 ; 3.每个数据包的大小限制在64KB内; 4.发送不管对方是否准备好,接收方收到也不确认,故是不可靠的; 5.可以广播发送 ,发送数据结束时无需释放资源,开销小,速度快

    2024年02月02日
    浏览(50)
  • Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

    - 网络通信 概念:网络通信是指 通过计算机网络进行信息传输的过程 ,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准确性和安全性。常见的网络通信协议有T

    2024年02月10日
    浏览(69)
  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(80)
  • 【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

    🌺 个人主页: Dawn黎明开始 🎀 系列专栏: 网络奇幻之旅 ⭐ 每日一句:往前走,朝着光 📢 欢迎大家:关注 🔍 +点赞 👍 +评论📝+收藏⭐️ 文章目录 📋前言 一.网络通信 1.1网络通信协议 1.2TCP/IP协议中的四个层次 二.UDP协议 2.1定义 2.2UDP连接的交互过程 三.TCP协议 3.1定义

    2024年02月05日
    浏览(47)
  • 计算机网络笔记:TCP协议 和UDP协议(传输层)

    TCP 和 UDP都是传输层协议,他们都属于TCP/IP协议族。 TCP的全称是 传输控制协议 是一种 面向连接的、可靠的、基于字节流 的 传输层 通信协议。TCP 是面向连接的、可靠的流协议(流就是指不间断的数据结构) TCP报文 是TCP层传输的数据单元,也称为 报文段 ,一个TCP报文段由

    2024年02月02日
    浏览(50)
  • 14-3_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP 单播和广播

    UDP(User Datagram Protocol,用户数据报协议)是轻量的、不可靠的、面向 数据报 (datagram) 、无连接的协议,它可以用于对可靠性要求不高的场合。与 TCP 通信不同, 两个程序之间进行 UDP 通信无需预先建立持久的 socket 连接,UDP 每次发送数据报都需要指定目标地址和端口 (如图14-6

    2024年02月14日
    浏览(46)
  • Golang笔记:UDP基础使用与广播

    UDP是比较基础常用的网络通讯方式,这篇文章将介绍Go语言中UDP基础使用的一些内容。 本文中使用 Packet Sender 工具进行测试,其官网地址如下: https://packetsender.com/ UDP是一种面向无连接的通讯,抛开业务逻辑来说UDP使用上不需要像TCP那样先建立连接才能使用,收就是收、发就

    2024年02月09日
    浏览(38)
  • 网络编程(三)—— UDP(单播、广播、组播)

    UDP协议的特点: 无连接 、不保证传输可靠(可能重复到达、失序、丢失、无字节流控制(数据传输快的会淹没慢的)) UDP传输 UDP 服务端(接收端)的搭建流程 UDP客户端(发送端)的搭建流程 通信流程 sendto 和 recvfrom 这两个函数一般在使用UDP协议时使用 sendto recvfrom 单播就

    2024年02月04日
    浏览(40)
  • SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

    TCP/IP网络通信协议最早是由 罗伯特·卡恩 (Robert E. Kahn)和 文顿·瑟夫 (Vinton G. Cerf)于1972年提出的,它是一个实际的协议栈。 OSI七层网络通信协议最早是 由国际标准化组织 (ISO)于1977年提出的,它是一个理论模型。TCP/IP网络通信协议由于其简单性和实用性,成为 事实上

    2024年01月22日
    浏览(68)
  • Linux网络编程系列之UDP广播

            1、 Linux网络编程系列之网络编程基础         2、 Linux网络编程系列之TCP协议编程         3、 Linux网络编程系列之UDP协议编程         4、 Linux网络编程系列之UDP广播         5、 Linux网络编程系列之UDP组播         6、 Linux网络编程系列之服务器编程——阻塞IO模型

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包