V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sennes
V2EX  ›  问与答

Python 局域网 投票系统

  •  
  •   sennes · 2014-05-30 16:19:23 +08:00 · 4230 次点击
    这是一个创建于 3624 天前的主题,其中的信息可能已经有所发展或是发生改变。
    初学python两个月.期末有个作业是需要做一个基于局域网的投票系统.
    大概就是就是选出“最多人喜欢的XX”就可以
    本人想用python来实现 而且最好是{投票服务器和投票端都在终端下完成}
    投票端的人在键盘敲入1.2.3.之类的序号即可~
    但是现在没有方向,感觉学过的东西不足以完成这个任务。
    想问一下:
    1.完成这个投票系统 python 可行不?
    2.需要具备哪方面的知识?(特别是局域网通信这一方面)
    3.如果有人刚好有相关的资料希望能有share一下

    希望帮我指个方向我自己折腾就好.不是伸手党~

    再问个问题:
    python能不能实现局域网内的文件交换?因为这个投票系统的作业不需要很高的安全性,所以打算把本地待投票的list、投票结果之类的都写进文件,然后通过文件通信来实现数据通信会不会简单?
    14 条回复    2014-06-08 01:17:17 +08:00
    sennes
        1
    sennes  
    OP
       2014-05-30 18:26:52 +08:00
    不需要具体的代码,我只是想要知道一个折腾的方向即可。
    给几个关键词我自己去查资料也可以
    ritksm
        2
    ritksm  
       2014-05-30 18:28:48 +08:00   ❤️ 1
    socket
    server/client
    bingwenshi
        3
    bingwenshi  
       2014-05-30 18:31:51 +08:00   ❤️ 1
    不如直接做个web版 ?
    majunbo
        4
    majunbo  
       2014-05-30 18:34:29 +08:00 via iPhone   ❤️ 1
    对,为什么不搞成Web?
    sennes
        5
    sennes  
    OP
       2014-05-30 18:43:42 +08:00 via Android
    @bingwenshi
    @majunbo
    因为是linux课的期末作业要求尽量用脚本来实现。
    没有指定要用shell脚本所以我想用python来写。(而且shell脚本我不会
    学校机子都有python所以想用python脚本的形式做。
    实在不行我再用web的方式(这就简单很多了
    :)
    fdgogogo
        6
    fdgogogo  
       2014-05-30 20:16:30 +08:00   ❤️ 1
    其实终端下你也一样用web嘛, 传文件太heavy了, server写成api返回个json什么的就好了, 可以参考一下RESTful API。
    这应用局域网还是互联网没什么差
    JoyNeop
        7
    JoyNeop  
       2014-05-30 20:43:36 +08:00 via iPad   ❤️ 1
    Django + MongoDB 就可以了吧。。。
    Sylv
        8
    Sylv  
       2014-05-30 20:57:05 +08:00   ❤️ 1
    RPC
    binux
        9
    binux  
       2014-05-30 21:13:17 +08:00   ❤️ 1
    ./server.sh
    #/bin/bash
    QUIT=""; while [[ $QUIT != "finish" ]];do QUIT=`nc -l 9999` && echo $QUIT; done | tee vote.log | awk '{ a[$1]++ } END { for(k in a) print k, a[k]; }' | sort -k2nr

    ./vote.sh
    #/bin/bash
    echo $1 | nc localhost 9999

    ./finish.sh
    #/bin/bash
    echo "finish" | nc localhost 9999
    binux
        10
    binux  
       2014-05-30 21:19:13 +08:00   ❤️ 1
    更正下服务器代码,把 finish 统计进去了

    while true; do QUIT=`nc -l 9999`; [[ $QUIT == "finish" ]] && break || echo $QUIT; done | tee vote.log | awk '{ a[$1]++ } END { for(k in a) print k, a[k]; }' | sort -k2nr
    sneezry
        11
    sneezry  
       2014-05-30 21:26:18 +08:00   ❤️ 1
    用udp的多播试试?
    alexapollo
        12
    alexapollo  
       2014-05-30 21:31:15 +08:00   ❤️ 1
    C/S B/S都可行
    sennes
        13
    sennes  
    OP
       2014-06-01 12:42:30 +08:00
    感谢大家 基本的投票功能已经完成了。接下来在慢慢完善功能,添加一点点安全性和防止刷票的机制.
    用的是 Python Twisted 框架 . 学习了两天总算是找到了方向~
    sennes
        14
    sennes  
    OP
       2014-06-08 01:17:17 +08:00
    https://github.com/senzi/python_vote_server
    只能做到这种程度了 周一就要演示验收了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   838 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:40 · PVG 06:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.