> ⑤Pythonネットワークプログラミング – ネットワークエンジニアチュートリアル

⑤Pythonネットワークプログラミング

Pythonネットワークプログラミング

Pythonは、ネットワークサービスへの2つのレベルのアクセスを提供します。低レベルでは、基盤となるオペレーティングシステムの基本ソケットサポートにアクセスできます。これにより、コネクション型プロトコルとコネクションレス型プロトコルの両方のクライアントとサーバーを実装できます。

Pythonには、特定のアプリケーションレベルのネットワークプロトコル(FTP、HTTPなど)へのより高いレベルのアクセスを提供するライブラリもあります。

この章では、ネットワークソケットプログラミングの最も有名な概念について解説します。


ソケットとは何か?

ソケットは、双方向通信チャネルのエンドポイントです。ソケットは、プロセス内、同じマシン上のプロセス間、または異なる大陸のプロセス間で通信することができます。

ソケットは、Unixドメインソケット、TCP、UDPなど、いくつかの異なるチャネルタイプで実装できます。ソケットライブラリは、共通のトランスポートだけでなく、残りの部分を処理するための汎用インタフェースを処理するための特定のクラスを提供します。

ソケットには独自のボキャブラリがあります。

期間 説明
ドメイン トランスポートメカニズムとして使用されるプロトコルファミリ。これらの値は、AF_INET、PF_INET、PF_UNIX、PF_X25などの定数です。
タイプ 2つのエンドポイント間の通信タイプ。通常、接続指向プロトコルの場合はSOCK_STREAM、コネクションレスプロトコルの場合はSOCK_DGRAMです。
プロトコル 典型的にはゼロであり、これはドメインおよびタイプ内のプロトコルの変形を識別するために使用することができる。
ホスト名 ネットワークインタフェースの識別子:

  • 文字列。ホスト名、ドット付きクォートアドレス、またはIPV6アドレス(コロン(おそらくドット)表記)を使用できます。
  • INADDR_BROADCASTアドレスを指定する文字列 “<broadcast>”。
  • INADDR_ANYを指定する長さゼロの文字列、または
  • ホストバイトオーダーのバイナリアドレスとして解釈される整数。
ポート 各サーバーは、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です。
  • protocol:これは通常省略され、デフォルトで0になります。

ソケットオブジェクトを取得したら、必要な関数を使用してクライアントまたはサーバープログラムを作成できます。以下は必要な機能の一覧です –

サーバーソケットメソッド

方法 説明
s.bind() このメソッドは、アドレス(ホスト名、ポート番号のペア)をソケットにバインドします。
s.listen() このメソッドは、TCPリスナーを設定して開始します。
s.accept() これは、受動的にTCPクライアント接続を受け入れ、接続が到着する(ブロックする)まで待機します。

クライアントソケットメソッド

方法 説明
s.connect() この方法は、TCPサーバー接続をアクティブに開始します。

一般的なソケットメソッド

方法 説明
s.recv() このメソッドは、TCPメッセージ
s.send() このメソッドは、TCPメッセージ
s.recvfrom() このメソッドは、UDPメッセージ
s.sendto() このメソッドは、UDPメッセージ
s.close() このメソッドはソケットを閉じます。
socket.gethostname() ホスト名を返します。

シンプルなサーバー

インターネットサーバーを作成するために、socketモジュールで使用できる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.connect(hosname、ポート)への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ネットワーク/インターネットプログラミングにおけるいくつかの重要なモジュールのリスト。

プロトコル 共通の機能 ポート番号 Pythonモジュール
HTTP ウェブページ 80 httplib、urllib、xmlrpclib
NNTP Usenetのニュース 119 nntplib
FTP ファイル転送 20 ftplib、urllib
SMTP メールを送信する 25 smtplib
POP3 メールを取得中 110 ポプリン
IMAP4 メールを取得中 143 イマプリブ
Telnet コマンドライン 23 telnetlib
Gopher 伝票転送 70 gopherlib、urllib

上記のすべてのライブラリをチェックして、FTP、SMTP、POP、およびIMAPプロトコルを操作してください。

前のページ④PythonMysqlデータベースアクセス

次のページ⑥Python電子メールを送信

スポンサーリンク

ネットワークエンジニアになりたければ下記から無料相談会に参加!
なんと無料で授業を受けれてエンジニアになれます

投稿日:

執筆者: