利用Dcom开发多层结构数据库时,如何获取客户端的ip地址(100分)

  • 主题发起人 主题发起人 Thomashu
  • 开始时间 开始时间
T

Thomashu

Unregistered / Unconfirmed
GUEST, unregistred user!
利用Dcom开发多层结构数据库时,不像用Tcp/ip协议,没有localaddress的属性,请指点如何获取客户端的ip?
 
最简单的方式是在AppServer上作一个方法,
让Client 告诉 AppServer
 
让客户端自己告诉服务端
服务端查出客户端的地址比较麻烦
 
我想应该只能在中间层和客户端之间想办法了。
 
我的方法是客户端登陆服务器时,给出IP地址,Delphi的DEMO有类似的做法,但不是
IP地址罢了
 
在应用服务器上自定一个方法加上一个参数,之后客户端调用这个方法。
 
你delphi下打开应用服务器然后在edit菜单下选择“Add to Interface”,这时
delphi会弹出个窗口,在这个窗口中你可以定义过程、函数、属性,比如你定义的
是过程那么你输入“Procedure aaa(aaa:string)”之后按确定delphi会自动为你
加入到应用服务器中,这样你就可以在这个aaa中写你自已的代码了。
在客户端得到ip地址的方法就很多了可以直接调用api函数或是用socket控件也能得
到,然后你连结到这应用服务器因为这样你才能调用你刚才定义的这个过程,
DCOMConnection1.AppServer.aaa('客户端的ip');
这样你就把客户的ip传到了应用服务器上了。
我个人认为应用服务器最好自定义所有的接口和应用规则,这样你能较全面的控制
服务器的工作,我不太爱用delphi提供的DataSetProvider1、iprovider.
祝你成功!!
 
补充一点:
如果你定义的是函数那么返回值的属性要是olevariant型。
在delphi自带的例程中:demos/midsa/adhoc这个例程对于理解自定义过程、函数
很有帮助,有时间把它看透。
 
>最简单的方式是在AppServer上作一个方法,
>让Client 告诉 AppServer
Not 最简单,要使用 Push 技术!
 
如果客户端是WIN98(要运行RPCSS)、WINNT,那么可通过回调技术,来实现。首先,在DCOM中定义一个方法,客户端在调用时前初始一个本地INTERFACE,然后通过所定义的方法传到服务端,这样,服务端通过客户端传来的INTERFACE,再结合本地获取IP地址的技术,即可实现。
使用这种方法的前提时DCOM调用之间的对称性。
 
一个笨方法:
clientdataset.DataRequest(本地IP);
在app上的DataSetProvider1.OnDataRequest中有个Input: OleVariant
你的客户IP就在Input中。
 
通过CallBack到客户端进行实现,可以到www.borland.com的社区寻找例子。
 
好象有很多方法。
 
接受答案了.
 
后退
顶部