Python 核心编程第3版 课后题2-5

Python 核心编程第3版 课后题2-5

服务器端

# TCP服务器,识别客户端发出的date,os,和ls命令

from socket import *
from time import ctime
import os
import re

HOST = ''  # 变量空白,是对bind()方法的标识,表明可以使用任何可用的地址。
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)  # 参数表示在连接被转接或拒绝之前,传入连接请求的最大数


def orderExplain(order):
	
    patt = r'(?<=ls ).*'

    if order == 'date':
        return ctime()
    elif order == 'os':
        return os.name
    elif re.match('ls', order):
        if order == 'ls':
            return os.curdir
        else:
            path = re.findall(patt, order)[0]
            return '\n'.join(os.listdir(path))  # 将list转化为字符串
    else:
        return 'You have input a wrong order...'

while True:
    print('waiting for connection...')
    tcpCliSock, addr = tcpSerSock.accept()
    print('...connected from :', addr)

    while True:
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        result = orderExplain(data.decode())
        tcpCliSock.send(result.encode())
    tcpCliSock.close()
tcpSerSock.close()

客户端

# 客户端程序,仅允许输入date,os和ls命令

from socket import *

HOST = 'localhost'  # 服务器的主机名
PORT = 21567  # 服务器的端口号
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data = input('> ')
    if not data:
        break
    tcpCliSock.send(data.encode())
    data = tcpCliSock.recv(BUFSIZE)
    if not data:
        break
    print(data.decode())

tcpCliSock.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aidanmomo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值