python : UDP非同期受信
python で UDP の非同期受信したいことってありませんか?
まぁ,そんなないですよね・・・
しかし,何かしらのデバイスからUDPを受け取って,それをsocket.io とかでサーバーに送りたい時なんかは,python でサクッと書くのが楽なんじゃないかなぁと.
というわけで,python で UDP の非同期受信のコードをメモしておきます.
ネットを探しても,あまりサンプル見つからなかったけども,コード数的には少なめです.
import asyncore import socket class UdpServer(asyncore.dispatcher): def __init__(self): asyncore.dispatcher.__init__(self) # 5000 番ポートにバインド self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.bind(('', 5000)) return # ポートにバインドされた時 def handle_connect(self): print "Udp server Started..." return # データが飛んできた時 def handle_read(self): data, addr = self.recvfrom(2048) # 特定のデータが飛んできたら終了 if data == 終了条件 raise asyncore.ExitNow('Server is quitting!') return def handle_write(self): pass # 例外をキャッチする.サーバー終了後に,何かしらの処理をしたい用 def run(): instance = UdpServer() try: asyncore.loop() # 非同期ループを開始 except asyncore.ExitNow, e: print e if __name__ == '__main__': run()