Pythonは、その高い柔軟性と汎用性により、ネットワークプログラミングに適した言語の1つとなっています。その中でも、Socketモジュールを使うことで、TCP/IPやUDPといったプロトコルを使用したネットワーク通信を簡単に行うことができます。Socketモジュールを使用するには、まずsocketライブラリをインポートする必要があります。次に、ソケットオブジェクトを作成し、それを使用してデータの送信や受信を行います。
実装例
以下に、TCP/IPプロトコルを使用したサーバーとクライアントの実装例を示します。
サーバー側のコード(TCP)
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('Connected by', addr) while True: data = conn.recv(1024) if not data: break conn.sendall(data)
このコードでは、まずソケットオブジェクトを作成し、IPアドレスとポート番号を指定してバインドします。その後、接続要求を受け付け、接続されたソケットを使用してデータの送受信を行います。
クライアント側のコード(TCP)
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))
このコードでは、クライアントがサーバーに接続し、"Hello, world"というメッセージを送信し、受信したデータを表示します。
サーバー側のコード(UDP)
import socket HOST = '127.0.0.1' PORT = 65432 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind((HOST, PORT)) while True: data, addr = s.recvfrom(1024) print('Received from', addr, ':', data.decode()) s.sendto(data.upper(), addr)
このコードでは、まずソケットオブジェクトを作成し、IPアドレスとポート番号を指定してバインドします。その後、データの受信と送信を行います。ここでは、受信したデータを大文字に変換して送信しています。
クライアント側のコード(UDP)
import socket HOST = '127.0.0.1' PORT = 65432 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.sendto(b'Hello, world', (HOST, PORT)) data, addr = s.recvfrom(1024) print('Received', data.decode(), 'from', addr)
このコードでは、クライアントがサーバーにデータを送信し、受信したデータを表示します。
まとめ
以上が、PythonのSocketモジュールを使用したネットワーク通信の具体例です。ソケットプログラミングは、ネットワークに詳しい開発者にはなじみのあるテクノロジーですが、Pythonを使うことで、初心者でも簡単にネットワークプログラミングを始めることができます。これらのプログラムはPythonの基本的な文法とライブラリで実装することができます。Pythonの基礎学習には下記のようなサイトの利用が有効です。