Transcript Document

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