Open1

def connection_made(self, transport): self.transport = transport ➡︎ transportの意味

pdfpdf
example.py
class ChatServerProtocol(asyncio.DatagramProtocol):  # UDP用の非同期プロトコルクラス
    def __init__(self):
        self.transport = None  # UDPソケットの送受信用オブジェクト

    def connection_made(self, transport):
        self.transport = transport  # サーバーソケットが作成されたときに呼ばれる

    def datagram_received(self, data, addr):
        if not data:
            return  # データが空なら何もしない
        usernamelen = data[0]  # 最初の1バイトはユーザー名の長さ
        username = data[1:1+usernamelen].decode('utf-8')  # ユーザー名部分をデコード
        message = data[1+usernamelen:].decode('utf-8')    # 残りがメッセージ本文
        print(f"Received from {username}@{addr}: {message}")  # 受信内容を表示
        clients[addr] = time.time()  # クライアントの最終通信時刻を更新
        # 他の全クライアントにメッセージをリレー
        for client in clients.keys():
            if client != addr:  # 送信元以外に送信
                try:
                    self.transport.sendto(data, client)  # UDPでデータを送信
                except Exception as e:
                    print(f"Failed to send message to {client}: {e}")  # 送信失敗時のエラー表示
method.py
def connection_made(self, transport):
        self.transport = transport

self.transport = transport の意味は、
**「このプロトコルインスタンス(ChatServerProtocol)が、UDPソケット(=transportオブジェクト)を使ってデータの送受信をできるように、その参照を保存している」**ということです。


詳しく

  • transport は、asyncio の「トランスポート」オブジェクトで、
    UDPソケットの送受信を抽象化したものです。
  • connection_made(self, transport) は、
    サーバーソケットが作成されたときに asyncio が自動で呼び出し、
    その時に「このUDPソケットを使ってね」という意味で transport を渡します。
  • これを self.transport に保存しておくことで、
    後で self.transport.sendto(...) でデータを送信できるようになります。

まとめ

  • transport は「UDPソケットそのもの」だと思ってOKです。
  • これを self.transport に保存することで、
    どのタイミングでもデータ送信ができるようになります。

公式ドキュメント参考

asyncio — Transports and Protocols