您的位置:首页 > 编程语言 > Python开发

基于Python的电子教室软件中远程关机功能的原理与实现

2017-07-15 09:24 691 查看
为更好地保证教学质量和提高学生的学习积极性,我使用Python开发了一套课堂教学管理系统,具有在线点名、在线答疑、随机提问、在线作业管理、在线自测、在线考试、数据汇总、试卷生成、屏幕广播等功能,前几天又增加了远程关机功能。教师端运行界面如下图所示:



学生端运行界面如下图所示:



该系统投入使用已有4个学期,效果非常好,不仅可以满足上课的各种需要,还可以作为“Python程序设计”课程的一个完整教学案例讲给学生,适用教材包括《Python程序设计基础》(董付国编著,清华大学出版社)、《Python程序设计(第2版)》(董付国编著,清华大学出版社)、《Python可以这样学》(董付国著,清华大学出版社)。本文重点介绍局域网内远程关机功能的技术要点,系统界面使用tkinter编写,教师端使用UDP协议向局域网内所有主机广播关机指令,同时所有学生端监听UDP端口,收到关机指令后关闭本地计算机。文中略去了有关标准库和扩展库的导入代码。

1、学生端启动之后,创建Socket并监听特定端口,如果收到屏幕广播指令就启动接收广播屏幕的线程,如果收到关机指令就关闭本地计算机。代码目前只考虑了Windows平台,其他系统可以在此基础上自行扩展。

# 使用UDP监听,等待服务器的广播指令

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'startBroadCast':

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

        elif data == b'shutdown':

            import platform

            if platform.platform().startswith('Windows'):

                command = r'shutdown /s /f'

                os.system(command)

    sock.close()

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

2、教师在下课后单击教师端软件界面上的“关闭所有学生机器”按钮,向局域网内所有计算机发送关机指令。

def onbuttonShutdownClick():

    result = tkinter.messagebox.askyesno('远程关机',\

                                         '确定要关闭所有学生机器吗?')

    if result == tkinter.YES:

        # 通知客户端关机

        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'shutdown', (IP, 10000))

buttonShutdown = tkinter.Button(root,\

                                text='关闭所有学生机器',\

                                command=onbuttonShutdownClick)

buttonShutdown.place(x=240, y=340, width=100, height=30)

单击教师端界面上的“关闭所有学生机器”之后,会弹出确认按钮,单击“是”之后,会关闭局域网内所有计算机。



--------------我是分割线-------------

有关阅读:

Python使用UDP广播实现服务器自动发现

Python使用UDP协议打造在线时间服务器

Python使用TCP协议编写会聊天的小机器人

Python实现局域网内屏幕广播的技术要点分析

--------------我是分割线-------------

“Python小屋”公众号近期主要活动:

1、Python师资培训班:8月6日-12日,济南,面向全国高校老师和企业朋友,通知详见关于举办2017年暑期全国高校教师
“Python编程及应用”培训班通知,赠送Python教材2本、Python教学PPT超过1600页,Python教学视频140集,Python教学案例300个,以及教学大纲、教案、考试题库等全套资源。补充说明:如果不需要安排住宿的话,5天学费2100元(含午餐)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息