• 20192221 实验三《Python程序设计》实验报告


    20192221 2019-2020-2 《Python程序设计》实验x报告

    课程:《Python程序设计》
    班级: 1922
    姓名: 叶蕊馨
    学号:20192221
    实验教师:王志强老师
    实验日期:2020年5月16日
    必修/选修: 公选课

    1.实验内容

    (一)实验内容

    创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

    (二)实验要求

    (1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

    (2)要求包含文件的基本操作,例如打开和读写操作。

    (3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

    (4)程序代码托管到码云。

    2. 实验过程及结果

    本实验可以分为三部分,一是对socket网络编程的使用(其中又分为服务端和客户端),二是加密解密的操作,三是对文件的操作。

    1.client部分
    • 1.将client和sever连接
    • 2.将传输的文字写入文件并读取
    • 3.加密并合成字符串
    • 4.传输
      s.sendall(unknown.encode())
      print("已发送加密后的内容")
      print(unknown)
      s.close()
    2.sever部分
    • 1.连接并监听接收
    • 2.写好一个解密函数
    • 3.将传过来的内容进行解密并写入文件
    3.完整代码
    import os
    import socket
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('127.0.0.1',8001))
    os.makedirs("C:\Users\10522\Desktop\1922")
    file = open("C:\Users\10522\Desktop\1922\20192221client-send.txt", 'w')
    file.write("钻石路虽然扎脚,但熠熠生辉啊
    ")
    file.write("只有手写的信才能被泪水打湿")
    file.close()
    file = open("C:\Users\10522\Desktop\1922\20192221client-send.txt", 'r')
    content = file.readlines()
    str = ''
    for item in content:
        str += item
    print("读取到的内容:
    ",str)
    file.close()
    unknown = ''                        # 加密
    for i in range(len(str)):
        if ord(str[i]) < 125 and str[i] != '
    ':
            temp = chr(ord(str[i]) + 1)
            unknown += temp+' '
        else:
            unknown += str[i]+' '
    s.sendall(unknown.encode())
    print("已发送加密后的内容")
    print(unknown)
    s.close()
    
    import socket
    import os
    def decode(unknown):
        """
        :param unknown: 未知字符,用来拿去解密
        :return: known,已经完成解密的字符
        """
        known = ''
        for i in range(len(unknown)-1):
            if unknown[i] == '
    ':
                known += '
    '
            elif ord(unknown[i]) <= 125:
                known += chr(ord(unknown[i])-1)
        return known
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind(('127.0.0.1',8001))
    s.listen()
    conn, address = s.accept()
    unknown = conn.recv(1024)
    file = open("C:\Users\10522\Desktop\1922\20192221sever.txt","w")
    unknown = unknown.decode()
    print("正在解码中.....")
    unknown = unknown.split(' ')
    known = decode(unknown)
    file.write(known)
    file.close()
    print("已将收到的内容写到"C:\Users\10522\Desktop\1922\20192221sever.txt"中,请注意查收!")
    
    s.close()
    
    4.运行结果

    5.码云链接

    码云

    3. 实验过程中遇到的问题和解决过程

    • 问题1:对顺序的不熟悉,不清楚是先把要传的写入文件还是先加密
    • 问题1解决方案:
    •  总体来说还是对文件操作的不熟悉,百度了一下后发现可以写入文件再读出文件,和加密并没有什么冲突
      
    • 问题2:对加密算法运用
      -问题2的解决方案
    • 百度了一些比较简单的加密算法(但对有的算法还是不太理解原理),于是用了超级简单的一种(没学过也能看懂的)

    其他(感悟、思考等)

    1.不要常问老师或者同学,要学会自己解决问题,自己再搜索网页上寻找想要的答案,会比问老师同学来得更有成就感
    2.对于网络编程的不熟悉在这次实验中体现的淋漓尽致,今后要多加练习学习新的部分(感觉网络编程在python更上一步的路上还是很重要的)
    3.不过两周左右没写博客,连markdown的基本用法都要忘了,熟能生巧,多多练习吧

    参考资料

    百度加密算法

  • 相关阅读:
    linux_批量关闭进程
    latex_引用参考文献格式,引用多篇参考文献
    vue跨域解决方法
    vue点击返回顶部插件vue-totop
    百度分享vue版-vshare
    vue项目引入社交分享插件
    vshare
    vue分享插件
    EFCore使用SQL语句
    JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法
  • 原文地址:https://www.cnblogs.com/yeruixin-python/p/12900391.html
Copyright © 2020-2023  润新知