Я нахожусь в процессе разработки аппаратного интерфейса с Python.мне нужно сделать следующее:
~ инициализировать драйверы ~ запустить устройство ~ создать сокет на порту 2626 и дождаться подключения клиентов для получения данных ~ если подключился какой-либо клиент, отправьте приветственное сообщениеобслуживая всех других подключенных клиентов и добавьте этого клиента в список подключенных клиентов.~ если какое-либо событие произошло на устройстве, скажем, повышение температуры обнаружено, то через эти данные события для всех подключенных клиентов.~ любые подключенные клиенты могут запрашивать у сервера какие-либо конкретные данные.
Это мой процесс.Я получил, что часть устройства работает отлично, теперь она печатает данные на консоль, и для сервера сокетов у меня есть следующий код, который работает нормально, как я ожидаю.но проблема в том, что после вызова run () происходит внутри цикла while.это очевидно, хотя.когда я слушаю новые соединения, я не могу вызвать любую другую функцию.
во время прослушивания соединений я должен быть в состоянии отправить / recv.есть идеи, как это сделать?
это моя серверная программа, которая прекрасно работает для прослушивания соединений.во время прослушивания вы ни к чему не можете.: (
#!/usr/bin/env python
import socket
import select
class ChatServer:
def __init__( self, port ):
self.port = port;
self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
self.srvsock.bind( ("", port) )
self.srvsock.listen( 5 )
self.descriptors = [self.srvsock]
print 'Server started on port %s' % port
def run( self ):
while 1:
# Await an event on a readable socket descriptor
(sread, swrite, sexc) = select.select( self.descriptors, [], [] )
# Iterate through the tagged read descriptors
for sock in sread:
# Received a connect to the server (listening) socket
if sock == self.srvsock:
self.accept_new_connection()
else:
# Received something on a client socket
str = sock.recv(100)
# Check to see if the peer socket closed
if str == '':
host,port = sock.getpeername()
str = 'Client left %s:%s\r\n' % (host, port)
self.broadcast_string( str, sock )
sock.close
self.descriptors.remove(sock)
else:
host,port = sock.getpeername()
newstr = '[%s:%s] %s' % (host, port, str)
self.broadcast_string( newstr, sock )
def accept_new_connection( self ):
newsock, (remhost, remport) = self.srvsock.accept()
self.descriptors.append( newsock )
newsock.send("You're connected to the Python server\r\n")
str = 'Client joined %s:%s\r\n' % (remhost, remport)
self.broadcast_string( str, newsock )
def broadcast_string( self, str, omit_sock ):
for sock in self.descriptors:
if sock != self.srvsock and sock != omit_sock:
sock.send(str)
print str,
myServer = ChatServer( 2626 ).run()
Заранее благодарим за всю вашу помощь:)