Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 将套接字消息发送到具有相同IP和端口的不同UDP连接_Sockets_Ip_Port_Dji Sdk - Fatal编程技术网

Sockets 将套接字消息发送到具有相同IP和端口的不同UDP连接

Sockets 将套接字消息发送到具有相同IP和端口的不同UDP连接,sockets,ip,port,dji-sdk,Sockets,Ip,Port,Dji Sdk,操作系统:Ubuntu 16.04 我正在尝试创建一个Python程序,可以控制多架Ryze Tello无人机。这些是非常简单的无人机,可以通过Wi-Fi UDP端口连接计算机并通过文本命令发送来控制 例如,这是一个简单的程序,在连接到无人机的Wi-Fi网络后,它将向无人机发送“起飞”命令 import socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto('command', 0, ('192.16

操作系统:Ubuntu 16.04

我正在尝试创建一个Python程序,可以控制多架Ryze Tello无人机。这些是非常简单的无人机,可以通过Wi-Fi UDP端口连接计算机并通过文本命令发送来控制

例如,这是一个简单的程序,在连接到无人机的Wi-Fi网络后,它将向无人机发送“起飞”命令

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))

现在,我的目标是能够同时向多个这样的无人机发送命令(例如,让它们执行计划好的“舞蹈”程序)。我有多个Wi-Fi加密狗连接到我的电脑,每个加密狗连接到一个单独的无人机。然而,问题是,如上所示,每架无人机都有一个固定的IP和端口。我曾试图通过SSH连接到无人机上以更改其IP,但没有成功,支持热线也不确定是否可以使用Tello。然而,由于我的计算机上仍然清晰地处理连接,因此必须有一种方法可以分别向无人机发送命令。至于如何,我不确定,因此我请求帮助的原因。

为每个无人机创建一个单独的
socket
对象,其中每个
socket
bind()
”绑定到无人机连接的特定WiFi适配器的本地IP。然后可以根据需要通过每个
套接字
sendto()
命令。即使所有无人机都有相同的IP和端口,
绑定
,也会确保每个命令都通过适当的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))
...