c - 原始 LWIP UDP 广播

标签 c udp embedded broadcast lwip

所以,我有一个有效的 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);

关于c - 原始 LWIP UDP 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395214/

相关文章:

c - 如何从源代码编译我自己的glibc C标准库并使用它?

windows - 在 Windows 下更改默认套接字缓冲区大小

android - x-loader ECC错误

embedded - ARM OMAP3515 处理器中除零异常

c - 为什么我的 C 代码不打印任何输出?

c - GNU C 中的激活记录(嵌套函数)

java - 在 Java 中正确解析 BitTorrent UDP 通告响应

c++ - 在 gRPC 中使用 UDP

并发访问结构成员

c - 如何在 gdb 中 fork() ed 的不同进程之间切换?