私はPythonでいくつかのハードウェアインタフェースを設計しています。私は何をする必要があることは、次のように、Pythonソケットプログラミング - 接続をリッスンしながら何かをする必要があります
~~~デバイス を開始ポート2626でソケットを作成し、クライアントが任意のクライアントがハローを送り、その後接続してしまった場合は、データ 〜を受信するために接続するために待つドライバー を初期化しています接続されている他のすべてのクライアントにサービスを提供し、このクライアントを接続されたクライアントリストに追加します。 〜デバイスで何らかのイベントが発生した場合、温度上昇が検出され、このイベントデータを通じて接続されているすべてのクライアントに通知されます。 〜接続されているクライアントは、サーバーに特定のデータを要求できます。
これは私のプロセスです。私はデバイスのパーツを今すぐ素晴らしいものにして、コンソールへの印刷データを得ました。そして、ソケットサーバーのために、私は次のコードをこのようにうまく動作します。 しかし、問題は、whileループ内で "run()"を呼び出した後です。その明らかな。私が新しい接続を聞いているとき、私は他の機能を呼び出すことができません。
接続を聞いているうちに/ 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()
すべてのあなたの助けを事前に感謝:)
[Twisted](http://twistedmatrix.com/trac/)を使用しますか? –
@MikeCooperあなたの提案バディに感謝します。私はPythonの初心者です。サンプルがありますか、クイックスタートのためのチュートリアルを指すことができますか? – san