20202127 2021-2022-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2021
姓名: 马艺洲
学号:20202127
实验教师:王志强
实验日期:2022年4月28日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
2. 实验要求
- 创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
- 要求包含文件的基本操作,例如打开和读写操作。
- 要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
- 程序代码托管到码云。
3. 实验过程及结果
(1)client部分
- 1.将client和sever连接
- 2.将传输的文字写入文件并读取
- 3.加密并传输
(2)server部分
Sever:
import socket
import os
import base64
def main():
# 1.创建一个tcp套接字socket
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定本地地址,端口号bind
tcp_socket.bind(("127.0.0.1", 7000))
# 3.监听个数 listen(128)
tcp_socket.listen(128)
print('****************服务器连接********************')
conn, addr = tcp_socket.accept()
conn.send('Hi!'.encode('utf-8'))
file = open('./' + "new_file.txt", 'wb')
data = conn.recv(1024)
jiema = base64.b64decode(data)
print(jiema)
file.write(jiema)
file.close()
print('接收任务完成!')
while True:
print("***************服务器开始*****************")
print("")
# 4.接受客户进来,accept 返回元祖,一个变量提供当前进来客户到的服务
# 第二个变量继续等待下一个客户
new_server, add = tcp_socket.accept()
while True:
# 5.接受客户信息
mess = new_server.recv(1024)
if mess:
print(mess.decode("utf-8"))
# 5.给客户返回信息
send_message = input("请输入你要回复的信息:")
new_server.send(send_message.encode("utf-8"))
else:
break
# 6.关闭当前服务的客户
new_server.close()
# 7.关闭套接字
tcp_socket.close()
if __name__ == "__main__":
main()
(3)程序代码托管到码云。
https://gitee.com/besti-cs/garfield.git
4. 实验过程中遇到的问题和解决过程
- 问题1:目标无法连接
- 问题1解决方案:整个实验第一件事先关闭防火墙!
- 问题2:目标计算机积极拒绝,依旧无法连接
- 问题2解决方案:先运行服务器,再运行客户端
其他(感悟、思考等)
在实现文件的传输过程中,共有两份客户端和服务器的代码无法运行,而且凭借自身的知识储备无法检查出其内在错误,只好作罢,但是今天突然有了一个念想,希望自己在省下的一个月里,在完成实验四的同时,将这次实验没有完成的遗憾填满,感激挫折,感谢阻挠,才拥有思考!