Python-network-programming-python-sockets-programming
Python-ソケットプログラミング
Pythonは、ネットワークサービスへの2つのレベルのアクセスを提供します。 低レベルでは、基盤となるオペレーティングシステムの基本的なソケットサポートにアクセスできます。これにより、接続指向プロトコルとコネクションレスプロトコルの両方のクライアントとサーバーを実装できます。
Pythonには、FTP、HTTPなどの特定のアプリケーションレベルのネットワークプロトコルへの高レベルのアクセスを提供するライブラリもあります。
ソケットは、双方向通信チャネルのエンドポイントです。 ソケットは、プロセス内、同じマシン上のプロセス間、または異なる大陸のプロセス間で通信できます。 ソケットモジュールを使用して、ソケットを作成および使用します。
ソケットには独自の語彙があります-
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_モジュールで利用可能な_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/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)*は、_port_上の_hostname_への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
パブリックURLを持つソケット
以下の例では、ソケットモジュールのいくつかのメソッドを使用して、サーバーのアドレス情報とホスト名の詳細を検索します。
import socket
from pprint import pprint
# get server address
addrinfo = socket.getaddrinfo('finddevguides.com', 'www')
pprint(addrinfo)
# get server hostname
print socket.gethostname()
上記のプログラムを実行すると、次の出力が得られます-
[(2, 1, 0, '', ('94.130.81.180', 80))]
DESKTOP-JXYKQCPLP