python3のネットワークプログラミング2024 年の最新の入門チュートリアル。このコースでは ソケットは何ですか?,ソケット()関数,簡単な例,Pythonのインターネットモジュール, について学習できます。
Pythonは、アクセスネットワークサービスの二つのレベルを提供しています。 :
上のホスト間またはコンピュータ間のプロセスが通信できるように、また、「ソケット」として知られているソケットは、アプリケーションは通常、ネットワーク要求や応答ネットワーク要求への「ソケット」によって発行されます。
次のようにPythonは、我々はソケットを作成するソケット()関数を使用し、構文は次のとおりです。
socket.socket([family[, type[, proto]]])
SOCK_STREAM
またはSOCK_DGRAM
関数 | 説明 |
---|---|
サーバソケット | |
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/python3 # 文件名:server.py # 导入 socket、sys 模块 import socket import sys # 创建 socket 对象 serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) # 获取本地主机名 host = socket.gethostname() port = 9999 # 绑定端口 serversocket.bind((host, port)) # 设置最大连接数,超过后排队 serversocket.listen(5) while True: # 建立客户端连接 clientsocket,addr = serversocket.accept() print("连接地址: %s" % str(addr)) msg='欢迎访问本教程!'+ "\r\n" clientsocket.send(msg.encode('utf-8')) clientsocket.close()
次に、上記で作成したサービスインスタンスに接続するための簡単なクライアントを記述します。 ポート番号は12345です。
socket.connect(hosname、ポート)メソッドポート・サービス・プロバイダへのホスト名ポートのホストへのTCP接続をオープンします。いったん接続された操作の完了が接続を閉じる必要があります後、私たちは、覚えて、サーバーからのデータを投稿することができます。
次のように完全なコードは次のとおりです。
#!/usr/bin/python3 # 文件名:client.py # 导入 socket、sys 模块 import socket import sys # 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 获取本地主机名 host = socket.gethostname() # 设置端口好 port = 9999 # 连接服务,指定主机和端口 s.connect((host, port)) # 接收小于 1024 字节的数据 msg = s.recv(1024) s.close() print (msg.decode('utf-8'))
今、私たちも、端末を開く必要があり、第1端子がserver.pyファイルを実行します。
$ python3 server.py
第2端子はclient.pyファイルを実行します。
$ python3 client.py 欢迎访问本教程!
これは私たちの最初にして、ターミナルを開き、次の情報が出力され表示されます。
连接地址: ('192.168.0.118', 33397)
ここではいくつかの重要なモジュールの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のソケットライブラリとモジュール 。