UDP广播:一对多数据发送

news/2024/4/24 13:24:05

一、怎么样进行UDP一对多数据发送?

1.很容易想到的一种方法是:如果一个client 要向其他其他100个server发送数据,那应该怎么办?如果我知道其他100个 server的ip地址 和 端口号就可以了,那么我们在一对一的进行发送就可以了。但是这种方法有点低效率了,接下来介绍高效的方式。

二、UDP通信中的广播

1.广播是向同一网络中的所有主机传输数据的方法

2.广播类型

        2.1 直接广播:IP地址中除网络地址外,其余主机地址均设置为1。比如:一个ip地址为:192.168.1.xxx 这个ip地址的前三个字节 192.168.1 为网络字节(net id),后面一个字节xxx 为主机字节(host id),这个时候需要把 xxx 设置成255(其余主机地址均设置为1)

        2.2 本地广播:无需要知道网络地址,使用 255.255.255.255 作为IP地址使用

3.区别:本地广播不经过路由器寻址,直接发送到本地主机

 

/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
   into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
   actual length.  Returns 0 on success, -1 for errors.  */
extern int getsockopt (int __fd, int __level, int __optname,
               void *__restrict __optval,
               socklen_t *__restrict __optlen) __THROW;

/* Set socket FD's option OPTNAME at protocol level LEVEL
   to *OPTVAL (which is OPTLEN bytes long).
   Returns 0 on success, -1 for errors.  */
extern int setsockopt (int __fd, int __level, int __optname,
               const void *__optval, socklen_t __optlen) __THROW;

server.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main()
{int server = 0;struct sockaddr_in saddr = {0};int client = 0;struct sockaddr_in remote = {0};socklen_t asize = 0;int len = 0;char buf[32] = "Software";int r = 0;int brd = 1;server = socket(PF_INET, SOCK_DGRAM, 0);if( server == -1 ){printf("server socket error\n");return -1;}saddr.sin_family = AF_INET;saddr.sin_addr.s_addr = htonl(INADDR_ANY);saddr.sin_port = htons(8888);if( bind(server, (struct sockaddr*)&saddr, sizeof(saddr)) == -1 ){printf("udp server bind error\n");return -1;}printf("udp server start success\n");remote.sin_family = AF_INET;// remote.sin_addr.s_addr = inet_addr("192.168.3.255");remote.sin_addr.s_addr = 0xFFFFFFFF;remote.sin_port = htons(9000);// brd = 0;setsockopt(server, SOL_SOCKET, SO_BROADCAST, &brd, sizeof(brd));while( 1 ){len = sizeof(remote);r = strlen(buf);sendto(server, buf, r, 0, (struct sockaddr*)&remote, len);sleep(1);}close(server);return 0;
}

client.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main()
{int sock = 0;struct sockaddr_in addr = {0};struct sockaddr_in remote = {0};int len = 0;char buf[128] = {0};char input[32] = {0};int r = 0;sock = socket(PF_INET, SOCK_DGRAM, 0);if( sock == -1 ){printf("socket error\n");return -1;}addr.sin_family = AF_INET;addr.sin_addr.s_addr = htonl(INADDR_ANY);addr.sin_port = htons(9000);if( bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1 ){printf("udp bind error\n");return -1;}remote.sin_family = AF_INET;remote.sin_addr.s_addr = inet_addr("127.0.0.1");remote.sin_port = htons(8888);while( 1 ){r = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr*)&remote, &len);if( r > 0 ){buf[r] = 0;printf("Receive: %s\n", buf);}else{break;}}close(sock);return 0;
}


https://www.xjx100.cn/news/444367.html

相关文章

UDP广播与多播

一、UDP广播 1、广播的概念 使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息&#xff0c;客户端只需要给出服务器的ip地址和端口号&#xff0c;然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在&#xff0c;或者能否…

基于 UDP 的 组播、广播详解

背景 有些时候我们在网络通信中也需要用到 组播(多播)、广播。现在我们来介绍如何实现。 建议&#xff1a;在此之前&#xff0c;关闭防火墙。 ubuntu&#xff1a; service ufw stop windows&#xff1a; 控制面板关闭 有关知识 基本概念 单播&#xff1a;两个主机间单对单的…

广播 UDP 发送与接收

发送方&#xff1a; /* * 文件名称&#xff1a;sendto.c * 创 建 者&#xff1a; * 创建日期&#xff1a;2022年09月08日 * 描 述&#xff1a; */ #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <arpa/…

UDP 单播、广播和多播

阅读目录(Content) 目录 一、UDP广播 二、UDP多播 1、多播&#xff08;组播&#xff09;的概念 2、广域网的多播 3、多播程序设计的框架 4、多播实现代码 三、UDP广播与单播 广播与单播的比较 使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器…

UDP广播的实现

一、广播的概念 广播&#xff1a;由一台主机向该主机所在子网内的所有主机发送数据的方式。 任何一个网段最后一个地址就是广播的地址 例如&#xff1a;192.168.5.103主机发送广播信息&#xff0c;那么&#xff0c;广播地址为192.168.5.255 则192.168.5.1~192.168.5.254所有…

UDP广播

概述&#xff1a; 网络上的广播指&#xff1a;由一台主机向该主机所在子网内&#xff08;同一个局域网&#xff09;的所有主机发送数据的方式。实现广播&#xff0c;离不开广播地址&#xff0c;同一个子网&#xff08;局域网&#xff09;的所有主机网卡都会接收所在网段广播地…

四波混频/三波混频

四波混频 四波混频是由约瑟夫森电感的类克尔非线性引起的&#xff0c;满足 L J − 1 &#xff08; ϕ &#xff09; ≈ &#xff08; 1 − γ ′ ϕ 2 &#xff09; L J 0 − 1 L_J^{-1}&#xff08;\phi&#xff09;\approx&#xff08;1-\gamma\phi^2&#xff09;L_{J0}^{-1…

UDP之广播

目录 一.IP地址简介二.广播的实现原理三.广播的Server代码实现 1.setsockopt&#xff1a;给socketfd开放广播权限2.指定发送给Client的端口 说明&#xff1a;UDP广播的Server端为什么要指定Client的端口具体实现四.UDP之广播C/S模型五.UDP之广播C/S模型代码 ServerClient 一.IP…