ソケットプログラミング
http://pleac.sourceforge.net/pleac_python/sockets.htmlを参考に作成しましたー。
まずはクライアントソケットです。
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket class Client: """ クライアントソケット """ def __init__(self, ip_addr, port): self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._ip_addr = ip_addr self._port = port def connect(self): """ 接続開始 """ print "-->CONNECT BEGIN." self._sock.connect((self._ip_addr, self._port)) print "-->CONNECT DONE." self._sock.send("INIT") print self._sock.recv(1024).rstrip() def talk(self): """ 会話 """ self._sock.send("TALK") print self._sock.recv(1024).rstrip() cmd = raw_input(">>") self._sock.send(cmd) print self._sock.recv(1024).rstrip() def disconnect(self): """ 切断 """ self._sock.send("END") self._sock.close() print "-->CLOSE DONE." def main(): client = Client("localhost", 9999) client.connect() while True: client.talk() cmd = raw_input("quit?(y/n)") if cmd.strip() == "y": break client.disconnect() if __name__ == "__main__": main()
サーバーソケットです。
import time from SocketServer import TCPServer from SocketServer import BaseRequestHandler class Server: """ ソケットサーバー """ def __init__(self, ip_addr, port): print "-->SERVER CREATE BEGIN." self._server = TCPServer((ip_addr, port), ServerHandler) print "-->SERVER CREATE DONE." def start(self): print "-->SERVER START." self._server.serve_forever() class ServerHandler(BaseRequestHandler): """ ソケットサーバーのハンドリング """ def handle(self): print "%s I got an request from ip=%s port=%s"%( time.strftime("%Y-%m-%d %H:%M:%S"), self.client_address[0], self.client_address[1]) while True: # コマンド処理 recv = self.getReceive() print "RECEIVE COMMAND:", recv if recv == "INIT": self.request.send("Hello.") elif recv == "TALK": self.request.send("What is your name?\n") recv = self.getReceive() send = "Welcome %s!\n"%recv self.request.send(send) elif recv == "END": break print "%s connection finished"%self.client_address[0] def getReceive(self): return self.request.recv(1024).strip() def main(): server = Server("127.0.0.1", 9999) server.start() if __name__ == "__main__": main()