zzappler 发表于 2013-5-17 09:03:19

【求助】如何实现ACE服务器同时只允许一个客户端接入

本帖最后由 zzappler 于 2013-5-17 09:13 编辑

背景:
ACE服务器功能,使用一个ACE_Event_Handler派生的acceptor类接收对象
===割===
如果ACE服务端同时只允许一个客户端接入的话,应该在哪里限制?
acceptor.handle_input()函数中是否可以进行限制?

求大侠帮忙解决{:soso_e117:},多谢;



winston 发表于 2013-5-17 18:57:20

存储一下客户链接的信息,有新链接的时候,判断IP:Port,如果发现已经存在,直接拒绝。

zzappler 发表于 2013-5-20 09:07:51

winston 发表于 2013-5-17 18:57 static/image/common/back.gif
存储一下客户链接的信息,有新链接的时候,判断IPort,如果发现已经存在,直接拒绝。 ...

要是客户端Port一般是任选的吧,当前客户端是任意接入的;

当前用了一个比较折中的办法,好像也不太好;
accept 接入一个TCP连接后, 在 handle_input中执行 cancel_wakeup, 断开TCP完成后执行 schedule_wakeup
不知道有没有问题?
:(

winston 发表于 2013-5-20 10:15:38

这里,首先你要定义一下,什么是唯一的客户,如何识别,才能谈得上怎么在技术上处理。

moxuyou 发表于 2013-6-4 15:22:38

可以考虑在make_svc_handler的地方做判断来确认是否接受该链接~ACE_Asynch_Acceptor的话还有validate_connection可以用
至于如何标示‘唯一’就是协议层的问题了

yunh 发表于 2014-2-20 15:02:36

    楼上说的对,make_svc_handler是ACE_Acceptor的成员,主要用来创建处理器对象,重载它一般是用来做对象池或单例的,也可以用来根据连接对象个数拒绝新连接。楼主没有必要自己从ACE_Event_Handler派生acceptor类,直接使用ACE_Acceptor做基类就挺好,不过底层的机制是一样的,就是在handle_input中判断连接要不要接受。
页: [1]
查看完整版本: 【求助】如何实现ACE服务器同时只允许一个客户端接入