SocketServer が便利すぎる。

エコーサーバを写経してみた。

echo_server.py

# vim: fileencoding=utf8 sts=4 sw=4

import SocketServer

class EchoHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        print "connect from:", self.client_address
        while True:
            data = self.request.recv(8192)
            if len(data) == 0:
                break
            self.request.send(data)
        self.request.close()

if __name__ == '__main__':
    #server = SocketServer.TCPServer(('', 12345), EchoHandler)
    server = SocketServer.ThreadingTCPServer(('', 12345), EchoHandler)
    #server = SocketServer.ForkingTCPServer(('', 12345), EchoHandler)
    print 'listening:', server.socket.getsockname()
    server.serve_forever()

SocketServerモジュールを使ったサーバ - Konnichiwa, A doumo
http://f59.aaa.livedoor.jp/~ookini/pukiwiki.php?SocketServer%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%A4%F2%BB%C8%A4%C3%A4%BF%A5%B5%A1%BC%A5%D0

99%そのままです。

echo_client.py

# vim: fileencoding=utf8 sts=4 sw=4

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)

try:
    r = s.connect(('', 12345))
    s.send('test message')
    data = s.recv(1024)
    print 'Client recieved data :', str(data)
    s.close()

except socket.error, e:
    print 'Error: %s' % e

こちらもそのままです。
http://omake.accense.com/wiki/Python/Snippet/ネットワーク

簡単にTCPスレッドサーバが書けてしまうのは便利:-)