20243113应超群 2025-4-16《Python程序设计》实验三报告

20243113 2025-4-16 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2431
姓名: 应超群
学号:20243113
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课

一. 实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

二. 实验过程及结果

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

用于本机连接演示的代码如下

点击查看 服务端 代码
import socket


server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#s_address = ("192.168.8.1",3113) #应超群的IP
s_address = ('localhost', 3113)
server_socket.bind(s_address)

server_socket.listen(1)
print(f"监听{s_address}")

client_socket, address = server_socket.accept()
print(f"接收到{address}的连接")

while True:
    data_client = client_socket.recv(1024).decode("utf-8")
    print("客户端:", data_client)

    data_server = input("服务端:").encode("utf-8")
    client_socket.send(data_server)

    if data_server.decode("utf-8") == "exit":
        break


client_socket.close()
server_socket.close()

点击查看 客户端 代码
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#client_socket.connect(('192.168.8.84', 3109)) #董洪瑞的ip
client_socket.connect(('localhost', 3113))

while True:
    data_client = input("客户端:").encode("utf-8")
    client_socket.send(data_client)

    if data_client.decode("utf-8") == "exit":
        break

    data_server = client_socket.recv(1024).decode("utf-8")
    print("服务端:", data_server)


client_socket.close()
结果如下


2. 要求发送方加密后并传输;接收方收到密文并解密。

下面是附带加密后的代码

点击查看 服务端 代码
import socket

KEY = 0xAA

def jiami(data,key):
    return bytes([b^key for b in data])


server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s_address = ("192.168.8.1",3113) #应超群的IP
#s_address = ('localhost', 3113)
server_socket.bind(s_address)

server_socket.listen(1)
print(f"监听{s_address}")

client_socket, address = server_socket.accept()
print(f"接收到{address}的连接")

while True:
    jiamidata_client = client_socket.recv(1024)
    data_client = jiami(jiamidata_client,KEY).decode("utf-8")
    print("客户端:", data_client)

    data_server = input("服务端:").encode("utf-8")
    jiamidata_server = jiami(data_server,KEY)
    client_socket.send(jiamidata_server)

    if data_server.decode("utf-8") == "exit":
        break


client_socket.close()
server_socket.close()

点击查看 客户端 代码
import socket

KEY = 0xAA

def jiami(data,key):
    return bytes([b^key for b in data])


client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('192.168.8.84', 3109)) #董洪瑞的ip
#client_socket.connect(('localhost', 3113))

while True:
    data_client = input("客户端:").encode("utf-8")
    jiamidata_client = jiami(data_client,KEY)
    client_socket.send(jiamidata_client)

    if data_client.decode("utf-8") == "exit":
        break

    jiamidata_server = client_socket.recv(1024)
    data_server = jiami(jiamidata_server,KEY).decode("utf-8")
    print("服务端:", data_server)


client_socket.close()

作为服务端与同学建立连接结果

作为客户端与同学建立连接结果

3. 程序代码托管到码云。

服务端gitee

客户端gitee

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

  • 问题1:加密操作不清楚
  • 问题1解决方案:通过询问deepseek,选择使用异或操作加密,[b ^ key for b in data],对 data 中的每一个字节 b 执行异或运算 b ^ key,加密后重复异或操作即可解密(要知道key)
  • 问题2:开始的时候和同学联机一直连不上
  • 问题2解决方案:发现ip地址搞错了,重新获取IP地址,解决了连接问题

其他(感悟、思考等)

通过socket,可以实现局域网通信,对话。这就说明,可以结合pygame实现局域网联机游戏。同时,通过加密操作,我更加深入的认识密码,明白保密的重要性

参考资料

posted @ 2025-04-17 17:51  fish3113  阅读(41)  评论(0)    收藏  举报