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);
}
}
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);
}
}