Remoting怎么知道哪些客户端连到了服务器?怎么踢客户端?好像 Remoting中没有事件,所以在服务器端不知道怎么获取并控制客户端。
解决方案 »
- 又一正则表达
- C#中怎样使用windos默认浏览器(firefox),显示特殊的帮助文件(地址里有特殊符号)
- 求解!!
- C# 通过webbrowser 如何让网页和程序进行交互?
- 求 <<Visual C#.NET网络核心编程>>电子书
- 基于很多正在学习C#的朋友不能及时相互沟通,建立一个目标是200人的Q群
- 我是新手,请教各位:在switch()中的case嵌入使用多个if,else是否可行?
- 求职,帮忙up者有分.
- 请问在CheckedListBox中怎么获取用户当前改变Checked状态的那条项目?
- datagrid绑定datareader,到底怎么翻页
- 能否用一个通用的方法很方便地将一个文本文件读入一个数组或List<>对象中。例如,
- dataGridView1 连续删除数据会出错?
定义心跳包包括客户端的ID,
然后通过在服务器端接收到客户端的心跳包中来统计在线客户。、
具体实现:SOCKET编程+多线程。
不能获取客户端IP吗?
private string GetIpAddress()
{
IPHostEntry ipHE = Dns.GetHostByName(Dns.GetHostName());
return ipHE.AddressList[0].ToString();
}
当然在验证用户合法性的时候,sql的连接已经通了。以前 C/S 结构是在 数据库中判断有多少人在线,Delphi可以在 RemoteDataModel中加计数值或更详细的信息(如IP地址、NT用户名、登录时间、系统账号),有了这些信息,足以踢人。
干脆每次调用远程方法的时候 都把 用户信息(用户名、密码、IP、进程ID、...、调用时间) 之类的东东都添加到 sqlserver的一个固定表中,如果表里边有该 用户名+进程ID 就仅修改其调用时间。
当用户退出系统时,再删掉sqlserver中那笔记录。
当客户端意外退出系统,到时需要手工删掉那笔异常的记录。也就是说按照C/S结构的方法,把信息存到sqlserver中,不放到 中间层。
这样就可以限制用户的个数了。
我没有仔细看你的逻辑。在你的服务器端,既然要读取数据库,那么就可以放在内存中。比如说你的内存中可以有一个简单的 Dictionary<long, YourUserType> 类型的字典,其key是你分配给每一个客户端登录时的一个会话编号,那么客户端访问服务器的时候拿它自己的会话编号来访问就行了,无需重复验证帐号密码。而踢掉它,也不过就是在这个字典中Remove相应的编号即可。
我的 Remoting也很简单,就是 传字符串参数、传序列化的DataTable对象,就是走tcp或http协议。垃圾回收机制还没搞明白,在服务器端建个 Dictionary<>,谁知道哪时会被 神不知鬼不觉 地收掉。
1. 他们还在用 vs2005,用的是remoting
2. 由于他们的客户比较可靠,无需考滤的 加密、摸糊、强名称 之类的 代码保护、安全保护。
唯一比我用得新的就是sql2005,我还停留在sql2000,因为我要考滤发布时方便。
所以问他们也问不到什么。