PythonでのSocket通信入門

ソケット(Socket)はネットワーク上のプログラム間で双方向通信を行うためのエンドポイントです。IPアドレスとポート番号を組み合わせた通信ハンドルとして機能し、異なるマシンや仮想環境間のデータ交換を可能にします。サーバー側では複数のサービスを提供する際、各サービスごとに固有のポートにソケットをバインドし、クライアントはそのポートに接続して通信を行います。

import socket

server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('localhost', 8080))
server_sock.listen(5)

while True:
    print('クライアント接続を待機中...')
    client_sock, addr = server_sock.accept()
    data = client_sock.recv(1024)
    print(f'受信データ: {data.decode()}')
    client_sock.sendall(b'サーバーからの応答')
    client_sock.close()
import socket

client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('localhost', 8080))
client_sock.sendall(b'クライアントメッセージ')
response = client_sock.recv(1024)
print(response.decode())
client_sock.close()

ソケット作成時のパラメータ解説

  • アドレスファミリ(第1引数)
    - socket.AF_INET: IPv4アドレス(デフォルト)
    - socket.AF_INET6: IPv6アドレス
    - socket.AF_UNIX: Unixシステム内プロセス間通信
  • ソケットタイプ(第2引数)
    - socket.SOCK_STREAM: TCP向け信頼性のあるストリーム通信
    - socket.SOCK_DGRAM: UDP向けデータグラム通信
    - socket.SOCK_RAW: ローレベルパケット処理用(ICMP/IGMPなど)
  • プロトコル(第3引数)
    - 0(デフォルト): システムが自動選択

主要メソッド機能

  • bind(): IP/ポートをソケットに割り当て
  • listen(): 接続待ち受けキューの最大長設定
  • accept(): クライアント接続を受信し新規ソケットを生成
  • recv(): 指定バッファサイズ分のデータ受信
  • sendall(): 全データを確実に送信
  • connect(): サーバーへの接続確立

データ送受信ではバイト列処理が必須です。Python 3では文字列を明示的にバイト変換し、受信時にデコードする必要があります。通信プロセスでは送信と受信の対応関係を常に意識することが重要です。

タグ: socket TCP udp Networking python-socket

6月7日 18:06 投稿