home changes contents help options

225:TCPクライアントを作る

socket モジュールを使用します。次のコードは HTTP プロトコルでデータを GET するコード片です。エラー処理は省略しています。詳しくは「ソケット」「TCP」「ネットワーク」「プログラミング」「Python」などで調べてみてください。 socket モジュールは低レベルのライブラリであるため、これを使ったプログラミングは C 言語でのソケットプログラミングとも類似点が多いです。そのため C でのコード例も参考になるはずです。ただし、 connect 失敗時に例外が送出されるなど、 Python 流に改変が加えられている点もあります。

import socket

#host = '127.0.0.1'
host = socket.gethostbyname('lightson.dip.jp')
port = 80

so = socket.socket()
so.connect((host, port))
so.send('GET / HTTP/1.0\r\n\r\n')

data = []
while True:
    message = so.recv(8192)
    if not message:
        break
    data.append(message)
so.close()

data = ''.join(data)
print data

makefile メソッドを用いるとソケットに関連付けられたファイルライクオブジェクトを使用できるようになります。このオブジェクトは、データを送受信する際に必要となるバッファの管理や通信完了したデータサイズのチェックなどを、自前で行ってくれます。ファイルオブジェクトはイテレータであるため for 文で受信データを 1 行ずつ処理ということも一応可能です。

import socket

#host = '127.0.0.1'
host = socket.gethostbyname('lightson.dip.jp')
port = 80

so = socket.socket()
so.connect((host, port))

wobj = so.makefile('wb')
wobj.write('GET / HTTP/1.0\r\n\r\n')
wobj.close()

robj = so.makefile('rb')
data = robj.read()
robj.close()

so.close()

print data

関連

226:TCPサーバを作る