Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのソケットプログラミング入門|主要メソッドとサーバー・クライアントの実装例


ソケットとは

ソケットは、双方向通信チャネルにおける両端点のことです。同じマシン上のプロセス間だけでなく、地球の反対側にあるマシン同士のプロセス間でも、ソケットを通じて通信を行うことができます。

ソケットは、TCPやUDPといった異なる種類のチャネルによって実装されます。信頼性の高い接続型通信にはTCPが、高速かつコネクションレスな通信にはUDPが適しています。

ソケットを作成するには、socketモジュールをインポートし、socket.socket()関数を使用します。

構文

my_socket = socket.socket(socket_family, socket_type, protocol=0)
  • socket_family:アドレスファミリ(例:AF_INET、AF_INET6)
  • socket_type:ソケットタイプ(例:SOCK_STREAM=TCP、SOCK_DGRAM=UDP)
  • protocol:通常はデフォルトの0を指定します

サーバーソケットの主なメソッド

my_socket.bind()

アドレス(ホスト名とポート番号のペア)をソケットにバインド(関連付け)します。

my_socket.listen()

TCPリスナーをセットアップして起動し、クライアントからの接続要求を待ち受けます。

my_socket.accept()

TCPクライアントからの接続を受け付けます。接続が到着するまで処理をブロック(待機)し、接続が確立すると新しいソケットとクライアントのアドレスを返します。

クライアントソケットの主なメソッド

my_socket.connect()

TCPサーバーへの接続を能動的に開始します。

汎用ソケットメソッド

my_socket.recv()

TCPメッセージを受信します。

my_socket.send()

TCPメッセージを送信します。

my_socket.recvfrom()

UDPメッセージを受信します。

my_socket.sendto()

UDPメッセージを送信します。

my_socket.close()

ソケットを閉じます。

my_socket.gethostname()

ホスト名を返します。

サーバーソケットの実装例

import socket

# ソケットオブジェクトを作成
my_socket = socket.socket()
# ホスト名を取得
my_host = socket.gethostname()
# サービス用のポート番号を設定
my_port = 12345

# アドレスをバインド
my_socket.bind((my_host, my_port))
# クライアントからの接続を待機(最大5件までキューイング)
my_socket.listen(5)

while True:
    # クライアントとの接続を確立
    cl, myaddr = my_socket.accept()
    print('Got connection from', myaddr)
    # メッセージを送信(Python 3ではバイト列を指定)
    cl.send(b'Thank you for connecting')
    # 接続を閉じる
    cl.close()

クライアントソケットの実装例

import socket  # socketモジュールをインポート

# ソケットオブジェクトを作成
my_socket = socket.socket()
# ローカルマシンのホスト名を取得
my_host = socket.gethostname()
# サーバーと同じポート番号を指定
my_port = 12345

# サーバーに接続
my_socket.connect((my_host, my_port))
# サーバーから受信したデータを表示
print(my_socket.recv(1024))
# ソケットを閉じる
my_socket.close()

まとめ

このように、Pythonではsocketモジュールを使うことで、数行のコードでサーバーとクライアント間のネットワーク通信を実現できます。サーバー側は「bind → listen → accept」の流れで接続を待ち受け、クライアント側は「connect」でサーバーへ接続します。その後はsend()recv()でデータのやり取りを行い、最後にclose()で必ずソケットを閉じることが重要です。まずはローカル環境で動作確認しながら、TCP/UDPそれぞれの特性の違いも試してみてください。

  1. Pythonの低レベルネットワークインターフェース(ソケット)の基礎と使い方

    Pythonの標準ライブラリに含まれる「socket」モジュールは、OSが提供するソケットエンドポイントを利用して、サーバーマシンとクライアントマシンが通信するための仕組みを定義しています。socket APIには、コネクション型(接続指向)プロトコルとコネクションレス型(非接続型)プロトコルの両方に対応した関数が用意されています。 ソケットとは、双方向通信リンクの「終端(エンドポイント)」のことです。IPアドレスとポート番号によって識別され、通信を開始するには両端でソケットを適切に設定する必要があります。これにより、クライアント・サーバー環境において、着信メッセージを待ち受け、応答を送り返

  2. PythonのTurtleグラフィックス入門!基本メソッド一覧と図形描画サンプルコード集

    Turtle(タートル)はPythonに標準搭載された特殊な機能で、専用の描画ウィンドウ上に簡単に図形を描くことができるモジュールです。 使い方はとてもシンプルです。まずturtleモジュールをインポートし、次にウィンドウ(Screen)を作成、その後タートルオブジェクトを生成します。あとは各種メソッドを呼び出すだけで、キャンバス上に自由に描画できます。この記事では、よく使われるメソッドの一覧表と、正方形・星・六角形などの具体的な描画例をサンプルコード付きで解説します。 主なTurtleメソッド一覧 メソッド パラメータ 説明 Turtle() なし 新しいタートルオブジェクトを作成