arduino - Arduino Ethernet shield 未正确接收 UDP 数据包
问题描述
我正在使用插入Adafruit Feather 328P的Adafruit Ethernet FeatherWing,我想从 Python 应用程序发送和接收 UDP 数据包。我正在使用库存的 Arduino UDP 代码来查看我发送的内容。这是我的 Python 代码:
def write_Arduino(self):
sock_readresp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_readresp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock_readresp.bind((self.config["DEFAULT"]["THIS_IP_ADDRESS"], int(self.config["DEFAULT"]["RECEIVE_PORT"] )))
sock_readresp.settimeout(.2)
MESSAGE = struct.pack("30c", b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9',
b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9',
b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9')
print("Message is {}".format(MESSAGE))
sock_read = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_read.setblocking(0)
sock_read.bind((self.config["DEFAULT"]["THIS_IP_ADDRESS"], 0))
sock_read.sendto(MESSAGE,(self.config["DEFAULT"]["ARDUINO_IP_ADDRESS"],int(self.config["DEFAULT"]["SEND_PORT"])))
sock_read.close()
我的设置是:
THIS_IP_ADDRESS = 192.168.121.1
ARDUINO_IP_ADDRESS = 192.168.121.2
SEND_PORT = 8888
RECEIVE_PORT = 32001
我已经更新了 Arduino 代码以反映这一点。当我发送这个数据包时,我可以通过我电脑上的 Wireshark 确认它
我似乎发送的正是我认为的。一串“012345678901234567890123456789”(Wireshark 以十六进制显示 ASCII 字符,如此处所示)。然而,在 Arduino 上接收它看起来像这样:
Received packet of size 30
From 192.168.121.1, port 64143
Contents:
012345678901234567890123D6789
第 25 和第 26 字节总是这样显示,我错过了实际数据。这里会发生什么?
解决方案
推荐阅读
- php - 如何更改htaccess中的URL
- excel - 按索引的 Excel 行聚合
- javascript - 使用图表js的圆环图内的饼图
- react-native - 在 react-native 中为所有智能手机用户实现蓝牙连接
- python-2.7 - 大熊猫条件下的子样本行
- angularjs - AngularJS 1.6:组件内的标签在手表触发时不更新
- java - 如果第一个 jLabel 被禁用,则将图标设置为第二个 jLabel
- matlab - 复制目录中的文件,但将它们另存为不同的文件类型
- ios - iOS Streaming:timedmetadata不返回整个值
- c# - 具有 nugets 构建目标的 .Net 标准项目