局域网广播测试
目录头文件/宏定义
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
函数
/********************************************************************
*
* name : main
* function :* 这是一个测试UDP套接字的广播属性的案例,本程序用于作为UDP服务器,服务器向网络号为
* 192.168.64的C类网络的广播地址192.168.64.255发送消息,测试结果应该为处于该网络的所有
* 主机都会收到相关的数据包。
* argument :
* @n :argc
* @n :argv
* retval : none
* author : [email protected]
* date : 2024年6月4日
* note :
*
* *****************************************************************/
int main(int argc, char const *argv[])
{
// 1.创建UDP套接字
int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (udp_socket == -1)
{
fprintf(stderr, "udp socket error,errno:%d,%s\n", errno, strerror(errno));
exit(1);
}
// 2.获取UDP套接字的广播属性
int flag = -1;
socklen_t len = 4;
getsockopt(udp_socket, SOL_SOCKET, SO_BROADCAST, (void *)&flag, &len);
printf("flag = %d\n", flag); // 0
// 3.设置UDP套接字的广播属性
int optval = 1;
setsockopt(udp_socket, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval));
// 4.获取UDP套接字的广播属性
flag = -1;
getsockopt(udp_socket, SOL_SOCKET, SO_BROADCAST, (void *)&flag, &len);
printf("flag = %d\n", flag); // 非0
// 3.利用循环每隔5s想广播地址发送数据包
char buf[128] = "I am teacher,this is test packet";
struct sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET; // 协议族,是固定的
dest_addr.sin_port = htons(atoi(argv[1])); // 服务器端口,必须转换为网络字节序
dest_addr.sin_addr.s_addr = inet_addr(argv[2]); // 服务器地址 "192.168.64.xxx"
while (1)
{
sendto(udp_socket, buf, strlen(buf), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
sleep(5);
}
return 0;
}
标签:udp,addr,flag,局域网,广播,测试,include,socket
From: https://www.cnblogs.com/ljw-boke/p/18231524