当我向UDP包发送任何IP时,我的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)
(中特定数字的代码会引起奇怪的反应。 - 我不知道怎么做,但是arduino检查主机是否还活着。如果无法访问主机,则
_udpSender.endPacket()
返回 0。
外植:将 IP 解析为 MAC 地址失败。因此,错误不是来自UDP(第4层OSI(。错误发生在数据链路层 (=2( 中,并解释了第 2 点。