将套接字消息发送到具有相同 IP 和端口的不同 UDP 连接
Send socket message to different UDP connections with same IP and port
OS: Ubuntu 16.04
我正在尝试创建一个可以控制多个 Ryze Tello 无人机的 Python 程序。这些是非常简单的无人机,可以通过 Wi-Fi UDP 端口连接计算机并通过文本命令发送来控制它们。
例如,这是一个简单的程序,在连接到无人机的 Wi-Fi 网络后,它会简单地向无人机发送命令 'takeoff'。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto('command', 0, ('192.168.10.1', 8889))
sock.sendto('takeoff', 0, ('192.168.10.1', 8889))
现在,我的目标是能够同时向多个此类无人机发送命令(例如,让它们执行计划好的 "dance" 例程)。我有多个 Wi-Fi 适配器连接到我的电脑,每个都连接到一架无人机。但是,问题是每架无人机都有固定的 IP 和端口,如上所示。我曾尝试通过 SSH 连接到无人机以更改其 IP,但没有成功,支持热线不确定 Tello 是否可行。然而,由于连接在我的电脑上仍然被明确对待,所以必须有一种方法可以分别向无人机发送命令。至于如何,我不确定,因此我为什么要寻求帮助。
为每架无人机创建一个单独的 socket
对象,其中每个 socket
都 bind()
连接到无人机所连接的特定 WiFi 适配器的本地 IP。然后,您可以根据需要通过每个 socket
sendto()
命令。即使无人机都具有相同的 IP 和端口,bind
也会确保每个命令都通过适当的 WiFi 网络发送到它所针对的正确无人机。
像这样:
import socket
sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock1.bind(('WiFi_1_IP', 8889));
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock2.bind(('WiFi_2_IP', 8889));
sock3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock3.bind(('WiFi_3_IP', 8889));
...
sock1.sendto('command', 0, ('192.168.10.1', 8889))
sock2.sendto('command', 0, ('192.168.10.1', 8889))
sock3.sendto('command', 0, ('192.168.10.1', 8889))
...
sock1.sendto('takeoff', 0, ('192.168.10.1', 8889))
sock2.sendto('takeoff', 0, ('192.168.10.1', 8889))
sock3.sendto('takeoff', 0, ('192.168.10.1', 8889))
...
OS: Ubuntu 16.04
我正在尝试创建一个可以控制多个 Ryze Tello 无人机的 Python 程序。这些是非常简单的无人机,可以通过 Wi-Fi UDP 端口连接计算机并通过文本命令发送来控制它们。
例如,这是一个简单的程序,在连接到无人机的 Wi-Fi 网络后,它会简单地向无人机发送命令 'takeoff'。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto('command', 0, ('192.168.10.1', 8889))
sock.sendto('takeoff', 0, ('192.168.10.1', 8889))
现在,我的目标是能够同时向多个此类无人机发送命令(例如,让它们执行计划好的 "dance" 例程)。我有多个 Wi-Fi 适配器连接到我的电脑,每个都连接到一架无人机。但是,问题是每架无人机都有固定的 IP 和端口,如上所示。我曾尝试通过 SSH 连接到无人机以更改其 IP,但没有成功,支持热线不确定 Tello 是否可行。然而,由于连接在我的电脑上仍然被明确对待,所以必须有一种方法可以分别向无人机发送命令。至于如何,我不确定,因此我为什么要寻求帮助。
为每架无人机创建一个单独的 socket
对象,其中每个 socket
都 bind()
连接到无人机所连接的特定 WiFi 适配器的本地 IP。然后,您可以根据需要通过每个 socket
sendto()
命令。即使无人机都具有相同的 IP 和端口,bind
也会确保每个命令都通过适当的 WiFi 网络发送到它所针对的正确无人机。
像这样:
import socket
sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock1.bind(('WiFi_1_IP', 8889));
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock2.bind(('WiFi_2_IP', 8889));
sock3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock3.bind(('WiFi_3_IP', 8889));
...
sock1.sendto('command', 0, ('192.168.10.1', 8889))
sock2.sendto('command', 0, ('192.168.10.1', 8889))
sock3.sendto('command', 0, ('192.168.10.1', 8889))
...
sock1.sendto('takeoff', 0, ('192.168.10.1', 8889))
sock2.sendto('takeoff', 0, ('192.168.10.1', 8889))
sock3.sendto('takeoff', 0, ('192.168.10.1', 8889))
...