实现默认UDP进行广播

This commit is contained in:
OPTOC
2025-08-29 14:29:59 +08:00
parent 5e9b0a51cb
commit 5c37aac938
2 changed files with 24 additions and 1 deletions

View File

@@ -200,6 +200,14 @@ static int _port_udp_write(sb_data_port_t *port, const void *data, uint32_t size
{ {
__port_data_t *port_data = port->data; __port_data_t *port_data = port->data;
int err = sendto(port_data->sock, data, size, 0, (struct sockaddr *)&port_data->udp.dest_addr, sizeof(port_data->udp.dest_addr)); int err = sendto(port_data->sock, data, size, 0, (struct sockaddr *)&port_data->udp.dest_addr, sizeof(port_data->udp.dest_addr));
// char ip_str[INET6_ADDRSTRLEN]; // 兼容 IPv4 和 IPv6
// uint16_t test = 0;
// struct sockaddr_in *addr4 =(struct sockaddr_in *)&port_data->udp.dest_addr;
// inet_ntop(AF_INET, &addr4->sin_addr, ip_str, sizeof(ip_str));
// test = ntohs(addr4->sin_port);
// SYS_LOG_WRN("IPv4: %s:%u\n", ip_str, test);
if (err < 0) if (err < 0)
{ {
SYS_LOG_WRN("Error occurred during sending: errno %d", errno); SYS_LOG_WRN("Error occurred during sending: errno %d", errno);
@@ -1206,6 +1214,20 @@ void socket_inet_server_init(void)
slist_init_list(&p_cm->udp_list); slist_init_list(&p_cm->udp_list);
slist_init_list(&p_cm->tcp_list); slist_init_list(&p_cm->tcp_list);
} }
/**
* @brief 设置 udp 的广播地址 以及端口
*
* @param port 接口
*/
void set_udp_broadcast_add(sb_data_port_t* port)
{
__port_data_t *port_data = port->data;
struct sockaddr_in *dest_addr_ipv4 = (struct sockaddr_in *)&port_data->udp.dest_addr;
dest_addr_ipv4->sin_family = AF_INET; // IPv4 协议族
dest_addr_ipv4->sin_port = htons(port_data->listen_port); // 端口
dest_addr_ipv4->sin_addr.s_addr = inet_addr("255.255.255.255"); // 例如广播地址
}
/** /**
* @brief 创建一个 udp 本地服务监听端口,同时为已启动监听的端口绑定一个数据接口。 * @brief 创建一个 udp 本地服务监听端口,同时为已启动监听的端口绑定一个数据接口。
@@ -1229,6 +1251,7 @@ sb_data_port_t *socket_inet_server_bind_udp(uint16_t listen_port, const socket_s
SYS_LOG_INF("bind udp: %p", port); SYS_LOG_INF("bind udp: %p", port);
} }
set_udp_broadcast_add(port);
return port; return port;
} }

View File

@@ -183,7 +183,7 @@ uint8_t wifi_init(init_device_t *port)
wifi_init_t init_struct = { wifi_init_t init_struct = {
.ap = { .ap = {
.ssid = "Sertorf", /**< SSID of soft-AP. If ssid_len field is 0, this must be a Null terminated string. Otherwise, length is set according to ssid_len. */ .ssid = "Sertorf", /**< SSID of soft-AP. If ssid_len field is 0, this must be a Null terminated string. Otherwise, length is set according to ssid_len. */
.password = "12345678", /**< Password of soft-AP. */ .password = "", /**< Password of soft-AP. */
.ip_v4 = {192, 168, 1, 1}, .ip_v4 = {192, 168, 1, 1},
.gw_v4 = {192, 168, 1, 1}, .gw_v4 = {192, 168, 1, 1},
.mask_v4 = {255, 255, 255, 0}, .mask_v4 = {255, 255, 255, 0},