この記事では、Pythonでソケットを使ったP2P(Peer-to-Peer)通信の基本について解説します。Pythonのソケットプログラミングにおける基本的な知識から、簡単なサンプルコード、応用例まで詳しく見ていきます。
ソケットとは
ソケット(Socket)は、ネットワークを通じてデータを送受信するためのエンドポイント(接続点)です。一般的には、IPアドレスとポート番号の組み合わせによって識別されます。
P2P通信とは
P2P(Peer-to-Peer)通信とは、中央サーバーを介さずにネットワーク上の各端末(ピア)が直接データを送受信する形式の通信です。この方法は、中央サーバーに依存しないため、柔軟性があります。
Pythonでのソケットプログラミングの基本
Pythonでソケットプログラミングを行うには、主に`socket`モジュールを使用します。
簡単なサンプルコード
# サーバー側
import socket
# IPアドレスとポート番号を設定
HOST = '127.0.0.1'
PORT = 65432
# ソケットオブジェクトを作成
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('接続されました:', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
# クライアント側
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
コード解説
– `socket.AF_INET`: IPv4を指定しています。
– `socket.SOCK_STREAM`: TCPプロトコルを用いるための設定です。
– `s.bind()`: ソケットにIPとポートをバインドします。
– `s.listen()`: クライアントからの接続を待ちます。
– `s.accept()`: 接続を受け入れます。
応用例1: ファイルの送受信
ソケット通信を利用して、簡単なファイルの送受信プログラムを作成してみましょう。
# サーバー側
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('接続されました:', addr)
with open('received_file.txt', 'wb') as f:
while True:
data = conn.recv(1024)
if not data:
break
f.write(data)
応用例2: チャットアプリケーション
簡易的なチャットアプリケーションをソケットで作成してみましょう。
# サーバー側
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('接続されました:', addr)
while True:
data = conn.recv(1024).decode('utf-8')
if data == 'exit':
break
print('Received:', data)
msg = input('Your message: ')
conn.sendall(msg.encode('utf-8'))
応用例の解説
– `wb`はバイナリ書き込みモードで、受け取ったデータをそのままファイルに書き込むために使用します。
– `decode`と`encode`は文字列をUTF-8形式でエンコード、デコードするために使用します。
まとめ
Pythonでのソケットプログラミングは多くの応用可能性を持っています。この記事で紹介した基本的な知識と応用例を活かして、さまざまな通信プログラムを作成してみてください。
コメント