在python中套接字服务器循环和等待串行命令?

在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 

请帮助我...... 谢谢...

+0

问题是什么?得到一些异常?请解释。 – GodMan 2014-12-08 05:48:35

+0

问题是:当没有客户端,程序将在代码中等待: 连接,addrs = sock.accept() – 2014-12-08 06:11:04

设置监听套接字非阻塞和catch插座超时(这显然也可以表现他们自己为EAGAINEWOULDBLOCK错误):

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 
+0

谢谢,我会尝试 – 2014-12-08 06:13:31

+0

@icktoofay:当时没有连接,这会导致连续异常(这显然会被捕获),但是不会浪费宝贵的CPU周期吗? – GodMan 2014-12-08 11:27:28

+0

@GodMan:如果这是循环中发生的所有事情,是的,你只是在浪费轮询而不是阻止。但是,这不是循环中唯一的事情:他们想检查是否有传入连接,然后与串行端口交互。据推测,如果没有传入连接,他们会循环并处理串行端口;这只是他们*另外*想要处理连接,当且仅当在循环开始时有一个连接,并且如果这是目标,这似乎是一个合理有效的方法。 – icktoofay 2014-12-08 21:24:56