目前我有一个带有以太网屏蔽的 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();
}
我怎样才能让草图发送正确的消息?
当然,我非常愿意提供更多信息。