今日の記事では、Pythonを使用してソケット通信のサーバーを構築する方法について詳しく解説します。
特に、Linux環境(今回は例としてRaspberry Pi OSを使用します)での実装に焦点を当てます。
ソケット通信は、ネットワークプログラミングの基本であり、この記事を通じてその基礎をしっかりと理解していただければと思います。
目次
接続先のクライアント
今回、接続先の通信相手となるは、WindowsPC上のPythonで記述されたクライアントプログラムです。
クライアント側のコードについては、以下の記事で解説しています。
ライブラリのインストール
Pythonのソケットプログラミングで使用する主なライブラリは標準ライブラリに含まれているsocket
ですので、特別にインストールする必要はありません。
作成したPythonコード
- ソケットオブジェクトの作成:
socket
モジュールをインポートし、socket.socket()
関数を用いてソケットオブジェクトを作成します。 - ホストとポートの設定: ローカルホスト(通常は “127.0.0.1”)と、クライアントと通信するためのポート番号(例:12345)を設定します。
- バインド:
bind()
メソッドを用いて、指定したホストとポート番号にソケットをバインドします。 - 接続の待機:
listen()
メソッドでクライアントからの接続を待ちます。この時点で、サーバーはクライアントからの接続を待機する状態になります。 - 接続の許可:
accept()
メソッドを用いて、クライアントからの接続を許可します。成功すると、クライアントのソケットオブジェクトとアドレス情報が返されます。 - データの受信:
recv()
メソッドを用いて、クライアントから送られてくるデータを受信します。 - 条件判定と応答: 受信したデータが “テストメッセージ” であるかどうかを確認し、該当する場合は応答メッセージを送信します。
- ソケットのクローズ: 通信が終了したら、
close()
メソッドを用いてソケットを閉じます。
作成した全体のソースコード
import socket
# ソケットオブジェクトの作成
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ローカルホストとポート番号を指定
host = "127.0.0.1"
port = 12345
# バインド
server_socket.bind((host, port))
# 接続待機
server_socket.listen(1)
print("サーバーが起動し、クライアントの接続を待っています...")
# クライアントからの接続を許可
client_socket, address = server_socket.accept()
print(f"{address} から接続がありました。")
while True:
# クライアントからのデータを受信
data = client_socket.recv(1024).decode('utf-8')
print(f"受信データ: {data}")
# クライアントに応答メッセージを送信
if data == "テストメッセージ":
client_socket.send("メッセージを受信しました。".encode('utf-8'))
print("応答メッセージを送信しました。")
break
# ソケットを閉じる
client_socket.close()
server_socket.close()
まとめ
この記事では、PythonとLinux(Raspberry Pi OS)を使用してソケット通信のサーバーを構築する基本的な手法について解説しました。
ソケットの作成からデータの受信、そして応答までの一連の流れを学びました。これを基に、さまざまなネットワークアプリケーションの開発が可能です。
次回はクライアント側の実装について解説しますので、お楽しみに。
コメント