下载链接
https://share.weiyun.com/9fXAqU2x
介绍
星鱼岛UDP投票系统,一个开箱即用的课堂教具。
面向中小学信息科技、人工智能课堂的实时投票与网络实验教学工具。教师端是一个双击即用的 Windows 程序,负责发题、控制投票节奏、实时计票和展示结果;学生端使用源师兄开发板,学生自己编写图形化或者python程序,通过 Wi-Fi 以 UDP 报文把投票结果发到教师电脑。
教师端零部署,学生端全开放。老师只管出题和看结果,通信细节全部留给学生在板子上自己实现。
为什么要使用?
- 普通投票工具把通信藏起来了。 问卷、小程序点一下就出结果,学生看不到 IP、端口、报文、协议,学不到网络知识。
- 部署往往是老师最大的门槛。 装环境、配依赖、查 IP、开端口,一节课还没开始就卡在准备阶段。
- 源师兄开发板有联网能力,缺一个「看得见结果」的接收端。 板子带 Wi-Fi 6、星闪、OLED、按键,很适合做通信实验,但课堂上需要一个能即时反馈的服务端。
功能一览
1.UDP 信息展示
协议类型、服务端监听地址、学生目标端口、网页端口、本机各网卡 IP、实时收包监视
2.多投票管理
可创建多个投票,标题自定义,选项 2~6 个动态增删;多个投票可同时进行
3.实时计票
每个选项显示票数、进度条、百分比,票数变化实时推送到所有已打开网页
4.流程控制
每个投票独立「开始投票 / 结束投票」;开始后才计票,结束后自动锁定
5.规则约束
一个设备只能投一次;未开始、已结束、重复、无效选项的报文一律废弃并记录原因
6.结果呈现
结束后高亮最终结果(含并列),显示完整投票清单,清单可一键隐藏 / 显示
7.过程留痕
清单含投票人、投票选项、投票时间、来源 IP:端口;废弃记录可折叠查看
8.投影视图
每张投票卡可全屏展示,大字号选项 / 票数 / 百分比
9.数据持久化
投票、票数、清单、监听设置写入 JSON,刷新页面与重启程序均不丢失
核心特点
1. 单文件 exe,老师双击就能上课
整个服务端、Node 运行时和三个网页文件被编译进一个 exe(约 83 MB)。老师拿到的就是一个文件,双击后自动起服务、自动打开默认浏览器,控制台窗口显示老师电脑 IP、网页端口和 UDP 端口;下课关掉窗口即停止。不用装 Node、不用带 public/ 文件夹、不用配环境变量,放桌面或 U 盘里都能跑。
重复双击也不会出错:程序检测到服务已在运行,会直接打开网页然后退出,不会重复占端口或覆盖数据。数据写在 exe 同目录,若目录只读会自动回退到用户目录。
2. UDP 信息全部可见,本身就是教学内容
页面顶部把通信参数摊开:UDP / IPv4 协议、监听地址、学生要填的目标端口、网页端口(并特别标注「不要填进板子」)、本机所有网卡 IP(点击即复制)。
另有实时收包监视,逐条显示每条报文的源 IP:端口、原始内容和处理结果(计票成功 / 未开始 / 重复投票 / 无效选项 / 已结束)。学生程序没发出来、发错 IP、格式写错,投屏上一眼就能定位——这比讲十遍「UDP 无连接、不保证送达」都直观。
3. 学生自主编程,投票人和选项由学生自己定
投票人姓名、投哪一项,不是网页里填的,而是学生写进源师兄程序里的。服务端只负责如实接收、校验、记录收到报文的时间。这让「一票」变成一次真实的程序输出:学生要自己连 Wi-Fi、创建 socket、组报文、发给老师的 IP 和端口,还要用 uuid() 给自己的板子一个身份。
网页内置了基于官方 2.0.1 API(wifi.connect()、socket、uuid())的示例程序,会自动替换成当前老师电脑的 IP 和端口,学生只改 POLL / VOTER / OPTION 三行就能跑通;想完全重写也行,协议是开放的。
4. 规则严谨,公平且可追溯
每个投票都是一台独立的状态机:草稿 → 进行中 → 已结束。只有「进行中」的报文计入票数,其余全部废弃并留痕。
一板一票按报文里的 device 去重(建议用板子的 uuid()),没填就按源 IP 兜底;同一设备重复投票直接废弃,绝不覆盖原票,且每个投票独立去重。投票结束后,清单按投票人 / 选项 / 时间 / 来源完整列出,可点击隐藏,需要复盘时再展开;并列最高票也会被明确标出。
5. 为教室大屏设计
每张投票卡都有「⛶ 全屏展示」:标题、状态、有效票数,以及每个选项的大字号名称、票数、百分比和加粗进度条;结束后顶部直接给出最终结果并高亮最高票。全屏内也能开始 / 结束投票、展开大字号清单,票数持续实时刷新,按 ESC 或右上按钮退出。
另开一个窗口访问 http://localhost:3000/?fullscreen=P1 可得到不带管理界面的纯投影页,适合一边用教师页操作、一边把结果投到大屏。
6. 断网可用,数据稳妥
服务端只用 Node 内置模块,零第三方依赖;网页通过 SSE 接收实时推送,不依赖任何外部 CDN 或云服务。教室断网、没有外网,只要电脑和板子在同一个局域网就能正常使用。所有投票数据落在本机 JSON 文件,误刷新、误关窗口都不会丢。
截图

