IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 《python核心编程(第3版)》练习题2-4_2-5-python3 -> 正文阅读

[网络协议]《python核心编程(第3版)》练习题2-4_2-5-python3

python版本:python3.8

2-4

客户端。更新 TCP(tsTclnt.py)和 UDP(tsUclnt.py)客户端,以使得服务器名称无须硬编码到应用程序中。此外,应该允许用户指定主机名和端口号,且如果二者中任何一个或者全部参数丢失,那么应该使用默认值。

'''
@文件        :homework_2_4_serv.py
@说明        :TCP客户端,
            运行用户指定主机名和端口号,且如果二者中任何一个或者全部参数丢失,那么应该使用默认值。
@时间        :2021/12/13 17:01:01
@作者        :Dannie
@版本        :
'''
from socket import *

def get_addr():
    HOST = input('Please input HOST:')
    PORT = input('Please input PORT:')
    return(HOST, PORT)

def main():
    defaultHOST = 'localhost'
    defaultPORT = 9999
    BUFSIZ = 1024
    HOST, PORT = get_addr()

    if not HOST:
        HOST = defaultHOST

    if not PORT:
        PORT = defaultPORT
    else:
        try:
            PORT = int(PORT)
        except:
            PORT = defaultPORT

    ADDR = (HOST, PORT)

    tcpcliSock = socket(AF_INET, SOCK_STREAM)
    try:
        tcpcliSock.connect(ADDR)
        while True:
            data = input('>')
            if not data:
                break
            tcpcliSock.send(data.encode('utf-8'))
            msg = tcpcliSock.recv(BUFSIZ)
            if not msg:
                break
            else:
                print(msg.decode('utf-8'))
    except:
        print('连接失败,请重新尝试')

    tcpcliSock.close()


main()

'''
@文件        :homework_2_4_udpclient.py
@说明        :UDP客户端,
            运行用户指定主机名和端口号,且如果二者中任何一个或者全部参数丢失,那么应该使用默认值。
@时间        :2021/12/13 17:41:59
@作者        :Dannie
@版本        :
'''
from socket import *

def get_addr():
    HOST = input('Please input HOST:')
    PORT = input('Please input PORT:')
    return(HOST, PORT)

def main():
    defaultHOST = 'localhost'
    defaltPORT = 9999
    BUFSIZ = 1024

    HOST, PORT = get_addr()
    if not HOST:
        HOST = defaultHOST
    if not PORT:
        PORT = defaltPORT
    else:
        try:
            PORT = int(PORT)
        except:
            PORT = defaltPORT
    ADDR = (HOST, PORT)

    udpcliSock = socket(AF_INET, SOCK_DGRAM)
    udpcliSock.settimeout(2)    # 设置超时

    while True:
        data = input('>')
        if not data:
            break
        try:
            udpcliSock.sendto(data.encode('utf-8'), ADDR)
            msg, ADDR = udpcliSock.recvfrom(BUFSIZ)
            if not msg:
                break
            print(msg.decode('utf-8'))
        except:
            print('发送失败')
            break
            
    print('Current socket timeout:%s'%udpcliSock.gettimeout())
    
    udpcliSock.close()


main()

TCP与UDP服务器代码请见文章《Python 网络编程》https://blog.csdn.net/dannier5/article/details/121920645

2-5

网络互连和套接字。实现 Python 库参考文档中关于 socket 模块中的 TCP 客户端/服务器程序示例,并使其能够正常工作。首先运行服务器,然后启动客户端。也可以在 http://docs.python.org/library/socket#example 网址中找到在线源码。如果你觉得示例中服务器的功能太单调,那么可以更新服务器代码,以使它具有更多功能,令其能够识别以下命令。

'''
@文件        :homework_2_5_morefunc.py
@说明        :网络互接和套接字。更新服务器代码,使其具有更多功能,令其能够识别以下命令。
            data 服务器返回其当前日期/时间戳
            ls 列出当前目录文件清单
            ls dir 返回dir目录中的文件清单
@时间        :2021/12/14 11:12:49
@作者        :Dannie
@版本        :
'''

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

def data_ctime(data):
    msg = ('[%s] %s' % (ctime(), data.decode('utf-8'))).encode('utf-8')
    return msg

'''返回当前目录文件清单'''
def get_current_ls():
    current_dir = r'./'
    msg = ''
    file_list = os.listdir(current_dir)
    for file in file_list:
        msg = msg + '\n' + file
    return msg

def get_lsdir(file_dir):
    file_list = []
    msg = ''
    try:
        file_list = os.listdir(file_dir)
    except:
        file_list.append('文件路径错误...')      
    for file in file_list:
        msg = msg + '\n' + file
    return msg


def main():
    HOST = ''
    PORT = 9999
    ADDR = (HOST, PORT)
    BUFSIZ = 1024

    tcpserSock = socket(AF_INET, SOCK_STREAM)
    tcpserSock.bind(ADDR)
    tcpserSock.listen(5)

    while True:
        print('Waiting for connect...')
        tcpcliSock, addr = tcpserSock.accept()
        print('...connected from:',addr)

        while True:
            try:
                data = tcpcliSock.recv(BUFSIZ)
                if not data:
                    break
                data = data.decode('utf-8')

                data_re_ls = re.match(r'ls', data)
                data_re_lsdir = re.match(r'ls dir .\\(.+)\\', data)

                if data_re_ls or data_re_lsdir:
                    if data_re_ls:
                        msg = get_current_ls().encode('utf-8')
                        
                    if data_re_lsdir:
                        file_dir = re.search(r'(.\\.+)', data).group()
                        msg = get_lsdir(file_dir).encode('utf-8')                      
                else:
                    msg = ('[%s] %s' % (ctime(), data)).encode('utf-8')

                tcpcliSock.send(msg)  
            except:
                break

        tcpcliSock.close()


main()

客户端代码请见文章《Python 网络编程》https://blog.csdn.net/dannier5/article/details/121920645

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:40:09  更:2021-12-15 18:41:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:00:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码