Python3-python-networking
Python 3-ネットワークプログラミング
Pythonは、ネットワークサービスへの2つのレベルのアクセスを提供します。 低レベルでは、基盤となるオペレーティングシステムの基本的なソケットサポートにアクセスできます。これにより、接続指向プロトコルとコネクションレスプロトコルの両方のクライアントとサーバーを実装できます。
Pythonには、FTP、HTTPなどの特定のアプリケーションレベルのネットワークプロトコルへの高レベルのアクセスを提供するライブラリもあります。
この章では、ネットワークで最も有名な概念-ソケットプログラミングについて理解します。
ソケットとは何ですか?
ソケットは、双方向通信チャネルのエンドポイントです。 ソケットは、プロセス内、同じマシン上のプロセス間、または異なる大陸のプロセス間で通信できます。
ソケットは、Unixドメインソケット、TCP、UDPなど、さまざまなチャネルタイプで実装できます。 _socket_ライブラリは、一般的なトランスポートを処理するための特定のクラスと、残りを処理するための汎用インターフェイスを提供します。
ソケットには独自の語彙があります-
Sr.No. | Term & Description |
---|---|
1 |
domain トランスポートメカニズムとして使用されるプロトコルファミリ。 これらの値は、AF_INET、PF_INET、PF_UNIX、PF_X25などの定数です。 |
2 |
type 2つのエンドポイント間の通信のタイプ。通常、接続指向プロトコルの場合はSOCK_STREAM、コネクションレスプロトコルの場合はSOCK_DGRAM。 |
3 |
protocol 通常、これはドメインおよびタイプ内のプロトコルのバリアントを識別するために使用できます。 |
4 |
hostname ネットワークインターフェイスの識別子-
|
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のいずれかです。
- protocol -これは通常省略され、デフォルトは0です。
_socket_オブジェクトを取得したら、必要な関数を使用してクライアントまたはサーバープログラムを作成できます。 以下は、必要な機能のリストです-
サーバーソケットメソッド
Sr.No. | Method & Description |
---|---|
1 |
s.bind() このメソッドは、アドレス(ホスト名、ポート番号のペア)をソケットにバインドします。 |
2 |
s.listen() このメソッドは、TCPリスナーをセットアップして開始します。 |
3 |
s.accept() これは、TCPクライアント接続を受動的に受け入れ、接続が到着するまで待機します(ブロック)。 |
クライアントソケットメソッド
Sr.No. | Method & Description |
---|---|
1 |
s.connect() このメソッドは、TCPサーバー接続をアクティブに開始します。 |
一般的なソケットメソッド
Sr.No. | Method & Description |
---|---|
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)*関数を呼び出して、指定されたホスト上のサービスの_port_を指定します。
次に、返されたオブジェクトの_accept_メソッドを呼び出します。 このメソッドは、クライアントが指定したポートに接続するまで待機し、そのクライアントへの接続を表す_connection_オブジェクトを返します。
#!/usr/bin/python3 # This is server.py file
import socket
# create a socket object
serversocket = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 9999
# bind to the port
serversocket.bind((host, port))
# queue up to 5 requests
serversocket.listen(5)
while True:
# establish a connection
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr))
msg = 'Thank you for connecting'+ "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()
シンプルなクライアント
特定のポート12345と特定のホストへの接続を開く、非常に単純なクライアントプログラムを作成してみましょう。 Pythonの_socket_モジュール関数を使用してソケットクライアントを作成するのは非常に簡単です。
- socket.connect(hosname、port)*は、_port_上の_hostname_へのTCP接続を開きます。 ソケットを開いたら、IOオブジェクトのようにソケットから読み取ることができます。 完了したら、ファイルを閉じるのと同じように忘れずに閉じてください。
例
次のコードは、特定のホストとポートに接続し、ソケットから利用可能なデータを読み取り、終了する非常に単純なクライアントです-
#!/usr/bin/python3 # This is client.py file
import socket
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 9999
# connection to hostname on the port.
s.connect((host, port))
# Receive no more than 1024 bytes
msg = s.recv(1024)
s.close()
print (msg.decode('ascii'))
次に、この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
出力
これは、次の結果を生成します-
on server terminal
Got a connection from ('192.168.1.10', 3747)
On client terminal
Thank you for connecting
Pythonインターネットモジュール
Pythonネットワーク/インターネットプログラミングの重要なモジュールのリストを以下に示します-
Protocol | Common function | Port No | Python module |
---|---|---|---|
HTTP | Web pages | 80 | httplib, urllib, xmlrpclib |
NNTP | Usenet news | 119 | nntplib |
FTP | File transfers | 20 | ftplib, urllib |
SMTP | Sending email | 25 | smtplib |
POP3 | Fetching email | 110 | poplib |
IMAP4 | Fetching email | 143 | imaplib |
Telnet | Command lines | 23 | telnetlib |
Gopher | Document transfers | 70 | gopherlib, urllib |
FTP、SMTP、POP、およびIMAPプロトコルを使用するには、上記のすべてのライブラリを確認してください。
さらに読む
これは、ソケットプログラミングのクイックスタートでした。 それは広大なテーマです。 詳細を見つけるには、次のリンクを参照することをお勧めします-
- link:/unix_sockets/index [Unixソケットプログラミング]。
- Python Socket Library and Modules。