150 likes | 260 Views
TCPでのPythonソケット関数. Python socket module: Just a thin wrapper over the underlying C library's socket calls. TCP による通信 gethostname() gethostbyname(hostname) gethostbyname_ex(hostname) gethostbyaddr(ipaddress) s = socket(family, type [, proto]) s.bind(address) s.close() s.connect(address)
E N D
TCPでのPythonソケット関数 Python socket module: Just a thin wrapper over the underlying C library's socket calls. • TCPによる通信 • gethostname() • gethostbyname(hostname) • gethostbyname_ex(hostname) • gethostbyaddr(ipaddress) • s = socket(family, type [, proto]) • s.bind(address) • s.close() • s.connect(address) • s.listen(backlog) • connection, address = s.accept() • string = connection.recv(bufsize [, flags]) • connection.send(string [, flags])
ソケットによるデータ通信とTCP/IPネットワークソケットによるデータ通信とTCP/IPネットワーク IPヘッダ情報 TCPヘッダ情報 IP TCP データ データ TCP/IP ネットワーク • 通信プログラムを作成する上では、通信相手のソケットに自分のソケットを繋ぐことができれば、安定した通信を行うことができる。 • 安定した通信は、TCP/IPのプロトコルで自動的に対処される。 • ソケットを繋ぐことができれば、 マシン同士が、どの様な通信機器や伝送経路を辿って、データを送受信しているかなどを気にする必要は無くなる。
データ データ IP TCP TCPによる通信 TCP通信は、コネクション型の通信で、サーバはlisten()de クライアントのconnect()要求を待つ。 コネクションにより、通信状態が確定すると、 サーバはaccept()を送る。
gethostname() 機能 ローカルマシンのホスト名を返す。 例 >>> from socket import * >>> gethostname() 'pro3'
gethostbyname(hostname) 機能 ホスト名のIPアドレスを返す。 例 >>> from socket import * >>> gethostbyname("pro1.anesth.kpu-m.ac.jp") '192.168.22.1'
gethostbyname_ex(hostname) 機能 ホスト名のIPアドレス名、ニックネーム、IPアドレスを返す。 例 >>> from socket import * >>> gethostbyname_ex("pro1.anesth.kpu-m.ac.jp") ('pro1.anesth.kpu-m.ac.jp', ['pro1'], ['192.168.22.1'])
gethostbyaddr(ipaddress) 機能 IPアドレスから、ホスト名のIPアドレス名、 ニックネーム、IPアドレスを返す。 例 >>> from socket import * >>> gethostbyaddr("192.168.22.1") ('pro1.anesth.kpu-m.ac.jp', ['pro1'], ['192.168.22.1'])
s = socket(family, type [, proto]) • 機能 • アドレスfamily、ソケットtyp、プロトコル番号protoを • 指定して新しいソケットを作る。 • AF_INET IPv4プロトコル(TCP, UDP) • AF_UNIX UNIXドメインプロトコル • SOCK_STREAM ストリームソケット(TCP) • SOCK_DGRAM データグラムソケット(UDP) • SOCK_RAW 生のソケット • SOCK_SEQPACKET 連続接続モード転送 • 例 • >>> s = socket(AF_INET, SOCK_STREAM)
s.bind(address) 機能 (host, port)形式のaddressをソケットに指定する。 この操作により、ネットワークホストとポート番号が 指定される。 hostが空文字列の場合、INADDR_ANYを示し、 全ての リモートホストを許可する。 例 INADDR_ANY、ポート番号10000 add=("",10000) s.bind(add)
s.close() 機能 ソケットを閉鎖する。 例 s.close()
s.connect(address) 機能 コネクション型通信(TCP)で使用するクライアント側 通信要求。 addressは(host, port)のタプル形式。 例 s.connect(("pro3.anesth.kpu-m.ac.jp", 10000))
s.listen(backlog) 機能 コネクション型通信(TCP)で使用するサーバ側受信キュー を 設定する。 backlogは数字で少なくとも1以上が必要。 例 s.listen(5)
connection, address = s.accept() 機能 処理する接続要求に対応した、コネクションオブジェクトと、アドレスを得る。 戻り値は(connection, address)のペアで、connection は接続を通じてデータの送受信を行うための新しいソケットオブジェクト、addressは接続先でソケットにbindしているアドレスを示します。 例 connection, address = s.accept()
string = connection.recv(bufsize [, flags]) 機能 メッセージを受信する。ソケットからデータを受信し、文字列として返します。受信する最大バイト数は、bufsizeで指定します。 例 data = connection.recv(1024)
connection.send(string [, flags]) 機能 メッセージを送信する。ソケットにデータを送信します。ソケットはリモートソケットに接続済みでなければなりません。 戻り値として、送信したバイト数を返します。 アプリケーションでは、必ず戻り値をチェックし、全てのデータが送られた事を確認する必要があります。 データの一部だけが送信された場合、アプリケーションで残りのデータを再送信してください。 例 connection.send(data)