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

20241110 2024-2025-2 《Python程序设计》实验三报告

课程:《Python程序设计》

班级:2411

姓名: 王方俊

学号:20241110

实验教师:王志强

实验日期:2025年4月16日

必修/选修: 公选课

一、实验内容

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

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

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

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

二、实验过程

(一)实验分析

根据上述实验要求,结合老师给的初代代码,我设计升级版代码满足以下功能:

1.首先完成客户端与服务端连接工作,读入后进行加密,对传输文件保护。

2.客户端将数据发送给服务器,服务器接受数据。

3.服务器将数据进行解密,保存客户端的文件。

(二)实验代码

服务端代码
import socket

    # 创建 socket 对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定地址和端口
    server_address = ('192.168.241.200', 9999)
    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))

        # 将客户端消息写入文件
        try:
            with open('client_messages.txt', 'a', encoding='utf-8') as file:
                file.write(data + '\n')
        except Exception as e:
            print(f'写入文件时出错: {e}')

        # 发送消息给客户端
        message = input('请输入要发送给客户端的消息: ')
        client_socket.send(message.encode('utf-8'))
        if input("是否要继续?Y/N") == "N":
            break

    # 关闭连接
    client_socket.close()
    server_socket.close()

客户端代码
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # 连接到服务器
        server_address = ('192.168.241.200', 9999)
        client_socket.connect(server_address)

        while True:
            choice = input('请选择操作:1. 发送消息;2. 发送文件内容;3. 退出:')
            if choice == '1':
                # 发送消息给服务器
                message = input('请输入要发送给服务器的消息: ')
                client_socket.send(message.encode('utf-8'))
            elif choice == '2':
                file_path = input('请输入要发送的文件路径: ')
                try:
                    with open(file_path, 'r', encoding='utf-8') as file:
                        file_content = file.read()
                        client_socket.send(file_content.encode('utf-8'))
                except FileNotFoundError:
                    print('文件未找到,请检查文件路径。')
            elif choice == '3':
                break
            else:
                print('无效的选择,请重新输入。')

            # 接收服务器消息
            data = client_socket.recv(1024).decode('utf-8')
            if not data:
                break
            print('服务器说: {}'.format(data))

        # 关闭连接
        client_socket.close()

(三)代码托管到码云

https://gitee.com/Wangf20241110/hipython/commit/ebd44838f782dac3bdcf30c9791cd254604a5c24

三、实验结果

作为服务端我的实验结果如截屏


运行服务端后服务器开始监听,运行客户端后建立与服务器的连接。服务端再读入input.txt文件并加密,最后发送给服务器。服务器收到后解密,并将文件保存。

四、实验中遇到的问题及解决办法

问题1:运行客户端时发现代码一直报错,显示积极拒绝、地址无效和超时等字样。

解决办法:寻求老师的帮助发现地址有误,应为客户端的ip地址,同时两边都要更改,并且需要在同一个wifi环境。

问题2:关于文件的传输让我困惑了很长时间,一直无法传输。

解决办法:在网上寻找相关资料,发现需在电脑上创建一个new file并不为空,否则无法输出内容。

五、实验感悟

通过本次通信工具开发实验,我对网络编程、文件操作及加密技术有了更深刻的理解与实践感悟。
在技术实现层面,亲手编写客户端与服务器代码,让我直观掌握了 Socket 编程的核心逻辑。从创建套接字、绑定地址端口到建立连接,每个步骤都需要细致处理,任何一处疏忽都可能导致通信失败。例如,服务器监听连接与客户端发起连接的参数必须匹配,否则无法正常通信,这让我意识到网络通信中参数一致性和细节把控的重要性。文件操作与加密功能的结合也带来诸多挑战。
从功能设计角度看,此次实验构建的通信系统虽然基础,但涵盖了数据传输、存储和安全防护的完整流程。这让我明白,一个可靠的通信工具不仅要实现信息交互,更要保障数据安全。然而,实验中采用的加密技术相对简单,存在明显安全漏洞,容易被暴力破解,这使我深刻认识到加密算法强度对数据保密性的关键影响,也激发了我对更复杂加密技术(如 AES、RSA)的学习兴趣。

六、参考资料

零基础学Python

python实现两台不同主机之间进行通信(客户端和服务端)——Socket

posted @ 2025-04-23 23:01  20241110王方俊  阅读(43)  评论(0)    收藏  举报