前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码

Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码

作者头像
Python小屋屋主
发布2018-04-16 15:44:15
1.2K0
发布2018-04-16 15:44:15
举报
文章被收录于专栏:Python小屋Python小屋

本文代码来自于我自己使用开发的一套课堂管理系统,界面是用tkinter编写的,教师端界面如图所示:

为了防止学生关闭客户端而接收不到屏幕广播,大概3个月前为客户端代码增加了不允许关闭的辅助功能:

def closeWindow():

tkinter.messagebox.showerror(title='警告',\

message='不许关闭,好好学习!')

return

root.protocol('WM_DELETE_WINDOW', closeWindow)

这样的话,学生关闭客户端时,就会弹出提示“不许关闭,好好学习!”,而无法关闭程序,如图所示:

但是这样一来,下课后学生端程序仍然无法关闭,这会在一定程度上影响后面上课的同学使用计算机。于是刚刚又进一步修改了教师端和学生端的代码,当下课后教师端关闭时,使用UDP协议向局域网内所有机器发送消息,学生端收到消息后自动关闭。

教师端相关代码为:

def closeWindow():

# 教师端关闭时,广播消息通知学生端自动关闭

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

IP = serverIP[:serverIP.rindex('.')]+'.255'

sock.sendto(b'close', (IP, 10000))

root.destroy()

root.protocol('WM_DELETE_WINDOW', closeWindow)

学生端相关代码为:

def udpListen():

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 监听本机10000端口

sock.bind(('',10000))

while True:

data, addr = sock.recvfrom(100)

# 收到服务器发来的广播指令

if data == b'close':

# 教师端关闭时,学生端自动关闭

root.destroy()

sock.close()

threading.Thread(target=udpListen).start()

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档