目录
1、UDP广播通信
单播:数据包发送方式只有一个接受方
广播:同时发给局域网中的所有主机
只有用户数据报套接字(使用UDP协议)才能广播
以192.168.63.0网段为例:..***.255 代表该网段的广播地址。发送给该地址的数据包被所有主机接收
实现广播的过程(UDP协议)

广播发送端: ----> 添加广播属性
1、建立套接字
2、设置该套接字允许进行广播(将广播属性添加进去),填充服务端的结构体
3、将数据发送到广播地址中(sendto(buf,192.168.x.x))
4、关闭
接收端(服务器): ----> 绑定所有主机(INADDR_ANY)
1、建立套接字
2、填充服务端的结构体,绑定广播地址和端口号(struct sockaddr_in serveraddr,serveraddr.sin_addr.s_addr = htonl(INADDR_ANY)))(需要设置端口复用) 3、创建结构体存放客户端IP和端口,接收数据
4、关闭
//2、将广播属性添加到套接字中 int on = 1; setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on)); ownaddr.sin_addr.s_addr = htonl(INADDR_ANY); //INADDR_ANY代表本机所有地址 常用方法
广播的测试代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define GUANG_IP "192.168.5.255" //---> 你所在局域网的广播地址
#define GUANG_PORT 60000
//udp广播server.c
int main(int argc,char** argv)
{
//如果手动输入IP和地址
// if(argc != 3)
// {
// perror("./a.out IP PORT");
// return -1;
// }
int ret = 0;
char buf[1024] = { 0 };
//1、创建一个套接字文件描述符
int socketfd = socket(AF_INET,SOCK_DGRAM,0);
if(socketfd == -1)
{
perror("socket fail");
return -1;
}
//设置端口复用
int optval = 1;

本文介绍了UDP协议中的广播和组播通信方式,包括广播通信中如何向局域网内的所有主机发送数据,以及组播通信中如何向特定组内的主机发送数据。提供了C语言实现的广播和组播发送端和接收端的示例代码,详细解释了设置套接字、绑定IP和端口、发送与接收数据的步骤,并讨论了IP地址的分类。
最低0.47元/天 解锁文章
2514

被折叠的 条评论
为什么被折叠?



