😎

Python の UDP サーバーで Fizz Buzz

2021/03/02に公開

paiza のひとが UDP サーバーを公開していたので真似してみました ( ref. https://twitter.com/yoshiokatsuneo/status/1366333577529421824?s=09 )

socketserver.UDPServer の例 を流用しただけではありますが。

count をグローバル変数にしてますが、class Handler に __init__ を追加して count をインスタンス変数にしようとしたんですが、serve_forever() 内部で毎回 Handler インスタンスを作り直すようなので( __init__ が毎回呼ばれる) 、インスタンス変数は諦めました。

import socketserver

count = 1

class Handler(socketserver.BaseRequestHandler):
    def handle(self):
        global count
        socket = self.request[1]
        if not count % 15:
            socket.sendto('ワシントン'.encode(), self.client_address)
        elif not count % 3:
            socket.sendto('霧島'.encode(), self.client_address)
        elif not count % 5:
            socket.sendto('瑞鶴'.encode(), self.client_address)
        count += 1

with socketserver.UDPServer(('localhost', 12345), Handler) as sv:
    sv.serve_forever()

クライアントは nc で。

$ nc -u localhost 12345

霧島

瑞鶴
霧島


霧島
瑞鶴

霧島


ワシントン


霧島

Discussion