Pythonのソケットプログラミング1

ソケットの定義

  ソケットは、アプリケーション層となるインターフェイスの集合である抽象化層を、通信する中間ソフトウェアTCP / IPプロトコルスイート。デザインモードでは、ソケットは、実際にファサードパターンであり、それは複雑である隠されたTCP / IPプロトコルスイートユーザーのためのソケットインタフェースの後ろに、シンプルなインタフェースがすべてセットで、聞かせてソケットが指定を遵守するために、データを整理します合意。だから、私たちはTCP / UDPプロトコルの深い理解を必要としない、ソケットが私たちのために良いパッケージを持って、私たちは自然のTCP / UDPの基準を以下のプログラムを作成し、プログラムへのソケットの規定に従う必要があります。

追加:一部の人々はソケットのIP +ポートは、IPはインターネットでホストの位置を特定するために使用されていることを言うと、ポートはこのマシン上のアプリケーションを識別するために使用され、IPアドレスは、ネットワークカードに設定されていますポートが開いているアプリケーションで、インターネット上のIPアドレスとポートのバインドが固有のアプリケーションを識別し、PIDプログラムは、同じマシンまたはスレッドで異なるプロセスを識別することです

歴史ソケットの開発と分類

  ソケットは、カリフォルニア大学、Unixの20 1970年のバークレー版の起源、それは、彼らが言う、BSD Unixのです。したがって、それはまた、時々、「Berkeleyソケット」またはソケットと呼ばれる「BSDソケット。」まず、ソケットは、同じホスト上の複数のアプリケーション間の通信に使用するために設計されています。これは、プロセス間通信、またはIPCとして知られています。ソケットがあり、2つ(または2つのレースを持っていることが知られている)されているファイルタイプとネットワークベースのタイプに基づいています。 

  • ソケットファミリーのファイルタイプに基づいて、

ソケットファミリー名:AF_UNIX

UNIXのすべてが同じマシン上で実行中のプロセス、通信が間接同じファイルシステムにアクセスすることによって行うことができ、ファイル、ファイルのソケットコールは基礎となるファイルシステム上のデータへのアクセスをベースに二つのソケットであります

  • ネットワークソケットファミリのタイプに基づいて、

ソケットファミリー名:AF_INET

(AF_INET6もIPv6のために使用することがすべてのアドレスは、他のいくつかのアドレス家族が暮らしているが、それらはいずれかのみ、特定のプラットフォーム用に使用されている、またはそれが放棄されていないか、ほとんど使用されている、あるいは単に本当ではありません家族は、AF_INETは、我々は唯一のネットワークプログラミングを気にしているため、最も広く使わ1、Pythonはほとんどの時間は、私が唯一のAF_INET)それを使用するので、アドレスファミリの様々なサポートしていますが、あります

ソケットのワークフロー

    - 人生のシナリオ。あなたは友人を呼びたい、最初のダイヤル電話が電話リングを聞いた後、友人をもたらし、その後、あなたとあなたの友人はあなたが話すことができ、接続を確立しました。そして為替のもう一方の端は、この会話を終了するには電話を切ります。

動作原理ソケットを説明するための生活のシナリオ

サーバ側の話を開始します。初期化サーバソケットは、その後、結合ポート(バインド)は、ポートをリッスン呼び出し、(聞く)クライアント接続を待って、ブロックを受け入れます。あなたは、クライアントが開始されている場合は、この時点でソケットを、サーバーに接続し、接続が成功した場合(接続)、そしてクライアントを接続し、サーバが確立されています。クライアントは、サーバがリクエストを受信し、要求を処理し、クライアントに応答データを送信し、クライアントがデータを読み込み、そして最終的に接続を閉じ、対話の終了、データ要求を送信します。

テキスト開始


 

ソケットは、サーバー上の手順を記述します。

1.のような、ソケットオブジェクトを作成するために、ソケット関数を呼び出します。

socket_server = socket.socket(家族、タイプ)

AF_INET(インターネット通信)またはAF_UNIX(同じマシン上のプロセス間通信)のために、家族に代わって家族の引数を扱います。

SOCK_STREAM(ストリームソケット)とSOCK_DGRAM(データグラムソケット)のソケット型の型パラメータを表します。

2.などの指定されたアドレスにソケットをバインド、バインドオブジェクトのソケットを使用する方法を、。

socket_server.bind(アドレス)

ソケットAF_INETで作成された、デュアルフォーマット(ホスト、ポート)のセットのタプルに対処しなければなりません。

前記ソケットの方法は、オブジェクトのような、接続要求を受信する聴きます:

socket_server.listen(バックログ)

バックログが最大を許可するサーバに接続しているクライアントの数を指定し、それが設定値に達した場合、新しい要求を拒否し、少なくとも1です。

4.ソケットを介してサーバソケットは、クライアント・オブジェクトのメソッドを待つを受け入れる接続を要求する、など。

接続、アドレス= socket_server.accept()

「待ち」状態にする方法、ソケットを受け入れて実行した後、クライアントを待っていると、接続を要求します。クライアントが接続を要求し、接続方法が受け入れ返すと、サーバーは、2つの要素を含むタプルの集合(接続、アドレス)を返します。接続は、サーバーがこの新しいオブジェクトを介してクライアントと通信しなければならない、新しいソケットオブジェクトです;アドレスは、クライアントのインターネットアドレスです。

サーバーとクライアントの通信方式による処理段階、「RECV」を「送信」と:

サーバー呼び出しが送信、および使用  バイナリ  形式は、顧客に情報を送信します。この方法は、送信された文字数を返し送ります。

、クライアントからの情報を受信するためにコールRECVをRECVサーバを使用する方法は、サーバーは、このメソッドの呼び出しによって受け入れられたデータの最大量を表す整数で指定されなければなりません。RECV方法は、データを「遮断」状態に受信し、受信したデータを表す文字列を返している場合。送信データ量が許可されたrecvを超えた場合、データが切り捨てられます。冗長データは、受信側にバッファ。後でのrecvを呼び出すと、余分なデータがバッファから削除されます。

前記送信端は、のような、オブジェクトのソケットコネクタcloseメソッドを呼び出します。

connection.close()

socket_server.close()

注意:ここでは新しいソケット(接続)を閉じる受け入れ、サーバー側のソケットの作成を閉鎖する(socket_server)

おすすめ

転載: www.cnblogs.com/shyw/p/11675071.html