c - beginPacket 上的 UDP 错误

标签 c arduino

当我向任何 IP 发送 UDP 包时,我的 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)) 中特定数字的代码会导致奇怪的 react 。
  2. 我不知道怎么做,但arduino会检查主机是否还活着。如果主机无法访问,_udpSender.endPacket() 返回 0。

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

关于c - beginPacket 上的 UDP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482477/

相关文章:

c - 在 emacs 中将预处理器指令缩进为 C 代码

python - Python脚本与Arduino之间的一次串口通信-多次读写

Python 自动选择串口(适用于 Arduino)

c++ - 如何在 Arduino 中获得连续的 LED 闪光灯? [C/C++]

javascript - JavaScript读取串口数据的方法

c# - 通过套接字 API 将 C 结构体传输到 C# 结构体

c - 如何使用环绕查找 C 中字符之间的距离

python - 服务器无法解码 c 字符串

python - 从 Python 传递字符串时 PyArg_ParseTuple 的段错误

arduino - 我的程序中需要多线程吗?