我正在使用树莓派开发一个机器人。我一直在寻找一个可以帮助我处理网络问题的库,例如数据包等。 所以我使用此代码来选择我收到的命令:
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上的连接阶段太简单了,无法制作一个库。
以下是简单的 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+事件驱动+套接字+程序/)