【Python】ソケット通信(TCP/IP)でチャット

この記事では、Pythonで1対1のソケット通信(TCP/IP)でチャットする方法とソースコードについて紹介します。

ソケット通信(TCP/IP)でチャット

Pythonでは、socketモジュールでソケット通信を実装できます。
今回は、簡単なチャットプログラムを作ります。

【内容】
サーバー側とクライアント側を実行します。
そして、サーバー側のコンソール画面に文章を入力すればクライアント側にも表示されます。
次に、クライアント側の画面から文章を入力すればサーバ側画面に表示されます。

ソースコード

サンプルプログラムのソースコードです。

サーバー側(server.py)

# -*- coding: utf-8 -*-
import socket

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(("localhost", 50007))    # 指定したホスト(IP)とポートをソケットに設定
    s.listen(1)                     # 1つの接続要求を待つ
    soc, addr = s.accept()          # 要求が来るまでブロック
    print("Conneted by"+str(addr))  #サーバ側の合図

    while (1):
        data = input("Server>") # 入力待機(サーバー側)
        soc.send(data)              # ソケットにデータを送信
        data = soc.recv(1024)       # データを受信(1024バイトまで)
        print("Client>",data)       # サーバー側の書き込みを表示
        if data == "q":             # qが押されたら終了
            soc.close()
            break

main()

【処理】
①ソケットの作成と設定をする。
②クライアントからの接続要求があるまで待機する。
③クライアントからの接続要求があれば受け付ける。
④ソケット通信でデータ「UNTAN」をクライアントに送信する。
⑤TCP接続を終了する。
⑥⑤~⑦の処理を繰り返す。

クライアント側(client.py)

# -*- coding: utf-8 -*-
import socket

def main():
    soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    soc.connect(("localhost", 50007))

    while(1):
        data = soc.recv(1024)
        print("Server>", data)      # サーバー側の書き込みを表示
        data = input("Client>") # 入力待機
        soc.send(data)              # ソケットに入力したデータを送信

        if data == "q":             # qが押されたら終了
            soc.close()
            break

main()

【処理】
①ソケットの作成と設定をする。
②接続するサーバーのIPアドレスを指定する。
③サーバに接続する。
④サーバからデータを受信する。
⑤受信バッファ(データ)を表示する。

関連記事
1 Pythonでネットワークプログラミング入門
2 Python入門 サンプル集
関連記事