在python中套接字服务器循环和等待串行命令?
问题与套接字服务器while循环和等待串行命令在Python中。在python中套接字服务器循环和等待串行命令?
我有服务器的代码在Python这样的:
import serial
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('', 9000))
sock.listen(1)
print "Listening on TCP 9000"
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
print "Connected at: /dev/ttyUSB0"
while(1):
print "Waiting For Connection..."
connection, addr = sock.accept() #PROBLEM HERE
# IF THERE IS NOT CLIENT, PROGRAM CAN NOTO CONTINUE TO NEXT LINE
print "Connected"
#SO I CAN NOT CHECK THE COMMAND FROM SERIAL IN THE SAME TIME
dataFromSerial = ser.readline()
if dataFromSerial == "ON":
#SET LED ON
请帮助我...... 谢谢...
设置监听套接字非阻塞和catch插座超时(这显然也可以表现他们自己为EAGAIN
或EWOULDBLOCK
错误):
import errno
sock.setblocking(False) # just once, probably right after listen()
try:
conn, addr = sock.accept()
# conn accepted
except socket.error as e:
if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK):
raise # some sort of error we don't recognize; re-raise
pass # no connections were pending
谢谢,我会尝试 – 2014-12-08 06:13:31
@icktoofay:当时没有连接,这会导致连续异常(这显然会被捕获),但是不会浪费宝贵的CPU周期吗? – GodMan 2014-12-08 11:27:28
@GodMan:如果这是循环中发生的所有事情,是的,你只是在浪费轮询而不是阻止。但是,这不是循环中唯一的事情:他们想检查是否有传入连接,然后与串行端口交互。据推测,如果没有传入连接,他们会循环并处理串行端口;这只是他们*另外*想要处理连接,当且仅当在循环开始时有一个连接,并且如果这是目标,这似乎是一个合理有效的方法。 – icktoofay 2014-12-08 21:24:56
问题是什么?得到一些异常?请解释。 – GodMan 2014-12-08 05:48:35
问题是:当没有客户端,程序将在代码中等待: 连接,addrs = sock.accept() – 2014-12-08 06:11:04