home changes contents help options

226:TCPサーバを作る

socket

socket モジュールを使用した、受信データをそのまま返すサーバです。

import socket

host = socket.gethostbyname('localhost')
port = 49152

so = socket.socket()
so.bind((host, port))
so.listen(1)

while True:
    conn, address = so.accept()
    print address

    data = conn.recv(8192)
    print data

    conn.send(data)

    conn.close()

このサーバにアクセスするクライアントの例です。

import socket

host = socket.gethostbyname('localhost')
port = 49152

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

so.send('Hello')

data = so.recv(8192)

so.close()

print data

SocketServer?

SocketServer? モジュールを使用すると、よりサーバを作りやすくなります。 bind, listen, accept といったシステムコールが隠蔽されるため、処理内容の実装に専念できます。

import socket
import SocketServer

class EchoHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        data = self.request.recv(8192)
        print data
        self.request.send(data)
        self.request.close()

host = socket.gethostbyname('localhost')
port = 49152
server = SocketServer.TCPServer((host, port), EchoHandler)
server.serve_forever()

関連

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