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

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

课程:《Python程序设计》
班级: 1842
姓名: 李思远
学号:20183202
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课

1.实验内容

(一)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(二)实验要求
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。

2. 实验过程及结果

1.服务端的建立:

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',62470))
with open(r"C:\Users\86152\Desktop\20183202\20183202.txt",'rb') as f:
    for i in f:
    s.send(i)
    data=s.recv(1024)
    if data!= b'success':
        break
s.send('quit'.encode())
file=s.recv(1024) 
with open('file', 'r',encoding='UTF-8') as f:
    print(f.readline())
    f.close()

2.客户端的建立:

import socket
import struct 
FILEINFO_SIZE=struct.calcsize('128s32sI8s')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',62470))
s.listen(5)
conn,address=s.accept()
print("文件接收开始")
with open('file', 'ab' ) as f:
    data = conn.recv(1024)
    if data == b'quit':
        breakpoint()
    f.write(data)
    conn.send('success'.encode())
print("文件接收完成")
with open('file', 'r',encoding='UTF-8') as f: 
    print(f.readline())
    f.close()
with open("file",'rb') as f:
    for i in f: 
        conn.send(i)
        data=conn.recv(1024) 
        if data!= b'success':
            break 
conn.send('quit'.encode())
s.close()

3.实验运行结果:

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

  • 问题1:在运行代码时频繁报错,从网上寻找解决方式无果。
  • 问题1解决方案:经同学帮助后发现,在运行代码时要先运行服务端,再运行客户端。
  • 问题2:对于socket代码掌握不熟,不能熟练运用。
  • 问题2解决方案:首先回顾了云班课中老师提供的资料,对socket代码又重新进行了理解;之后在编写代码时通过查阅代码表的方式,减轻了工作量。

其他(感悟、思考等)

对于socket代码,在编写过程中感到很吃力,于是上网进行了资料查找,查到如下相关资料:
“网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。”

参考资料

posted @ 2020-05-18 15:45  Alanne  阅读(189)  评论(0编辑  收藏