• Python简单服务器程序


    这是《Python核心编程(中的文第二版)》的一个习题,题目要求服务器能识别以下命令:

    ls 返回服务器程序当前目录

    os 返回服务器操作系统的信息

    date 得到服务器当前的时间

    ls dir 返回目录dir的文件列表

    服务器程序:

     1 import time
     2 import os
     3 import datetime
     4 
     5 HOST=''
     6 PORT=21234
     7 ADDR=(HOST,PORT)
     8 BUFSIZE=8096
     9 
    10 SerSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    11 SerSock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    12 SerSock.bind(ADDR)
    13 SerSock.listen(5)
    14 
    15 def process_cmd(cmd):
    16     print "The command receive from client is:%s"%cmd
    17     if cmd=='ls':
    18         curdir=os.curdir
    19         res=os.listdir(curdir)
    20     elif cmd=='os':
    21         res=os.uname()
    22     elif cmd.startswith('ls'):
    23         length=len(cmd.split())
    24         if length==1:
    25             res="command is illegal"
    26         elif length==2:
    27             reqdir=cmd.split()[1]
    28             try:
    29                 res=os.listdir(reqdir)
    30             except OSError,e:
    31                 res=e
    32         else:
    33             res="argument is illegal"
    34     elif cmd=='date':
    35         res=datetime.date.today()
    36     else:
    37         res='command is illegal'
    38     print res
    39     return str(res)
    40 while True:
    41     CliSock,addr=SerSock.accept()
    42     print "...connected from %s:%s"%addr
    43     while True:
    44         cmd=CliSock.recv(BUFSIZE)
    45         if not cmd:
    46             break
    47         else:
    48             res=process_cmd(cmd)
    49         CliSock.send(res)
    50     CliSock.close()
    51 SerSock.close()

    客户端程序:

     1 #!/usr/bin/python
     2 
     3 import socket
     4 
     5 HOST='localhost'
     6 PORT=21234
     7 ADDR=(HOST,PORT)
     8 BUFSIZ=8096
     9 
    10 CliSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    11 CliSock.connect(ADDR)
    12 print "Please input below command."
    13 print "*************************************"
    14 print "date   ls/ls dir     os"
    15 print "*************************************"
    16 while True:
    17     cmd=raw_input(">")
    18     if not cmd:
    19         continue
    20     CliSock.send(cmd)
    21     res=CliSock.recv(BUFSIZ)
    22     if not res:
    23         print "response from server error."
    24     print res
    25 
    26 CliSock.close()

    执行结果:

    Please input below command.
    *************************************
    date   ls/ls dir     os
    *************************************
    >date
    2015-06-09
    >ls
    ['client_select.py', 'client.py', 'server_select.py', 'chat_server_v1.py', 'server.py', 'daytimeclient.py', 'chat_client_v1.py', 'chat_server_v2.py', 'tsTserv.py', 'tsTclnt.py']
    >ls /home
    ['tmyyss']
    >os
    ('Linux', 'ubuntu', '3.13.0-53-generic', '#89-Ubuntu SMP Wed May 20 10:34:28 UTC 2015', 'i686')
    >
    >
    >
    >
    >exit
    command is illegal
    >
    >
    >q
    command is illegal
  • 相关阅读:
    Liquidity Planner – Tips
    Liquidity Planner Configuration
    SAP FI 应收应付账龄分析-AP/AR AGING 功能研究
    Voucher = 代金券 , Coupon = 优惠劵 的财务处理
    FW:华为从信息化到数字化的五个阶段
    FW: 安全与性能保卫战 -安全高地保卫战
    FW:移动端UI一致性解决方案
    FW: SAP BO Analysis for Office 2.2 generates “Size Limit of Result Set Exceeded” error message
    FW:美团民宿跨端复用框架设计与实践
    转发:智能客服对话机器人
  • 原文地址:https://www.cnblogs.com/tmyyss/p/4564218.html
Copyright © 2020-2023  润新知