我在应用服务器上,如何能得到当前连接的客户端的IP地址?(300分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间
to LeeChange:
“老人家”是把应用服务器同ScktSrvr.exe写成了一个可执行文件,
建立了一个大的应用服务器程序。
这不合我的设计要求,我是根据模块,建立了多个小应用服务器,这有很多好处。
这就,ScktSrvr.exe中,如何把客户端的IP发给对应的应用服务器,
并让它对应用服务器中的企业对象TRemoteDataModule对应起来?
我想是没有办法作到这点吧,
除非能在TRemoteDataModule中得到这个IP地址。
 
DCOM可以运行在TCP/IP,NetBEUI,IPX等协议上,所以想通过DCOM连接来获得IP地址,出发点就错了。
就算不说这个,TRemoteDataModule本身是个自动化对象,它跟ScktSrvr.exe的沟通也是通过COM的,
TCP/IP对于TRemoteDataModule来说根本是个不可望也不可及的东东。
如此费力去把不同范畴的东东混在一起用,费力又不讨好。
如果需要按照IP地址来区分不同的客户端连接,我建议不如在系统中使用Session的概念,
客户端程序连接上来并登录后,获得一个SessionID号,以后的操作由这个SessionID号来
区别,后台可以通过某种机制检查Session的超时及判断是否有效即可。
 
应用服务器和ScktSrvr是跑在同一台机器上的,有很多中方法进行通讯。
消息,管道,共享内存...
 
to szf:
作为服务的提供者,DCOM如得不到现在有谁正对它联系,
这种设计本就很不合理。
我想应该可以作到的,只是我们不知道怎么得到而已。
to LeeChange:
还是不好办的,
你想,即使在ScktSrvr.exe中得到了IP地址,并传给应用服务器,
但这里应用服务器已产生多个TRemoteDataModule的线程与客户端交互,
这时又怎知哪个是TRemoteDataModule对应那个客户端IP?
 
程云,
还是用APPSERVER吧,如果你不喜欢呢加个监听服务的话,
否则我觉得有些没有必要了
 
如果你认为DCOM肯定可以获得对方IP,并朝这个方向努力的话,大家一齐等你的好消息吧,
因为这实在是个难题。
或者可以从这个方面考虑:分布式COM跟跨计算机有关,可不可以先取到计算机名,进而得到IP。
不过我不明白为何不从客户端提交IP?
防止非法客户端连接吗?--然后TRemoteDataModule自己Free掉?
 
我估计程云是想防止非法客户端连接
 
只有自己作一个端口映射服务器(类似与带来服务器),这样就可以拦截所有的tcp连接了。
 
最后只能
DCOMConnection1.AppServer.aaa('客户端的ip');
这样解决了。
 
后退
顶部