server4.py

来自「python web programming 部分」· Python 代码 · 共 59 行

PY
59
字号
import SocketServer
import sys

def freadns(f):
    """read a netstring from a file."""
    size = ""
    while 1:
        c = f.read(1)
        if c == ":":
            break
        elif not c:
            raise IOError, "short netstring read"
        size = size + c
    size = sz = int(size)
    s = ""
    while sz:
        ss = f.read(sz)
        if not ss:
            raise IOError, "short netstring read"
        s += ss
        sz -= len(ss)
    if len(s) != size:
        raise IOError, "short netstring read"
    if f.read(1) != ",":
        raise IOError, "missing netstring terminator"
    return s

def fwritens(f, s):
    """write a netstring to a file."""
    s = encode(s)
    f.write(s)

def encode(s):
    """return a string's netstring."""
    return "%d:%s," % (len(s), s)

handlerClass = SocketServer.StreamRequestHandler
serverClass = SocketServer.TCPServer
if len(sys.argv) > 1:
    if sys.argv[1] == "-u":
        handlerClass = SocketServer.DatagramRequestHandler
        serverClass = SocketServer.UDPServer
    elif sys.argv[1] != "-t":
        sys.exit("Unknown option: "+sys.argv[1])

class MyRequestHandler(handlerClass):
    def handle(self):
        rq = freadns(self.rfile)
        print "From:", self.client_address, ":", rq
        print "----------------------"
        sys.stdout.flush()
        result = rq.upper()
        fwritens(self.wfile, result)

myServer = serverClass(('', 8081),
                MyRequestHandler)
myServer.serve_forever()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?