发送数据包后的UDP端口arduino增量

时间:2017-06-26 04:34:00

标签: sockets networking arduino udp ethernet

我正在编写一个代码来传递两个arduinos,一个带有以太网屏蔽,另一个带有ENC28J60以太网模块。我不是arduino的新手,也不是智者/专家。但我是一个完整的 - 而不是一个UDP通信的新手。

这是一个问题:我的代码工作正常,它从一个发送和接收UDP数据包,反之亦然。但是在发送每个数据包之后,它会增加一个“Udp.remotePort”值(从“udp-reader”端查看)。它从1024开始到~32000(并在达到最高值后重新开始)。我已经研究了UDP,我明白第一个0-1023是为特定服务保留的。 80 http,21 ftp。但我认为它不应该在每次发送后递增。或者它应该?

我不粘贴代码,因为我说它工作正常。我只是想知道你的经历会出现什么问题。

我用来写数据包的句子是:

udp.beginPacket(IPAddress([ip address]), [port no]);

我正在使用的库:

UIPEthernet.h https://github.com/UIPEthernet/UIPEthernet for ENC28J60 

Ethernet.h用于以太网屏蔽

编辑:这是UDP发送者的代码(ENC28J60)。基本上是库的示例代码,因为我说它在通信方面正常工作。我只更改了IP:192.168.1.50是UDP发送者,192.168.1.51是UDP目的地。

#include <UIPEthernet.h>

EthernetUDP udp;
unsigned long next;

void setup() {

  Serial.begin(115200);

  uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};

  Ethernet.begin(mac,IPAddress(192,168,1,51));
// Also i used: Ethernet.begin(mac,IPAddress(192,168,1,51), 5000); 
// with the same result

  next = millis()+2000;
}

void loop() {

  int success;
  int len = 0;

  if (((signed long)(millis()-next))>0)
    {
      do
        {
          success = udp.beginPacket(IPAddress(192,168,1,50),5000);
          Serial.print("beginPacket: ");
          Serial.println(success ? "success" : "failed");
          //beginPacket fails if remote ethaddr is unknown. In this case an
          //arp-request is send out first and beginPacket succeeds as soon
          //the arp-response is received.
        }
      while (!success && ((signed long)(millis()-next))<0);
      if (!success )
        goto stop;

      success = udp.write("hello world&from&arduino");

      Serial.print("bytes written: ");
      Serial.println(success);

      success = udp.endPacket();

      Serial.print("endPacket: ");
      Serial.println(success ? "success" : "failed");

      do
        {
          //check for new udp-packet:
          success = udp.parsePacket();
        }
      while (!success && ((signed long)(millis()-next))<0);
      if (!success )
        goto stop;

      Serial.print("received: '");
      do
        {
          int c = udp.read();
          Serial.write(c);
          len++;
        }
      while ((success = udp.available())>0);
      Serial.print("', ");
      Serial.print(len);
      Serial.println(" bytes");

      //finish reading this packet:
      udp.flush();

      stop:
      udp.stop();
      next = millis()+2000;
    }
}

编辑2:这是使用SocketTest listening on port 5000, and after a packet received, the next one arrives with the remote port incremented on 1 each time

捕获测试

1 个答案:

答案 0 :(得分:1)

您必须为每个发送的数据报创建一个新的UDP套接字。不要那样做。在应用程序的生命周期中使用相同的。