工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Pythonネットワークプログラミング:ソケットと高度なプロトコルをマスター

ソケットとは

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

ソケットは、Unixドメインソケット、TCP、UDPなど、さまざまなチャネルタイプで実装できます。socketライブラリは、一般的なトランスポートを処理するための特定のクラスと、残りを処理するための汎用インターフェースを提供します。

ソケットには独自の用語があります:

No.用語と説明
1ドメイン - トランスポートメカニズムとして使用されるプロトコルファミリ。AF_INET、PF_INET、PF_UNIX、PF_X25などの定数
2タイプ - 2つのエンドポイント間の通信タイプ。通常、接続指向プロトコルにはSOCK_STREAM、非接続型プロトコルにはSOCK_DGRAM
3プロトコル - 通常はゼロ。ドメインとタイプ内でプロトコルのバリアントを識別するために使用される場合がある
4ホスト名 - ネットワークインターフェースの識別子
  • ホスト名、ドット区切りアドレス、またはコロン表記のIPV6アドレスの文字列
  • 文字列"<broadcast>" - INADDR_BROADCASTアドレスを指定
  • 長さゼロの文字列 - INADDR_ANYを指定
  • 整数 - ホストバイトオーダーのバイナリアドレスとして解釈
5ポート - 各サーバーは1つ以上のポートでクライアントからの呼び出しを待機。ポートはFixnumポート番号、ポート番号を含む文字列、またはサービス名

socketモジュール

ソケットを作成するには、socketモジュールで利用可能なsocket.socket()関数を使用します。一般的な構文:

s = socket.socket(socket_family, socket_type, protocol=0)

パラメータ

socketオブジェクトを取得したら、必要な関数を使用してクライアントまたはサーバープログラムを作成できます。必要な関数のリスト:

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

No.メソッドと説明
1s.bind() - アドレス(ホスト名、ポート番号の組み合わせ)をソケットにバインド
2s.listen() - TCPリスナーをセットアップして開始
3s.accept() - TCPクライアント接続を受動的に受け入れ、接続が到着するまで待機(ブロッキング)

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

No.メソッドと説明
1s.connect() - TCPサーバー接続を能動的に開始

汎用ソケットメソッド

No.メソッドと説明
1s.recv() - TCPメッセージを受信
2s.send() - TCPメッセージを送信
3s.recvfrom() - UDPメッセージを受信
4s.sendto() - UDPメッセージを送信
5s.close() - ソケットを閉じる
6socket.gethostname() - ホスト名を返す

シンプルなサーバー

インターネットサーバーを書くには、socketモジュールで利用可能なsocket関数を使用してソケットオブジェクトを作成します。ソケットオブジェクトを使用して他の関数を呼び出し、ソケットサーバーをセットアップします。

次に、bind(hostname, port)関数を呼び出して、指定されたホスト上のサービス用portを指定します。

次に、返されたオブジェクトのacceptメソッドを呼び出します。このメソッドは、指定したポートにクライアントが接続するまで待機し、そのクライアントへの接続を表すconnectionオブジェクトを返します。

#!/usr/bin/python
# サーバーファイル: server.py
import socket  # socketモジュールをインポート

s = socket.socket()  # ソケットオブジェクトを作成
host = socket.gethostname()  # ローカルマシン名を取得
port = 12345  # サービス用ポートを予約

s.bind((host, port))  # ポートにバインド
s.listen(5)  # クライアント接続を待機

while True:
    c, addr = s.accept()  # クライアントとの接続を確立
    print('Got connection from', addr)
    c.send('Thank you for connecting')
    c.close()  # 接続を閉じる

シンプルなクライアント

指定されたポート12345とホストへの接続を開く非常にシンプルなクライアントプログラムを書きます。Pythonのsocketモジュール関数を使用してソケットクライアントを作成するのは非常に簡単です。

socket.connect(hostname, port)は、hostnameのportへのTCP接続を開きます。ソケットが開いたら、ファイルと同様にそこから読み取りできます。完了したら、ファイルを閉じるように閉じることを忘れないでください。

以下のコードは、指定されたホストとポートに接続し、ソケットから利用可能なデータを読み取り、終了する非常にシンプルなクライアントです。

#!/usr/bin/python
# クライアントファイル: client.py
import socket  # socketモジュールをインポート

s = socket.socket()  # ソケットオブジェクトを作成
host = socket.gethostname()  # ローカルマシン名を取得
port = 12345  # サービス用ポートを予約

s.connect((host, port))
print(s.recv(1024))
s.close()  # 完了したらソケットを閉じる

このserver.pyをバックグラウンドで実行し、上記のclient.pyを実行して結果を見てみます。

# 以下でサーバーをバックグラウンドで起動
$ python server.py &
# サーバーが起動したらクライアントを実行
$ python client.py

以下の結果が出力されます:

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Pythonインターネットモジュール

Pythonネットワーク/インターネットプログラミングにおける重要なモジュールの一覧:

プロトコル一般的な機能ポート番号Pythonモジュール
HTTPWebページ80httplib, urllib, xmlrpclib
NNTPUsenetニュース119nntplib
FTPファイル転送20ftplib, urllib
SMTPメール送信25smtplib
POP3メール受信110poplib
IMAP4メール受信143imaplib
Telnetコマンドライン23telnetlib
Gopherドキュメント転送70gopherlib, urllib

FTP、SMTP、POP、IMAPプロトコルで作業するために、上記で言及されたすべてのライブラリを確認してください。

さらに学ぶために

これはソケットプログラミングのクイックスタートでした。広大なテーマです。詳細は以下のリンクを参照することをお勧めします。

Python

  1. Python データ型マスター: 実践ガイド
  2. Python 演算子完全マスター: 包括的ガイド
  3. Python pass文完全マスター: 実践ガイド
  4. Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
  5. Python辞書完全ガイド:作成、操作、高度なテクニック
  6. Pythonオブジェクト指向プログラミング完全ガイド:クラス、継承、カプセル化、ポリモーフィズム
  7. Pythonイテレータ完全ガイド:仕組みと自作方法
  8. Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
  9. Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
  10. Pythonのtime.sleep()をマスター:ベストプラクティス、マルチスレッド、実例
  11. Pythonマルチスレッドプログラミング:効率的な並行処理テクニック