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

20193117 2019-2020-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级:1931
姓名:韦皓铭
学号:20193117
实验教师:王志强
实验日期:2020年5月20日
必修/选修: 公选课

1.实验内容

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

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

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

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

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

2. 实验过程及结果

客户端

import socket
import base64
import time
timeout = 20
socket.setdefaulttimeout(timeout)
sleep_download_time = 10
time.sleep(sleep_download_time)
path="C:\\Users\\whm\\Desktop\\python\\test\\56.txt"
file=open(path,'r')
str1=file.readlines()
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',6885))
with open(r"C:\Users\whm\Desktop\python\test\56.txt", 'r',encoding='UTF-8') as t:
    data=t.readline().encode()
    based_data1 = base64.b64encode(data)
    print(based_data1)

with open(r"C:\Users\whm\Desktop\python\test\56.txt", 'wb') as t:
    t.write(based_data1)

with open(r"C:\Users\whm\Desktop\python\test\56.txt", 'rb') as t:
    for i in t:
        s.send(i)
        data = s.recv(1024)
        break
s.send('quit'.encode())
print("解密:")
file = s.recv(1024)
with open('file', 'r', encoding='UTF-8') as t:
    print(t.readline())
    t.close()

服务端

import socket
import struct
import base64
FILEINFO_SIZE=struct.calcsize('128s32sI8s')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',6885))
s.listen(5)
conn,address=s.accept()
print("文件接收中")

with open('file', 'ab' ) as t:
    data = conn.recv(1024)
    if data == b'quit':
        breakpoint()
    t.write(data)
    conn.send('success'.encode())
print("加密后:")
with open('file', 'r',encoding='UTF-8') as t:
    based_data1= t.readline().encode('gbk')
    print(based_data1)
    plain_data1 = base64.b64decode(based_data1)

open("file", "w").close()
with open('file', 'wb') as t:
    t.write(plain_data1)
print("解密后:")
with open('file', 'r',encoding='UTF-8') as t:
    print(t.readline())
with open("file",'rb') as f:
    for i in t:
        conn.send(i)
        data=conn.recv(1024)
        break
s.close()

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

  • 问题一:遇到byte无法读取问题
  • 问题一解决方案:转化为str形式
  • 问题二:客户端被强迫拒绝访问
  • 问题二解决方案:关闭系统内所有防火墙

其他(感悟、思考等)

本次实验进行的客户端与服务端的本地传输实验,通过建立服务器的链接,搞清了代码编程的连接原理,并且了解了编码形式的转化问题,破解防火墙的阻拦,收益良多。

参考资料

posted @ 2020-05-23 22:55  20193117韦皓铭  阅读(380)  评论(0编辑  收藏  举报