C语言 开始数据包上的 UDP 错误



当我向UDP包发送任何IP时,我的arduino上出现了错误。当我尝试将数据包发送到_targetIp时,有 2 个问题:

  1. 当从loop()呼叫时,udpSender.endPacket()永远冻结(第二次呼叫时,第一个呼叫很好(
  2. 当从setup()调用时,udpSender.beginPacket(...)返回 0

法典:

IPAddress _targetIp(192, 168, 59, 250);
int _sendPort = 4321;
EthernetUDP _udpSender;  
(...)
void sendUpd(int pinIndex, int value)
{
    // if I wrote something like this: 
    // udpSender.beginPacket(_udpSender.remoteIP(), _sendPort)
    // then is all fine
    if (_udpSender.beginPacket(_targetIp, _sendPort) != 1)
    {
      Serial.println("socket error!");
      return;
    }
    _udpSender.write(pinIndex);
    _udpSender.write("=");
    _udpSender.write(value);
    int sendState = _udpSender.endPacket(); // hang forever when called from "loop()"
    if ( sendState != 1 )
    {
      // enters with 0 as "sendState" when called from "setup()"
      Serial.print("send error: ");
      Serial.println( sendState );
    }    
}

谁能为我解释一下?

建立的解决方案:

  1. 不是呼叫_updSender.endPacket()冻结。读取(digitalRead(52)(中特定数字的代码会引起奇怪的反应。
  2. 我不知道怎么做,但是arduino检查主机是否还活着。如果无法访问主机,则_udpSender.endPacket()返回 0。

外植:将 IP 解析为 MAC 地址失败。因此,错误不是来自UDP(第4层OSI(。错误发生在数据链路层 (=2( 中,并解释了第 2 点。

最新更新