シンプルなサーバー・クライアント通信

シンプルなサーバー・クライアント通信

ここではソケットを使ってシンプルなサーバー・クライアント通信のプログラムを作ってみます。次のような仕様になっています。

サーバー

servsample.py


# File: servsample.py
#
# エコーサーバー 
# https://docs.python.org/ja/3/library/socket.html
#

import socket
HOST = '0.0.0.0'# すべてのIPアドレスからの接続を許す
PORT = 54321                    # ポート番号 / ダイナミック・ポートの領域を利用
# with構文を使って処理を閉じる書き方
# ソケットでTCP/IPを開く
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))    # ソケットをポートにバインド
    s.listen(1)                 # 接続開始
    conn, addr = s.accept()     # 接続待ち
    with conn:
        print('Connected by', addr)
        while True:             # 無限ループ
            data = conn.recv(1024)
            if not data: break
            conn.sendall(data)

クライアント

cliesample.py


# File: cliesample.py
# エコー クライアント
# https://docs.python.org/ja/3/library/socket.html
import socket
HOST = 'localhost'    # ローカルホストを指定
PORT = 54321          # サーバーのポートを指定
# with構文を使って処理を閉じる
# ソケットでTCP/IPを開く
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))     # ホストとポートを指定して相手に接続
    s.sendall('こんにちは世界'.encode('utf-8'))    # データを送る / UTF-8にエンコード
    data = s.recv(1024)                         # 受信
print('Received:',data.decode('utf-8'))         # UTF-8で出力

トップページ