Latest web development tutorials

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

Pythonは、アクセスネットワークサービスの二つのレベルを提供しています。 :

  • 低レベルのネットワークサービスは、基本的なソケットをサポートするために、それは標準的なBSDソケットAPIを提供し、あなたは、基礎となるオペレーティング・システムのソケット・インタフェースのすべてのメソッドにアクセスすることができます。
  • ネットワークサービスモジュールのSocketServerのハイレベル、それはあなたがネットワークサーバの開発を簡素化することができ、中央のサーバ・クラスを提供します。

ソケットは何ですか?

上のホスト間またはコンピュータ間のプロセスが通信できるように、また、「ソケット」として知られているソケットは、アプリケーションは通常、ネットワーク要求や応答ネットワーク要求への「ソケット」によって発行されます。


ソケット()関数

次のようにPythonは、我々はソケットを作成するソケット()関数を使用し、構文は次のとおりです。

socket.socket([family[, type[, proto]]])

パラメータ

  • 家族:家族がソケットまたはAF_INET AF_UNIXを行うことができます
  • タイプ:ソケットタイプがに接続指向またはコネクションすることができますSOCK_STREAMまたはSOCK_DGRAM
  • プロトコル:一般的にはゼロにデフォルト値を記入していません。

Socketオブジェクト(ビルトイン)の方法

関数 説明
サーバソケット
s.bind() AF_INETでソケットにバインドアドレス(ホスト、ポート)は、タプル(ホスト、ポート)の形式でアドレスを示しています。
s.listen() TCPリスニングを開始します。 接続を拒否する前に、指定されたバックログは、オペレーティングシステムは、接続の最大数を一時停止することができます。 この値は、少なくとも1、ほとんどのアプリケーションは、5に設定することができるされています。
s.accept() TCPクライアント接続のパッシブ受け入れの到着を待っている(ブロッキング)
クライアントソケット
s.connect() アクティブは、TCPサーバー接続を初期化します。 タプル(ホスト名、ポート)の形式の一般的なアドレスは、接続エラーた場合、エラーはsocket.errorが返されます。
s.connect_ex() すると、エラーの代わりに例外をスロー)(関数の拡張バージョンを接続すると、エラーコードを返します。
ソケット関数の公共目的
s.recv() TCPデータを受信し、データはBUFSIZEを受信するデータの最大量を指定し、文字列として返されます。 フラグは通常無視することができ、メッセージに関する追加情報を提供します。
s.send() TCPデータを送信し、ソケット接続のデータ列を送信します。 戻り値は、送信するバイト数で、この数はバイトの文字列未満であってもよいです。
s.sendall() TCPデータ、完全な送信TCPデータの送信を完了します。 これは、ソケット接続にデータ文字列を送信しますが、返す前にすべてのデータを送信しようとします。 正常な戻りなし、故障例外がスローされません。
s.recvform() UDPデータを受信すると()はrecvに似ていますが、戻り値は(データ、アドレス)です。 前記データはアドレスデータがソケットアドレスを送信され、受信したデータを含む文字列です。
s.sendto() アドレスがリモートアドレスを指定(IPADDR、port)のタプルの形態である、ソケットにデータを送信し、UDPデータを送信します。 戻り値は、送信されたバイト数です。
s.close() ソケットを閉じます
s.getpeername() 接続ソケットのリモートアドレスを返します。 通常、戻り値はタプル(IPADDR、ポート)です。
s.getsockname() ソケット自身のアドレスを返します。 通常のタプル(IPADDR、ポート)
s.setsockopt(レベル、OPTNAME、値) 与えられたソケットオプションの値を設定します。
s.getsockopt(レベル、OPTNAME [.buflen]) ソケットオプションの戻り値。
s.settimeout(タイムアウト) ソケット操作のタイムアウト期間を設定し、タイムアウトは秒単位で浮動小数点数、です。 なし値は、タイムアウト時間がないことを示します。 それらが接続動作させるために使用することができるので、一般的に、タイムアウト時間だけ(例えば、接続などを())、ソケットセットを作成する必要があります
s.gettimeout() 何も設定されたタイムアウト時間がない場合は、秒単位で、現在のタイムアウト時間の値を返しますNoneを返します。
s.fileno() ソケットのファイル記述子を返します。
s.setblocking(フラグ) フラグが0の場合、ソケットは、そうでなければ、ソケットブロックモード(デフォルト値)に、非ブロックモードに設定されています。 あなたはRECV()を呼び出すと、任意のデータを検索したり、すぐにデータを送信することはできません()の呼び出しを送信しませんでした、非ブロックモード、それはsocket.errorが例外が発生します。
s.makefile() ソケットに関連して、関連する文書を作成します。

簡単な例

サーバー

私たちは、ソケットオブジェクトを作成するために、ソケットモジュールソケット関数を使用ます。 ソケットオブジェクトは、ソケットサービスを設定するために他の関数を呼び出すことができます。

今、私たちは(ホスト名、ポート)機能ポート(ポート)のバインドを呼び出すことにより、サービスを指定することができます

次に、我々は、ソケットオブジェクトのacceptメソッドを呼び出します。 この方法は、クライアント接続を待ち、クライアントに接続を表す接続オブジェクトを返します。

次のように完全なコードは次のとおりです。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问本教程!')
    c.close()                # 关闭连接

クライアント

次に、上記で作成したサービスインスタンスに接続するための簡単なクライアントを記述します。 ポート番号は12345です。

socket.connect(hosname、ポート)メソッドポート・サービス・プロバイダへのホスト名ポートのホストへのTCP接続をオープンします。いったん接続された操作の完了が接続を閉じる必要があります後、私たちは、覚えて、サーバーからのデータを投稿することができます。

次のように完全なコードは次のとおりです。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

今、私たちも、端末を開く必要があり、第1端子がserver.pyファイルを実行します。

$ python server.py

第2端子はclient.pyファイルを実行します。

$ python client.py 
欢迎访问本教程!

これは私たちの最初にして、ターミナルを開き、次の情報が出力され表示されます。

连接地址: ('192.168.0.118', 62461)

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

ここではいくつかの重要なモジュールのPythonネットワークプログラミングは、次のとおりです。

合意 便利な機能 ポート番号 Pythonモジュール
HTTP ウェブアクセス 80 httplib、urllibでも、xmlrpclib
NNTP 読書やニュース記事を掲載、「ポスト」として知られています 119 nntplib
FTP ファイル転送 20 ftplib、urllibでも
SMTP 電子メールを送信します 25 したりするsmtplib
POP3 郵便を受け取ります 110 poplibと
IMAP4 メールを取得 143 imaplib
テルネット コマンドライン 23 telnetlib
ゴーファー 情報を探します 70 gopherlib、urllibでも

詳細は公式ウェブサイトで見つけることができますPythonのソケットライブラリとモジュール