目前我有一个带有以太网屏蔽的 Arduino 板连接到路由器。我的电脑通过 Wi-Fi 连接到这个路由器。我的开发板和我的计算机来回发送UDP消息。我的电脑是客户端,板子是服务器。但是我注意到,当我从我的计算机发送一个较长的 UDP 消息,然后是一个较短的 UDP 消息时,Arduino 接受较短的消息,然后是较长消息中的剩余位。
例如:如果我从我的计算机发送“Hello World”,然后是“Test”;Arduino 不会将第二条消息读为“Test”,而是:“Testo World”。
我认为可能首先是 Arduino 端的问题。Arduino 将消息临时存储在一个名为packetBuffer
. 我尝试在每次收到新消息之前清除此缓冲区。缓冲区会清除,但随后我会再次收到错误消息。
所以我认为罪魁祸首是计算机,客户端。在计算机端,我有一个发送 UDP 消息的处理草图。下面的例子不是草图本身;然而,到目前为止,这是一个更简单的例子,它仍然提供了我在原始草图中描述的确切症状。
import hypermedia.net.*;
UDP udp; // define the UDP object
void setup() {
udp = new UDP( this, 6000 ); // Create a new datagram connection on port 6000
//udp.log( true ); // <-- printout the connection activity
udp.listen( true ); // and wait for incoming message
}
void keyPressed() {
String IPaddress = "192.168.1.177"; // The remote IP address
int port = 8888; // The destination port
if (keyCode == UP)
{
udp.send("Test", IPaddress, port );
}
else
if (keyCode == DOWN)
{
udp.send("Hello World", IPaddress, port );
}
}
void receive( byte[] data ) { // <-- default handler
//void receive( byte[] data, String IPaddress, int port ) { // <-- extended handler
for(int i=0; i < data.length; i++)
print(char(data[i]));
println();
}
我怎样才能让草图发送正确的消息?
当然,我非常愿意提供更多信息。