socket的功能分割到不同函数

本文介绍了一个使用 Python 实现的简单 TCP 服务器程序,该程序通过接收客户端发送的特定字符串来返回预定义的回答。文章提供了四个关键函数的实现细节,包括如何监听连接、处理对话及请求。
#!/usr/bin/env python3
#-*- encoding:utf8 -*-

import argparse,socket,time

aphorisms ={
    b'Beautiful is better than ?':b'Ugly.',
    b'Explicit is better than ?':b'Implicit.',
    b'Simple is better than?':b'Complex.'}

def get_answer(aphorism):
    time.sleep(0.0)
    return aphorisms.get(aphorism,b'Error:unknow aphorism')

def parse_command_line(description):
    parser = argparse.ArgumentParser(description=description)
    parser.add_argument('host',help='IP or Hostname')
    parser.add_argument('-p',type=int,help='TCP port number',metavar='port',default=1060)
    
    args=parser.parse_args()
    address =((args.host,args.p))

def create_srv_socket(address):
    listener = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    listener.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    listener.bind(address)
    listener.listen(64)
    print('Listen at {}'.format(address))

def accept_connections_forever(listener):
    while True:
        sock,address = listener.accept()
        print('Acceptd connection from {}'.format(address))
        handle_conversation(sock,address)

def handle_conversation(sock,address):
    try:
        while True:
            handle_request(sock)
    except EOFError:
        print('Client {} error : {}'.format(address , e))
    finally:
        sock.close()


def handle_request(sock):
    aphorism = recv_until(sock , b'?')
    answer = get_answer(aphorism)
    sock.sendall(answer)

def recv_until(sock,suffix):
    message = sock.recv(4096)
    if not message:
        raise EOFError('socket closed')
    while not message.endswith(suffix):
        data = sock.recv(4096)
        if not data:
            raise IOError('Received {!r} then socket closed'.format(message))
        message += data
    return message

这段代码的好像是最后4个函数,这3个函数之间的层级调用过程。

转载于:https://www.cnblogs.com/alben-cisco/p/7096994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值