20172304 2019-2020-2 《Python程序设计》实验3报告
课程:《Python程序设计》
班级:1723
姓名:段志轩
学号:20172304
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
2. 实验过程及结果
先引入socket 库,随后还需要sys等,由于这里使用的是base64加密,所以需要引入base64库进行加密。准备工作做完了,就开始建立连接了。建立连接时要找出没有被占有的端口,否则无法连接。同时还要找到可使用的IP地址连接完毕后就可以传输文件了。
客户端代码:
import socket
import sys
import base64
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 9001))
except socket.error as msg:
print(msg)
sys.exit(1)
print(s.recv(1024).decode())
# 需要传输的文件路径
filepath = 'C:/Users/24098/Desktop/new_file.txt'
fp = open(filepath, 'rb')
data = fp.read(1024)
encodestr = base64.b64encode(data) #加密--转换成base64编码
print(encodestr)
s.send(encodestr)
# 关闭当期的套接字对象
s.close()
服务器端代码:
import socket
import sys
import base64
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口为9001
s.bind(('127.0.0.1', 9001))
# 设置监听数
s.listen(10)
except socket.error as msg:
print(msg)
sys.exit(1)
print('Waiting connection...')
conn, addr = s.accept()
print('Accept new connection from {0}'.format(addr))
# 收到请求后的回复
conn.send('Hi, Welcome to the server!'.encode('utf-8'))
fp = open('./' + "new_file.txt", 'wb')
print('start receiving...')
# 将分批次传输的二进制流依次写入到文件
data = conn.recv(1024)
decodestr = base64.b64decode(data) #解密
print(decodestr)
fp.write(decodestr)
fp.close()
print('end receive...')
# 传输结束断开连接
conn.close()
运行结果:
3. 实验过程中遇到的问题和解决过程
之前做过类似实验,所以此次实验并没有出什么大的差错。
其他(感悟、思考等)
本次实验做的是使用python进行socket编程要想熟练运用python必须多实践,多编写代码,这样运用起来就轻松很多。当然,做实验前还需要把每个细节弄清楚,弄明白,实验后,还要复习,思考,这样印象深刻,记得才牢固。通过这次实验我学到了不少知识,更重要的事,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅。