pythonでsocketプログラミングをしてみたので備忘録として残しておく.
ソケット(socket)について
ソケットは以下の2種類があり,単純にソケットと言うとネットワークソケットを示すことが多い.
- UNIXドメインソケット/IPCソケット
- ネットワークソケット/TCPソケット
UNIXドメインソケット/IPCソケット
IPCはInter-Process Communicationの略.
同じコンピュータ上で実行されている異なるプログラム(プロセス)間でデータを送受信するためのインターフェース.
ネットワークソケット/TCPソケット
TCP/IPネットワークを通じて別のコンピュータ上で実行されるプログラム(プロセス)とデータを送受信するためのインターフェース.
socketライブラリ(python)
pythonでソケットプログラミングをする際,よく以下の関数を利用する.
- socket.socket([family[,type[,proto]]])
- socket.bind(address)
- socket.listen(backlog)
- socket.accept()
socket.socket([family[,type[,proto]]])
ソケットを生成するための関数.これがないと始まらない.アドレスファリミ,ソケットタイプ,プロトコル番号を指定する.
よくアドレスファミリとソケットタイプだけ指定して利用する場合が多い.
アドレスファミリ
主に使うのは以下の2つ.
- AF_INET(デフォルト値)
- AF_INET6
インターネットを示しており,INETはIPv4,INET6はIPv6である.
ソケットタイプ
TCP/UDPとか.以下の2つをよく利用する
- SOCK_STREAM(TCP/デフォルト値)
- SOCK_DGRAM(UDP)
sock.bind(address)
ソケットをaddressにバインドする.例えば,socket.socketでAF_INETを利用している場合は(host,port)のタプルがaddressになる.
socket.listen(backlog)
ソケットをListenし,接続を行う.backlogは0以上にする必要があるが,通常は5である.
socket.accept()
接続を受け付ける.bindやlistenを既に済ましてあることが前提条件.返り値は(conn,address)であり,connはデータ送受信用の新しいソケットオブジェクト,addressはIPアドレス.