20254222 2025-2026-2 《Python程序设计》实验3报告

20254222 2025-2026-2 《Python程序设计》实验三报告 课程:《Python程序设计》
班级: 2542
姓名: 贡嘎旦达
学号:20254222
实验教师:王志强
实验日期:2026年5月13日
必修/选修: 专选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
注意事项:

每人必须做一次客户端和一次服务端,且要和队友(标注学号姓名)互相通信。

要求1:

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

(2)要求发送方输入内容,并传输;接收方收到信息并显示。

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

(4)发送的信息,可以加密再传输,接收方收到后需要解密再显示(可选)。

要求2:使用LLM生成一个带图形界面的程序

(1)分析关键代码的功能和使用方法

(2)分析生成程序的优点

(3)给出运行过程和结果截图

(4)程序代码托管到码云。
2. 实验过程及结果
队友:20254122洛桑平措

要求1:
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序
编辑IP地址等信息
45bd6c798207b39cd2798bda782c398b
(2)我(20254222贡嘎旦达)作为服务端,搭档(20254122洛桑平措)作为客户端运行
20d474f8a3626a7d0ece8164d77d3185
3)搭档(20254122洛桑平措)为服务端,我(20254222贡嘎旦达)作为客户端运行
60a2e059d0be9aaf36d2243954760c76
要求2:
(1)使用LLM生成一个带图形界面的程序
·打开豆包,输入指令
·复制粘贴到PyCharm

AI生成:带GUI的TCP服务端(支持多客户端、显示IP地址)

import socket
import threading
import tkinter as tk
from tkinter import scrolledtext

class ServerGUI:
def init(self,root):
self.root = root
self.root.title("TCP服务端(多客户端连接)")
self.root.geometry("600x450")
# Socket初始化
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.client_list = [] # 保存所有客户端套接字

GUI界面布局

self.label_ip = tk.Label(root,text="本机IP:127.0.0.1 | 端口:8080",font=("黑体",11))
self.label_ip.pack(pady=5)

self.text_show = scrolledtext.ScrolledText(root,width=70,height=20)
self.text_show.pack(pady=10)

self.btn_start = tk.Button(root,text="启动服务端",command=self.start_server,bg="lightgreen")
self.btn_start.pack(pady=5)

启动服务端、监听端口

def start_server(self):
self.text_show.insert(tk.END,"服务端启动成功,正在监听8080端口...\n")
thread = threading.Thread(target=self.listen_client)
thread.daemon = True
thread.start()

循环监听客户端

def listen_client(self):
self.server_socket.bind(("127.0.0.1",8080))
self.server_socket.listen(10)
while True:
client_conn, client_addr = self.server_socket.accept()
self.client_list.append(client_conn)
# 打印客户端IP和端口(和手写代码功能一致)
self.text_show.insert(tk.END,f"成功连接客户端|客户端IP:{client_addr[0]} 端口:{client_addr[1]}\n")
t = threading.Thread(target=self.recv_data,args=(client_conn,client_addr))
t.daemon = True
t.start()

接收客户端消息

def recv_data(self,conn,addr):
while True:
try:
data = conn.recv(1024).decode("utf-8")
if not data:
break
self.text_show.insert(tk.END,f"收到[{addr[0]}]消息:{data}\n")
# 广播给所有客户端
for c in self.client_list:
c.sendall(data.encode("utf-8"))
except:
break
conn.close()
self.client_list.remove(conn)
self.text_show.insert(tk.END,f"客户端{addr[0]}已断开连接\n")

if name == "main":
win = tk.Tk()
app = ServerGUI(win)
win.mainloop()

AI生成:带GUI的TCP客户端(显示本机IP、连接服务端)

import socket
import threading
import tkinter as tk

class ClientGUI:
def init(self,root):
self.root = root
self.root.title("TCP客户端")
self.root.geometry("550x380")
self.client_socket = None

显示本机IP(保留手写代码核心功能)

self.local_ip = socket.gethostbyname(socket.gethostname())
self.label_ip = tk.Label(root,text=f"本机IP地址:{self.local_ip}",fg="blue",font=("黑体",11))
self.label_ip.pack(pady=5)

self.text_log = tk.Text(root,width=65,height=15)
self.text_log.pack(pady=10)

self.entry_msg = tk.Entry(root,width=50)
self.entry_msg.pack(pady=5)

self.btn_connect = tk.Button(root,text="连接服务端",command=self.connect_server,bg="lightblue")
self.btn_connect.pack(side=tk.LEFT,padx=20)

self.btn_send = tk.Button(root,text="发送消息",command=self.send_msg,bg="lightyellow")
self.btn_send.pack(side=tk.LEFT)

def connect_server(self):
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client_socket.connect(("127.0.0.1",8080))
self.text_log.insert(tk.END,"成功连接服务端(127.0.0.1:8080)\n")
t = threading.Thread(target=self.recv_thread)
t.daemon = True
t.start()

def recv_thread(self):
while True:
try:
data = self.client_socket.recv(1024).decode("utf-8")
self.text_log.insert(tk.END,f"收到消息:{data}\n")
except:
break

def send_msg(self):
msg = self.entry_msg.get()
if msg:
self.client_socket.sendall(msg.encode("utf-8"))
self.text_log.insert(tk.END,f"我发送:{msg}\n")
self.entry_msg.delete(0,tk.END)

if name == "main":
window = tk.Tk()
app = ClientGUI(window)
window.mainloop()
(2)给出运行过程和结果截图
fef7bbe24354456b4a60241744257846
(3)分析生成程序的优点
(1)服务端客户端一体化设计,调试便捷
(2)界面运行流畅不卡顿
(3)可以实现点对点通信,功能闭环
(4)结构清晰,易于维护

  1. 实验过程中遇到的问题和解决过程
    问题1:实验过程中发现运行不了,但是代码和IP等无错误
    解决方案:发现是没有关防火墙
    问题2:完成实验后电脑连不上网
    解决方案:将个人热点的IP地址改成原来的自动连接

其他(感悟、思考等)
这次实验我遇到了很多问题,比如不知道怎么设置IP地址,和搭档连不上,还有防火墙等,在老师和同学的帮助下成功解决了以上问题,并成功完成了这次的实验、掌握了服务端监听、客户端连接、数据收发的完整流程。同时也让我深刻反思了自己的学习问题,是不是上课存在开小差、玩手机的行为才到导致这些问题,我应该认真反省自我。除此外目前我自身仍存在对Python程序中基本模块运用与编写规则语法不熟悉的问题,遇到的阻力较大,还需要进一步熟悉模块使用和基本语法、进一步的主动学习。

posted @ 2026-05-19 18:57  贡嘎旦达  阅读(12)  评论(0)    收藏  举报