Arduino 通过以太网解析 UDP 数据包,其中包含乱码

Arduino parses UDP packets through Ethernet with gibberish in it

Arduino Yun(内置以太网)连接到 PC(通过以太网),PC 连接(通过 WiFi)到我的路由器。设置为从另一台 PC(在同一网络上)接收 UDP 数据包。该 PC 使用 netcat 发送这些数据包。

Arduino Yun 会打印接收到的数据包,但也会打印一些乱码。

我很确定它与之前传输缓冲区中的剩余数据有关。这是我发送的:

然后我写“a”并按下回车键(同样来自 netcat),Arduino 得到这个:

这是我的代码:

char udp_buffer[UDP_TX_PACKET_MAX_SIZE];

void setup() {
  Bridge.begin();       
  Udp.begin(9911); 
  Serial.begin(9600);
  if (!rf95.init())
    Serial.println("init failed");     
rf95.setTxPower(20, false);

IPAddress IP(192, 168, 1, 10);

}

void loop() {
   int udp_received = Udp.parsePacket();
   if (udp_received) {
      Udp.read(udp_buffer, UDP_TX_PACKET_MAX_SIZE);
      Serial.println(udp_buffer);



  }
}

您只发送了 5 或 6 个字符“test\r\n”。其余为随机内存内容

parsePacket should be the count of received characters, but the implementation in BridgeUdp 的 return 值错误,成功时 return 始终为 1。

您可以使用 BridgeUdp.available() 来获取计数。

void loop() {
  if (Udp.parsePacket()) {
    int udp_received = Udp.available();
    char udp_buffer[udp_received + 1];
    Udp.read(udp_buffer, udp_received);
    udp_buffer[udp_received] = '[=10=]';
    Serial.println(udp_buffer);
  }
}