16.4 SocketServer模块
16.4.1 创建一个SocketServerTCP服务器
from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH)
from time import ctime
HOST = ''
PORT = 23456
ADDR = (HOST, PORT)
class MyRequestHandler(SRH):
def handle(self):
print '...connected from:', self.client_address
self.wfile.write('[%s] %s' % (ctime(), self.rfile.readline()))
tcpServ = TCP(ADDR, MyRequestHandler)
print 'waiting for connection...'
tcpServ.serve_forever()
我们从SocketServer的StreamRequestHandler类中派生出一个子类,并重写handle()函数。
我们可以用readline()函数得到客户消息,用write()函数把字符串发给客户端。
16.4.2 创建SocketServerTCP客户端
from socket import *
HOST = 'localhost'
PORT = 23456
BUFSIZ = 1024
ADDR = (HOST, PORT)
while True:
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
data = raw_input('> ')
if not data:
break
tcpCliSock.send('%s\r\n' % data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data.strip()
tcpCliSock.close()
SocketServer的请求处理器的默认行为是接受连接,得到请求,然后就关闭连接。这使得我们不能在程序运行时,一直保持连接状态,而是每次发送数据得到服务器的时候都要创建一个新的套接字。