原始 LWIP UDP 广播
Raw LWIP UDP Broadcast
所以,我有一个有效的 TCP Echo 示例。我试图完成的是能够接收 TCP 传输,以及通过 TCP 和 UDP 发送数据。我正在使用原始 LWIP 并将有一个我将与之交互的 PC 应用程序。我希望能够按需发送 UDP 广播或 TCP 单播。我遇到了从 sendto 函数得到 -6 ( ERR_VAL -6 /* Illegal value. */) 错误的问题。关于我可能遗漏的任何输入都会有所帮助。我获得 UDP 广播工作的第一步是在这里(目前我刚刚将此功能添加到 echo.c 的底部):
void echo_tx()
{
// Attempt a UDP Broadcast
// l_udp_pcb
err_t wr_err = ERR_OK;
struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, 1024, PBUF_RAM);
l_udp_pcb = udp_new();
wr_err = udp_bind(l_udp_pcb, IP_ADDR_ANY, 0);
wr_err = udp_connect(l_udp_pcb, IP_ADDR_ANY, 10);
unsigned char buffer_send[1024] = "My Name Is What";
p->payload = buffer_send;
p->len = 1024;
p->tot_len = 1024;
wr_err = udp_sendto(l_udp_pcb,p, IP_ADDR_BROADCAST, 10);
if(wr_err != ERR_OK)
{
wr_err = udp_sendto(l_udp_pcb,p, IP_ADDR_BROADCAST, 10);
}
pbuf_free(p);
}
用udp_new()
分配后需要在PCB上设置广播选项:
ip_set_option(l_udp_pcb, SOF_BROADCAST);
这是绑定后必须发送数据的方式
char msg[] = "testingrg";
struct pbuf *p;
while (1)
{
//count++;
//Allocate packet buffer and send to the remote host
p = pbuf_alloc(PBUF_TRANSPORT, sizeof(lwiperf_txbuf_const), PBUF_RAM);
memcpy(p->payload, &lwiperf_txbuf_const, sizeof(lwiperf_txbuf_const));
err1 = udp_send(udpecho_raw_pcb, p);
pbuf_free(p); //De-allocate packet buffer
//osDelay(200);
}
所以,我有一个有效的 TCP Echo 示例。我试图完成的是能够接收 TCP 传输,以及通过 TCP 和 UDP 发送数据。我正在使用原始 LWIP 并将有一个我将与之交互的 PC 应用程序。我希望能够按需发送 UDP 广播或 TCP 单播。我遇到了从 sendto 函数得到 -6 ( ERR_VAL -6 /* Illegal value. */) 错误的问题。关于我可能遗漏的任何输入都会有所帮助。我获得 UDP 广播工作的第一步是在这里(目前我刚刚将此功能添加到 echo.c 的底部):
void echo_tx()
{
// Attempt a UDP Broadcast
// l_udp_pcb
err_t wr_err = ERR_OK;
struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, 1024, PBUF_RAM);
l_udp_pcb = udp_new();
wr_err = udp_bind(l_udp_pcb, IP_ADDR_ANY, 0);
wr_err = udp_connect(l_udp_pcb, IP_ADDR_ANY, 10);
unsigned char buffer_send[1024] = "My Name Is What";
p->payload = buffer_send;
p->len = 1024;
p->tot_len = 1024;
wr_err = udp_sendto(l_udp_pcb,p, IP_ADDR_BROADCAST, 10);
if(wr_err != ERR_OK)
{
wr_err = udp_sendto(l_udp_pcb,p, IP_ADDR_BROADCAST, 10);
}
pbuf_free(p);
}
用udp_new()
分配后需要在PCB上设置广播选项:
ip_set_option(l_udp_pcb, SOF_BROADCAST);
这是绑定后必须发送数据的方式
char msg[] = "testingrg";
struct pbuf *p;
while (1)
{
//count++;
//Allocate packet buffer and send to the remote host
p = pbuf_alloc(PBUF_TRANSPORT, sizeof(lwiperf_txbuf_const), PBUF_RAM);
memcpy(p->payload, &lwiperf_txbuf_const, sizeof(lwiperf_txbuf_const));
err1 = udp_send(udpecho_raw_pcb, p);
pbuf_free(p); //De-allocate packet buffer
//osDelay(200);
}