广播通信(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助手提供,问题来源于学员提问