linux网络编程实现投票功能
投票系统
1.说明:
写了一个投票系统。过程是先配置好server。在写一个网上投票功能,要实现网上投票功能。
事实上功能实现还是非常easy的,麻烦一点的在于过程比較繁杂,要做的东西还是挺多的!
2.过程:
第一步:配置httpdserver
先配置好httpdserver。
我先下载好了和httpserver的包后,因为fedora的httpd配置相对照较简单,所以我也仅仅是简单的做了一下改动,例如以下:
把:
<Directory"/var/www/cgi-bin">
AllowOverrideNone
OptionsNone
Requireall granted
</Directory>
改动为:
<Directory"/var/www/cgi-bin">
AllowOverrideNone
AddHandlercgi-script py sh cgi
OptionsExecCGI
Orderallow,deny
Allowfrom all
Requireall granted
</Directory>
然后在开启httpdserver就好了。
第二步:建立数据库
因为投票要涉及到数据库的改动与更新,所以要事先建立好一个数据库。我建立了一个名为poll的数据库,并为poll数据库建立了一个名为poll_name的表,里面加入了name与num两个字段,并插入了
“ alop“ ,0
与 “ daoyan“ 0两个值,用于投票,须要注意的是,建立数据库仅仅是为了投票后要进行数据更新在返回页面,所以,假设想简单一点的话。我认为用文件就足够了。不够这个样例是由于数据极为简单,但要是若有非常多复杂的操作的话,还是建立数据库比較方便!
第三步:写cgi程序
这是最关键的一步了。这一步要完毕的是当用户投票之后。通过通信技术返回给server之后,server该怎样处理的问题,毫无疑问,这次我们要做的就是当客服端选择某个人,如”alop“。并点击,server收到这个消息后,要对数据库的里”alop”的num值+1就可以,这里我是用python写的程序,例如以下:
#!/usr/bin/envpython
#coding=utf-8
importcgi, cgitb
importMySQLdb
db= MySQLdb.connect("localhost", "root", "","poll")
cursor= db.cursor()
sql_update= "UPDATE poll_name SET num = num + 1 WHERE name = '%s'"
sql_query= "SELECT num FROM poll_name"
results= ()
form= cgi.FieldStorage()
name= form.getvalue('name')
sql_update= sql_update % name
cursor.execute(sql_update)
db.commit()
cursor.execute(sql_query)
results= cursor.fetchall()
print"Content-type:text/html\r\n\r\n"
print"<html>"
print"<head>"
print"<title>Radio - Fourth CGI Program</title>"
print"</head>"
print"<body>"
print'<form action="/cgi-bin/election.py" method="post">'
print'<input type="radio" name="name" value="alop"/> alop %d </br>' % results[0][0]
print'<input type="radio" name="name"value="daoyan" /> daoyan %d </br>' %results[1][0]
print'<input type="submit" value="submit" />'
print"</form>"
print"</body>"
print"</html>"
整个程序还是非常easy的。
这样,就完毕了整个过程:
3.效果
效果例如以下:
当点击alop后,例如以下
这样,整个过程就完毕了。
linux网络编程实现投票功能的更多相关文章
- 【linux草鞋应用编程系列】_5_ Linux网络编程
		
一.网络通信简介 第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章. 二.linux网络通信 在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...
 - Linux网络编程&内核学习
		
c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...
 - linux网络编程_1
		
本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...
 - Linux网络编程入门 (转载)
		
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
 - Linux网络编程必看书籍推荐
		
首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...
 - [转] - Linux网络编程 --  网络知识介绍
		
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
 - Linux C 程序 Linux网络编程(21)
		
Linux网络编程网络编程必备的理论基础网络模型,地址,端口,TCP/IP协议 TCP/IP协议是目前世界上使用最广泛的网络通信协议日常中的大部分应用使用该系列协议(浏览网页,收发电子邮件,QQ聊天等 ...
 - 【转】Linux网络编程入门
		
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
 - 《转》Linux网络编程入门
		
原地址:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html (一)Linux网络编程--网络知识介绍 Linux网络编程-- ...
 
随机推荐
- vue中判断路由变化
			
使用from.path和to.path判断路由跳转 在methods里面写函数: 当然,上边函数里边可以做很多事情.
 - unity-unet-同步各个player唯一标识
			
Multiplayer Game 中所有 player 都有一个唯一标识.在unet中可以通过 Network Identity 组件获取到该 player 在整个网络整的 唯一 的连接 id 这里测 ...
 - Caused by: java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getServletContext()L
			
在做项目的时候,出现Caused by: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletCo ...
 - 一筐梨子&一筐水果——协变性(covariant)
			
假设突然看见这个问题.我们常常会想当然. 一个梨子是水果,一筐梨子是一筐水果吗? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXFqMjA2NQ==/f ...
 - Win7下IE11点击无反应的解决方法
			
平台:win7 sp1 32bit 问题:点击Internet Explorer在开始菜单.快捷栏的图标和安装目录下的程序均没有反应,鼠标在变成漏斗后恢复原状再无反应.但搜狗浏览器和360浏览器下使用 ...
 - 【Codeforces Round #447 (Div. 2) B】Ralph And His Magic Field
			
| [链接] 我是链接,点我呀:) [题意] 给你一个n*m矩阵,让你在里面填数字. 使得每一行的数字的乘积都为k; 且每一列的数字的乘积都为k; k只能为1或-1 [题解] 显然每个位置只能填1或- ...
 - mybatis中整合ehcache缓存框架的使用
			
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
 - Qt产生随机数(两种方法)
			
第一种方法 #include <QTime> QTime time; time= QTime::currentTime(); qsrand(time.msec()+time.second( ...
 - Redo current损坏
			
如果损坏的是current redo log (select group#,sequence#,archived,status from v$log;) 有两种情况: A. 数据库是正常关闭 ...
 - 装饰模式和python装饰器
			
装饰器和装饰模式 先给出两者的定义: - 装饰器:装饰器是一个非常著名的设计模式,常常被用于有切面需求的场景.较为经典的有插入日志.性能測试.事务处理等. 装饰器是解决这类问题的绝佳设计.有了装饰器, ...