Python-ネットワークプログラミング
前のページ次のページ
Python は、ネットワーク サービスへの 2 つのレベルのアクセスを提供します。低レベルでは、基盤となるオペレーティング システムの基本的なソケット サポートにアクセスできます。これにより、コネクション型プロトコルとコネクションレス型プロトコルの両方のクライアントとサーバーを実装できます。
Python には、特定のアプリケーション レベルのネットワーク プロトコル (FTP、HTTP など) への高レベルのアクセスを提供するライブラリもあります。
この章では、ネットワークで最も有名な概念であるソケット プログラミングについて理解できます。
ソケットとは?
ソケットは、双方向通信チャネルのエンドポイントです。ソケットは、プロセス内、同じマシン上のプロセス間、または異なる大陸のプロセス間で通信できます。
ソケットは、さまざまな種類のチャネル (Unix ドメイン ソケット、TCP、UDP など) で実装できます。 ソケット ライブラリは、共通のトランスポートを処理するための特定のクラスと、残りを処理するための汎用インターフェイスを提供します。
ソケットには独自の語彙があります −
Sr.No. | 用語と説明 |
---|---|
1 | ドメイン トランスポート メカニズムとして使用されるプロトコルのファミリー。これらの値は、AF_INET、PF_INET、PF_UNIX、PF_X25 などの定数です。 |
2 | タイプ 2 つのエンドポイント間の通信のタイプ。通常、接続指向プロトコルの場合は SOCK_STREAM、コネクションレス プロトコルの場合は SOCK_DGRAM です。 |
3 | プロトコル 通常はゼロです。これは、ドメインおよびタイプ内のプロトコルのバリアントを識別するために使用できます。 |
4 | ホスト名 ネットワークインターフェースの識別子 −
|
5 | ポート 各サーバーは、1 つ以上のポートで呼び出しているクライアントをリッスンします。ポートは、Fixnum ポート番号、ポート番号を含む文字列、またはサービスの名前です。 |
ソケット モジュール
ソケットを作成するには、socket.socket() を使用する必要があります ソケットで利用可能な機能 一般的な構文を持つモジュール-
s = socket.socket (socket_family, socket_type, protocol=0)
パラメータの説明は次のとおりです-
-
socket_family − 前に説明したように、これは AF_UNIX または AF_INET のいずれかです。
-
socket_type − これは、SOCK_STREAM または SOCK_DGRAM のいずれかです。
-
プロトコル − これは通常省略され、デフォルトは 0 です。
ソケットを取得したら オブジェクトを作成すると、必要な関数を使用してクライアント プログラムまたはサーバー プログラムを作成できます。以下は、必要な機能のリストです-
サーバー ソケット メソッド
Sr.No. | 方法と説明 |
---|---|
1 | s.bind() このメソッドは、アドレス (ホスト名、ポート番号のペア) をソケットにバインドします。 |
2 | s.listen() このメソッドは、TCP リスナーをセットアップして開始します。 |
3 | s.accept() これは、TCP クライアント接続を受動的に受け入れ、接続が到着するまで待機します (ブロック)。 |
クライアント ソケット メソッド
Sr.No. | 方法と説明 |
---|---|
1 | s.connect() このメソッドは、積極的に TCP サーバー接続を開始します。 |
一般的なソケット メソッド
Sr.No. | 方法と説明 |
---|---|
1 | s.recv() このメソッドは TCP メッセージを受け取ります |
2 | s.send() このメソッドは TCP メッセージを送信します |
3 | s.recvfrom() このメソッドは UDP メッセージを受け取ります |
4 | s.sendto() このメソッドは UDP メッセージを送信します |
5 | s.close() このメソッドはソケットを閉じます |
6 | socket.gethostname() ホスト名を返します。 |
シンプルなサーバー
インターネット サーバーを作成するには、ソケットを使用します ソケット オブジェクトを作成するために socket モジュールで使用できる関数。次に、ソケット オブジェクトを使用して他の関数を呼び出し、ソケット サーバーをセットアップします。
ここで bind(hostname, port) を呼び出します ポートを指定する関数 与えられたホスト上のあなたのサービスのために。
次に、accept を呼び出します 返されたオブジェクトのメソッド。このメソッドは、指定したポートにクライアントが接続するまで待機し、接続を返します そのクライアントへの接続を表すオブジェクト。
#!/usr/bin/python # This is server.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection
単純なクライアント
特定のポート 12345 と特定のホストへの接続を開く非常に単純なクライアント プログラムを作成してみましょう。 Python の socket を使用してソケット クライアントを作成するのは非常に簡単です。 モジュール関数。
socket.connect(hosname, port ) ホスト名へのTCP接続を開きます 港で .ソケットを開くと、IO オブジェクトと同じように読み取ることができます。完了したら、ファイルを閉じるのと同じように、忘れずに閉じてください。
次のコードは、特定のホストとポートに接続し、ソケットから利用可能なデータを読み取り、終了する非常に単純なクライアントです-
#!/usr/bin/python # This is client.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close() # Close the socket when done
この server.py をバックグラウンドで実行し、次に client.py の上で実行して結果を確認してください。
# Following would start a server in background. $ python server.py & # Once server is started run client as follows: $ python client.py
これにより、次の結果が生成されます-
Got connection from ('127.0.0.1', 48437) Thank you for connecting
Python インターネット モジュール
Python Network/Internet プログラミングにおける重要なモジュールのリスト。
プロトコル | 共通機能 | ポート番号 | Python モジュール |
---|---|---|---|
HTTP | ウェブページ | 80 | httplib、urllib、xmlrpclib |
NNTP | ユーズネット ニュース | 119 | nntplib |
FTP | ファイル転送 | 20 | ftplib、urllib |
SMTP | メールの送信 | 25 | smtplib |
POP3 | メールを取得しています | 110 | poplib |
IMAP4 | メールを取得しています | 143 | imaplib |
Telnet | コマンドライン | 23 | telnetlib |
ホリネズミ | 書類の転送 | 70 | gopherlib、urllib |
上記のすべてのライブラリをチェックして、FTP、SMTP、POP、および IMAP プロトコルで動作するようにしてください。
参考文献
これは、ソケット プログラミングのクイック スタートでした。それは広大な主題です。詳細については、次のリンクを参照することをお勧めします −
-
Unix ソケット プログラミング。
-
Python ソケット ライブラリとモジュール。
Python