gpt4 book ai didi

Python sendto() 未执行

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:39 25 4
gpt4 key购买 nike

我有一个程序,它通过 UDP 接受坐标,移动一些设备,然后在工作完成时进行回复。

我似乎和这个人有同样的问题:

Python sendto doesn't seem to send

我的代码在这里:

import socket
import struct
import traceback
def main():


sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('',15000))
reply_sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


while True:
try:
data,addr = sock.recvfrom(1024)
if data is not None:
try:
coords = struct.unpack('>dd',data)

#Stuff happens here

print(f'moved probe to {coords}')

reply_sock.sendto(bytearray.fromhex('B'),('10.0.0.32',15001))
except:
traceback.print_exc()
try:
reply_sock.sendto(bytearray.fromhex('D'),('10.0.0.32',15001))
except:
traceback.print_exc()
break
except:
pass

程序的行为就像刚刚传递了 sendto 调用一样;它接受数据包,执行打印语句,然后循环返回(它可以多次执行循环但从不回复)。我正在查看wireshark,但没有数据包被发送出站。不会抛出任何错误。

有什么想法为什么会发生这种情况吗?

最佳答案

来自the documentation :

The string must contain two hexadecimal digits per byte, with ASCII whitespace being ignored.

所以会发生这种情况:

$ python3
Python 3.6.6 (default, Sep 12 2018, 18:26:19)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> bytearray.fromhex('B')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: non-hexadecimal number found in fromhex() arg at position 1
>>>

试试这个:

reply_sock.sendto(bytearray.fromhex('0B'),('10.0.0.32',15001))

如果这就是你的意思。

请注意,您的 except 正在捕获所有异常,而不仅仅是您期望的异常,因此您不会看到您导致的错误。考虑在此处使用类似于 except OSError 的内容。

此外,考虑减少 try 部分中的代码量:

coords = struct.unpack('>dd',data)

#Stuff happens here

print(f'moved probe to {coords}')

bytes_to_send = bytearray.fromhex('0B')
try:
reply_sock.sendto(bytes_to_send,('10.0.0.32',15001))
except IOError as e1:
print(e1)
traceback.print_exc()

bytes_to_send = bytearray.fromhex('0D')
try:
reply_sock.sendto(bytes_to_send,('10.0.0.32',15001))
except IOError as e2:
print(e2)
traceback.print_exc()
break

这样您就可以保护您想要保护的代码。

关于Python sendto() 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com