日期:2014-05-19  浏览次数:20948 次

求用户数量控制的思路
CS模式中用户数量控制方法,即客户购买了10个用户连接的使用权,怎么在系统启动时判断当前使用者是否超过10个,或是购买了10台电脑安装,在安装时统计数量并作出限制,类似sql   server的授权使用.
请问有什么好的方法,或哪里有相关资料参考?
Thanks!  


------解决方案--------------------
判断IP或者硬件信息就Ok了阿,不复杂阿
------解决方案--------------------

1、如果是同时只能有10个用户访问,那么就在服务器端设置一个用户队列,以及TimeOut,如果队列中用户达到10个就不能再连接了。
2、如果是限制只能由注册的用户(计算机)使用,那么就提取Mac地址或硬盘序列号等,形成标识,将标识在服务器上登记,客户端访问时提供标识
3、前面两者结合

------解决方案--------------------
怎么在系统启动时判断当前使用者是否超过10个,
-------------------------------
系统启动就向服务器插入1条数据,当数据到达10的时候,就不让启动


或是购买了10台电脑安装,在安装时统计数量并作出限制,
------------------------------
这个有点麻烦,如果人家把网线拔了,哪你去哪里统计啊,这个看能不能在安装程序里面做手脚,把安装次数记录到安装程序本身中。
------解决方案--------------------
开一线程,客户端定时去访问服务器,服务器端做记录,超过十个就返回一条消息,让客户端自已挂了.
记录可以存用户名,也可以存IP
------解决方案--------------------
可以这样实现:

在中间层 建一个 静态在线用户列表, 用户每次登录 先看已有在线人数,满了拒绝;可以则将自已加上去.
------解决方案--------------------
C/S都是有状态连接...有什么复杂的...很多方法都可以实现...

用户证书是个不错的主意...
------解决方案--------------------
10个用户连接
=================
每一个连接就相当于一个Socket,要控制用户连接,就是控制同时在线的Socket数量。使用Socket.Select方法来实现Socket的管理。

用户请求认证 ---> 创建一个Socket ---> 认证
(用户组/用户名/密码)

OnAuthentication ---> 取得基于用户组的所有Socket -> Socket.Select ---> 关闭错误和超时的Socket ---> 计算剩下的Socket ---> <10, 加入这个Socket,开始认证用户名和密码 ---> > =10, 拒绝申请,关闭Socket