Python / UDP / Multi-User Session Chat
本プログラムは UDP ソケットを利用した Python ベースのチャットプログラムです。 以下の 3 ファイルで構成されています:
- server.py – ログインサーバーとして動作
- client.py – クライアントユーザーとして動作
- UserList.txt – オンラインユーザー一覧の保存ファイル
server.py はユーザーのログイン、オンラインユーザー一覧の要求を待機します。
client.py は ID を決定した後、次の動作が可能です:
- オンラインユーザー一覧の要求
- セッションの作成
- 他ユーザーからの招待を待機
ヘッダとボディに分かれた独自プロトコルを使用します。 以下は各メッセージ形式の詳細です。
現在オンラインのユーザー一覧を要求:
USERLIST
-
オンラインユーザー一覧を返却:
USERLIST
user1, (IPアドレス), (port #)
user2, (IPアドレス), (port #)
user3, (IPアドレス), (port #)
...
-
-
クライアントが初めて接続する際に使用:
LOGIN (ユーザーID)
サーバーは UserList.txt に
ID, IP, port番号 を追記します。
セッションに他のユーザーを招待するとき:
INVITE (自分のID),(自分のIP),(自分のport #)
招待された側は、 受け入れる(Join) か 拒否する かを選択できます。
招待を承諾したユーザーから招待者に送信:
JOIN (自分のID)
招待者は自分のセッションユーザー一覧に参加者を追加します。
招待者が新メンバーを追加後、セッション内全員へ通知するメッセージ。
INFORM
(参加者ID),(参加者IP),(参加者port #)
(参加者ID),(参加者IP),(参加者port #)
...
-
受信したユーザーは自身のセッションユーザー一覧に追加します。
ユーザーがセッションを退出してプログラムを終了する時:
EXIT (自分のID)
- セッション内の全ユーザーに送信される
- 各クライアントは該当ユーザーを参加者リストから削除
- サーバーはオンラインリストから削除
| コマンド | 説明 |
|---|---|
!invite |
他ユーザーをセッションに招待 |
!userlist |
現在オンラインのユーザー一覧を取得 |
!exit |
セッション退出 & プログラム終了 |
UDP-Chat
├── server.py
├── client.py
└── UserList.txt
以下のリンクから動作デモをご覧いただけます:
