目前我有一个以太网盾连接到路由器的Arduino板。我的电脑通过Wi-Fi连接到这台路由器。我的主板和我的电脑互相发送UDP消息。我的电脑是客户端,而主板是服务器。但是我注意到,当我从计算机发送更长的UDP消息,然后发送更短的UDP消息时,Arduino接受较短的消息,然后接着来自较长消息的剩余位。例如:如果我从我的电脑发送“Hello World”,然后是“测试”; Arduino将不会将第二条消息读为“Test”,而是将其称为“Testo World”。Arduino:UDP发送产生额外的字符
我以为也许是来自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();
}
我怎样才能得到草图发送正确的消息?
当然我很乐意提供更多信息。
我会开始使用Wireshark来查看消息是否被传输错误。如果传输正常,它必须在接收端。 – 2012-07-19 09:13:55
好的建议;令人惊讶的是,wireshark显示从电脑发送的信息没有错误。也许我的问题在于Arduino。感谢那! – 2012-07-20 01:14:33
你可以显示你的UDP类的代码吗? – 2012-07-20 10:09:23