【问题标题】:Send socket message to different UDP connections with same IP and port将套接字消息发送到具有相同 IP 和端口的不同 UDP 连接
【发布时间】:2018-05-04 20:57:00
【问题描述】:

操作系统:Ubuntu 16.04

我正在尝试创建一个可以控制多个 Ryze Tello 无人机的 Python 程序。这些是非常简单的无人机,可以通过 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 是否可行。但是,由于在我的计算机上仍然对连接进行了不同的处理,因此必须有一种方法可以分别向无人机发送命令。至于如何,我不确定,因此我为什么要寻求帮助。

【问题讨论】:

    标签: sockets ip port dji-sdk


    【解决方案1】:

    为每架无人机创建一个单独的socket 对象,其中每个socket 都被bind()'ed 到无人机连接到的特定 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))
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 2011-09-20
      • 2019-07-04
      • 2018-06-03
      相关资源
      最近更新 更多