通过python使用UDP控制机器人

问题描述 投票:0回答:1

我正在使用树莓派开发一个机器人。我一直在寻找一个可以帮助我处理网络问题的库,例如数据包等。 所以我使用此代码来选择我收到的命令:

def selectPacket(x):
    if x == '00': 
        return '00'
    elif x == "01":
        Date = datetime.now()
        return str(Date.microsecond)
    elif x == "02":
        return '98'
    elif x == "03":
        return '98'
    elif x == "04":
        return '98'
    elif x == "05":
        return '98'
    else: 
        return '99'

我确信有一个库可以使用python制作快速服务器和客户端,我想使用UDP,因为我将使用的连接会非常不稳定,所以tcp是不可能的。

python raspberry-pi udp udpclient
1个回答
0
投票

因为控制机器人取决于复杂的部件,例如它们有多少条腿,有多少个关节等等,我认为没有您想要的库。而且Python上的连接阶段太简单了,无法制作一个库。

以下是简单的 UDP 客户端/服务器代码:

UDP 服务器

import socket, traceback
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('', 5000))

print "Listening for broadcasts..."

while 1:
    try:
        message, address = s.recvfrom(8192)
        print "Got message from %s: %s" % (address, message)
        s.sendto("Hello from server", address)
        print "Listening for broadcasts..."
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        traceback.print_exc()

UDP 客户端

import socket, sys
dest = ('<broadcast>', 5000)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto("Hello from client", dest)
print "Listening for replies."

while 1:
    (buf, address) = s.recvfrom(2048)
    if not len(buf):
        break
    print "Received from %s: %s" % (address, buf)
    s.sendto("echo", dest)

另外,如果您有复杂的逻辑,需要分成多个部分,可以是通信、控制或I/O,请参考事件驱动编程:http://etutorials.org/Programming/Python+tutorial/Part+IV +网络+和+Web+编程/第+19章。+套接字+和+服务器端+网络+协议+模块/19.3+事件驱动+套接字+程序/

© www.soinside.com 2019 - 2024. All rights reserved.