ホームページ >バックエンド開発 >Python チュートリアル >Python サーバー プログラミング: Socket の仕組みの詳細な説明

Python サーバー プログラミング: Socket の仕組みの詳細な説明

WBOY
WBOYオリジナル
2023-06-18 13:16:401145ブラウズ

Python は、インターネット アプリケーション開発の分野で広く使用されている人気のある動的プログラミング言語です。サーバーサイドプログラミングでは、Python も広く使用されており、その中でもソケットプログラミングは Python サーバープログラミングの重要な部分です。

この記事では、Python における Socket の動作原理を詳細に説明し、Python サーバー プログラミングがどのように実装されているかを読者が理解できるようにします。

1.ソケットとは何ですか?

まず、Socket とは何かを明確にする必要があります。ソケットはアプリケーションとネットワーク プロトコル間の一連の API であり、アプリケーションがネットワークにアクセスする方法と、ネットワークがデータを送信する方法を指定します。

ソケットは、ネットワークを介してあるコンピュータから別のコンピュータにデータを送信できるプロセス間通信メカニズムです。ソケット プログラミングは、実際には、プログラムがソケット API を介してネットワークと通信するプロセスです。

Python では、ソケット モジュールを使用してソケット プログラミングを実装できます。このモジュールは、ソケット サーバーとクライアントの作成を容易にする一連のインターフェイスとメソッドを提供します。

2. Python ソケット プログラミング プロセス

Python ソケット プログラミング プロセスは次のとおりです:

  1. Socket オブジェクトを作成し、Socket タイプとプロトコルを決定します。
  2. IP アドレスとポート番号をバインドします。
  3. クライアント接続リクエストをリッスンします。
  4. クライアント要求を受け入れ、接続オブジェクトを返します。
  5. データの送信と通信は、接続オブジェクトを通じて実行されます。

以下では、各ステップの実装方法を詳しく紹介します。

  1. ソケット オブジェクトの作成

Python では、ソケット モジュールのソケット() 関数を使用してソケット オブジェクトを作成できます。この関数には 2 つのパラメータが必要です。最初のパラメータはソケットのタイプ、2 番目のパラメータはソケットで使用されるプロトコルです。

ソケット タイプは、SOCK_STREAM (ストリーミング ソケット) または SOCK_DGRAM (データグラム ソケット) です。ストリーミング ソケットは、ネットワーク経由で送信されるデータが連続したデータ ストリームであることを意味し、データグラム ソケットは、データが送信されることを意味しますネットワーク経由で送信されるデータは個別のパケットです。

プロトコルは IPV4 または IPV6 です。たとえば、socket.AF_INET は IPV4 プロトコルを使用することを意味し、socket.AF_INET6 は IPV6 プロトコルを使用することを意味します。

次に、TCP/IP ソケットの作成例を示します。

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  1. IP アドレスとポート番号をバインドします

Socket オブジェクトを作成した後、指定された IP アドレスとポート番号にバインドする必要があります。実装するには、bind() 関数を使用します。

server_socket.bind(('localhost', 8888))

このうち、「localhost」はローカル IP アドレスへのバインドを意味し、8888 は指定されたポート番号を意味します。

  1. クライアント接続リクエストをリッスンする

ソケット バインディングが完了したら、listen() 関数を使用してクライアント接続リクエストを監視する必要があります。この関数のパラメータは、待機する接続の数です。

server_socket.listen(5)

上記のコードは、サーバーが同時に 5 つの接続要求を待機できることを示しています。

  1. クライアント要求を受け入れ、接続オブジェクトを返す

accept() 関数を使用して、クライアント接続要求を受け入れ、接続オブジェクトとクライアント アドレス情報を返します。

conn, addr = server_socket.accept()

このうち、conn は send() 関数と recv() 関数を使用してデータの送信と通信を実現できる接続オブジェクトで、addr はクライアントの IP アドレスとポート番号です。

  1. 接続オブジェクトを介したデータ送信と通信

接続オブジェクトを取得した後、データ送信と通信に send() 関数と recv() 関数を使用できます。

サーバー側では、send() 関数を使用してクライアントにデータを送信し、recv() 関数を使用してクライアントからデータを受信できます。

例:

conn.send("Welcome to my server".encode())

data = conn.recv(1024).decode()
print('收到的数据是', data)

クライアント側では、send() 関数を使用してサーバーにデータを送信し、recv() 関数を使用してサーバーからデータを受信できます。

例:

client_socket.send("Hello, Server".encode())

data = client_socket.recv(1024).decode()
print('收到的数据是', data)

3. ソケット プログラミングで一般的に使用されるメソッド

Python ソケット プログラミングで一般的に使用されるメソッドは次のとおりです:

    #send(data): 接続の他端にデータを送信します。データは送信されるデータであり、文字列またはバイト ストリームにすることができます。
  1. recv(buffer): 接続の他端か​​ら送信されたデータを受信します。Buffer は受信データのバッファ サイズで、通常は 1024 バイトです。
  2. bind(address): IP アドレスとポートをバインドします。アドレスは、IP アドレスとポート番号を含むタプルです。
  3. listen(backlog): 接続の待機を開始します。backlog は待機中の接続の数です。
  4. accept(): クライアント接続要求を受け入れ、接続オブジェクトとクライアント アドレス情報を返します。
  5. connect(address): 指定されたサーバー アドレスに接続します。アドレスも IP アドレスとポート番号を含むタプルです。
4. 概要

この記事では、Python ソケット プログラミングにおけるソケットの動作原理、およびソケット プログラミングの基本的なプロセスと一般的な方法を詳しく紹介します。 Socket の概念とプログラミング実装を深く理解することで、読者は Python サーバーサイド プログラミング テクノロジをよりよく習得できるようになります。

以上がPython サーバー プログラミング: Socket の仕組みの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。