当我向任何 IP 发送 UDP 包时,我的 arduino 上出现错误。
当我尝试向 _targetIp
发送数据包时出现 2 个问题:
- 当从
loop()
调用时,udpSender.endPacket()
永远卡住(在第二次调用时,第一次调用没问题) - 当从
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 );
}
}
谁能帮我解释一下吗?
最佳答案
创建的解决方案:
_updSender.endPacket()
调用并未卡住。读取 (digitalRead(52)
) 中特定数字的代码会导致奇怪的 react 。- 我不知道怎么做,但arduino会检查主机是否还活着。如果主机无法访问,
_udpSender.endPacket()
返回 0。
解释: 将 IP 解析为 MAC 地址失败。所以错误不是来自 UDP(OSI 第 4 层)。错误发生在数据链路层 (=2) 并解释了第 2 点。
关于c - beginPacket 上的 UDP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482477/