20232209实验三《Python程序设计》实验报告
20232209 2024-2025-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2322
姓名: 吴易阳
学号:20232209
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课
1.实验内容
【1】实验内容概述:
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
【2】实验内容分析:
(1)何为Socket:Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
(2)服务端如何运用Socket进行通讯: socket():创建套接字,bind():绑定端口,listen():阻塞并等待客户端发来建立连接的请求,send():进行接收数据和发送数据的操作,close():终止程序
(3)客户端如何运用Socket进行通讯:socket():创建套接字,connect():发出建立连接的请求,recv()和send():进行接收和发送数据,close():终止程序
【3】实验具体要求:
(1)创建服务端和客户端,选择一个通信端口,在两个主机上用Python语言编程实现通信演示程序;
(2)要求掌握文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
【1】实验原理:

【2】实验过程和结果展示
(1)查看自己的IP配置,打开命令行,输入ipconfig进行查看

可以得到自己的IP地址,可以看到是172.20.10.5,我搭档和我连的是一个热点,他的IP地址是172.20.10.6
(2)创建服务器进行不加密通讯
代码
import socket
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('172.20.10.5', 8888)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print('服务器正在监听 {}:{}'.format(*server_address))
# 接受客户端连接
client_socket, client_address = server_socket.accept()
print('接受来自 {} 的连接'.format(client_address))
while True:
# 接收客户端消息
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
print('客户端说: {}'.format(data))
# 发送消息给客户端
message = input('请输入要发送给客户端的消息: ')
client_socket.send(message.encode('utf-8'))
if input("是否要继续?Y/N")=="N":
break
# 关闭连接
client_socket.close()
server_socket.close()
其中创建了本地的服务器通过这两行代码绑定服务器的地址server_address = ('172.20.10.5', 8888) server_socket.bind(server_address)
server_socket.listen(1)开启监听, data = client_socket.recv(1024).decode('utf-8')获取客户端的交互信息并统一编码为utf-8
client_socket.send(message.encode('utf-8'))用于像客户端发送信息。
测试结果
与另一主机进行交流

(3)创建客户端进行不加密通讯
源码
import socket
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
server_address = ('172.20.10.6', 8888)
client_socket.connect(server_address)
while True:
# 发送消息给服务器
message = input('请输入要发送给服务器的消息: ')
client_socket.send(message.encode('utf-8'))
# 接收服务器消息
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
print('服务器说: {}'.format(data))
# if (input("是否继续Y/N?")=="N"):
# break
# 关闭连接
client_socket.close()
创建客户端,通过这两行代码连接到服务器server_address = ('172.20.10.6', 8888) client_socket.connect(server_address) 此处server_address的值为对方服务器的地址
client_socket.send(message.encode('utf-8'))通过该代码向服务器发送编码为utd-8格式的信息
data = client_socket.recv(1024).decode('utf-8')通过该代码接收服务器发送过来的信息
测试结果

(4)通过wireshark监听网络通讯情况

(5)发送方从文件读取内容,加密后并传输
服务器端源代码
import socket
import os
from DesModule import *
file1 = open("crypto.txt","r+")
file1.write("12345678")
file1.seek(0)
cryptostring = file1.readline()
print(cryptostring)
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.137.192",8000))
s.sendall(cryptostring.encode())
data= s.recv(1024)
print("received data:",data.decode())
s.close()
该段代码即按r+的方式打开文件file1并在其中写入12345678,cryptostring为按行读取file1中的内容,读取过来后进行加密,并将加密后的值送出
结果图

(6)接收方收到密文并解密,保存在文件中
import socket
tcpserver=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpserver.bind(('127.0.0.1', 9999))
tcpserver.listen(5)
while True:
conn, addr = tcpserver.accept()
print(conn)
while True:
try:
data = conn.recv(1024)
print(data.decode("utf-8"))
ret_data=input(">>>")
conn.send(ret_data.encode("utf-8"))
except Exception:
break
conn.close()
客户端进行不断监听,接收到数据则进行解密,并进行输出。
结果图

(7)源代码上传gitee

3. 实验过程中遇到的问题和解决过程
- 问题1:网络不统一导致无法实现连接
- 问题1解决方案:两台主机连接同一热点
- 问题2:不知道如何进行加密
- 问题2解决方案:通过上csdn上查找资料,发现可以用des来进行加密,于是利用了des算法来进行加密
其他(感悟、思考等)
本次学习并运用了socket技术,学习了网络通讯的相关方面知识,并熟悉了文件操作和加解密等相关方面知识。并且也了解了如何对数据进行加密操作,从而进行加密通讯。

浙公网安备 33010602011771号