C语言实现UDP广播

UDP 广播发送方

1.创建套接字:使用socket()函数创建一个UDP套接字。

2.设置套接字选项:使用setsockopt()函数设置SO_BROADCAST选项以允许广播。

3.发送数据:使用sendto()函数将数据发送到特定的广播地址和端口。

c 复制代码
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <netinet/in.h>  
#include <sys/socket.h>  
  
#define PORT 8080  
#define BROADCAST_IP "255.255.255.255"  
  
int main() {  
    int sockfd;  
    struct sockaddr_in broadcastAddr;  
    char broadcast_data[] = "Hello, UDP Broadcast!";  
    int broadcast_len = strlen(broadcast_data) + 1;  
  
    // 创建UDP套接字  
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {  
        perror("socket() failed");  
        exit(EXIT_FAILURE);  
    }  
  
    // 设置广播选项  
    int opt = 1;  
    if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)) < 0) {  
        perror("setsockopt() failed");  
        exit(EXIT_FAILURE);  
    }  
  
    memset(&broadcastAddr, 0, sizeof(broadcastAddr));  
    broadcastAddr.sin_family = AF_INET;  
    broadcastAddr.sin_addr.s_addr = inet_addr(BROADCAST_IP);  
    broadcastAddr.sin_port = htons(PORT);  
  
    // 发送广播数据  
    if (sendto(sockfd, broadcast_data, broadcast_len, 0,  
               (struct sockaddr *)&broadcastAddr, sizeof(broadcastAddr)) < 0) {  
        perror("sendto() sent a failed");  
        exit(EXIT_FAILURE);  
    }  
  
    printf("Broadcast sent\n");  
  
    close(sockfd);  
    return 0;  
}

UDP 广播接收方

  1. 创建套接字:与发送方相同。
  2. 绑定套接字:接收方需要绑定到一个特定的IP地址和端口上,或者使用INADDR_ANY来监听所有接口的数据。
  3. 接收数据:使用recvfrom()函数接收数据。
相关推荐
鬼手点金8 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
Mr. zhihao8 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
格林威9 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
djjjx.9 小时前
【 C++ 】多态
开发语言·c++·多态
夜雪一千9 小时前
Python如何使用XPath定位没有特征的元素?无id、无class通用定位技巧
开发语言·python
艾莉丝努力练剑9 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
流浪0019 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·python
光影少年9 小时前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
SomeB1oody9 小时前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程
言乐612 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame