ZBLOG

广播端代码怎么写

广播通信(Broadcast)通常用于网络编程中,将数据包发送到同一子网内的所有设备。以下是不同场景下的广播端代码示例:


1. UDP 广播发送端(C++ 示例)

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    // 创建 UDP socket
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) {
        perror("socket creation failed");
        return -1;
    }

    // 设置广播权限
    int broadcastEnable = 1;
    if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)) == -1) {
        perror("setsockopt failed");
        close(sockfd);
        return -1;
    }

    // 目标地址(广播地址)
    struct sockaddr_in destAddr;
    memset(&destAddr, 0, sizeof(destAddr));
    destAddr.sin_family = AF_INET;
    destAddr.sin_port = htons(8888);  // 目标端口
    destAddr.sin_addr.s_addr = inet_addr("255.255.255.255"); // IPv4 广播地址

    // 发送数据
    const char* message = "Hello Broadcast!";
    if (sendto(sockfd, message, strlen(message), 0,
               (struct sockaddr*)&destAddr, sizeof(destAddr)) == -1) {
        perror("sendto failed");
        close(sockfd);
        return -1;
    }

    std::cout << "Broadcast message sent." << std::endl;
    
close(sockfd);
return 0;
}

2. Python UDP 广播发送端

import socket

# 创建 UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

# 目标地址和端口
dest_addr = ("255.255.255.255", 8888)

# 发送数据
message = b"Hello Broadcast!"
sock.sendto(message, dest_addr)
print("Broadcast message sent.")

sock.close()

关键点说明

  • 广播地址:IPv4中通常用 255.255.255.255(受限广播)或子网定向广播(如 192.168.1.255)。
  • SO_BROADCAST:必须显式启用该选项,否则会报错。
  • UDP协议:广播一般基于无连接的UDP协议。

3. TCP/IP不支持广播

TCP是面向连接的协议,无法直接支持广播。若需群发消息,可考虑:

  • 组播(Multicast):使用 224.0.0.0~239.255.255.255 的D类地址。
  • 应用层实现:维护一个客户端列表,逐个发送。

需要更具体的场景说明吗?例如局域网发现、实时音视频等。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8360

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?