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

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
我在应用服务器上,如何能得到当前连接的客户端的IP地址?
可不要让我用
DCOMConnection1.AppServer.aaa('客户端的ip');
这种方法。
因为我得在
procedure TMainServe.RemoteDataModuleCreate(Sender: TObject);
begin
GetClientIP();
end;

我需要在应用服务器创建时就要得到这个地址。
事情紧急,请各位高手多多援助了。
 
你在你的 DCOMConnection1 的 AfterConnect 事件中调用你的
DCOMConnection1.AppServer.aaa('客户端的ip');
不就得了.
提示:
TDCOMConnection 的 Connected属性由False变True意味着远程
TRemoteDataModule对象的建立
 
怎么可能呢?
我是要在创建的同时去记录这个,
创建之后就晚了
 
这个IP地址得作为你TRemoteDataModule对象的一个属性吧,你还没创建
记录在哪啊?
 
to 楼主:
不知用的什么连接,如果是TCPConnection,在下倒有的一试.
 
其实我觉得不如再自己做个TCP链接
专门做这个事的:)
晚上回去帮你查查,除了上面这些方法之外的方法
 
to xeen:
我记录在公共缓冲区的。
to LeeChange:
我使用的是TSocketConnection连接的应用服务器,
这个也是使用的TCPConnection。
有劳你帮着试试了。
 
那你怎么把客户的Ip和它的TRemoteDataModule对象对应起来?
感觉这种设计方法很怪.
 
好像没有办法吧。
DCOM/SOCKET连接都是通过代理与中间层通讯的,代理层也许有直接的方法,但它已经是写
好的了,按规则是不可能让你去改,如果是用SocketConnection(Socket),是可以(改Scktsrvr程序),
但换一个协议(DCOM)就行不了,所以俺觉得不如在连接应用服务器后,再注册这个这个连接的IP。
将它保存下来就完了。。。。
 
To 程云
SocketConnection方式是有办法的。
但DCOMConnection方式我没试出来
你可否改为SocketConnection方式连接阿。
如可以就搞定了,过后我会给你发源码的
 
你小子给我发QQ让我来!
我也觉得也没有办法。COM库实现了进程间的调用,COM库给我们的是接口的指针或CLSID,隐藏了具体连接过程。
所以我认为做不到。
 
改用Socket可能还真行了呢!
老人家给我也发一份。
 
up ,发一个来看看
 
老人家,如果能用socketconnection实现。能否给我也发一个
liuzh0@163.com
thanks
 
程云,我查了一下,不行,
你要不就用APPSERVER。。。。。
或者就在服务器端写个监听的代码
 
呵呵,老人家也用这个方法了.
to 楼主:
打开Borland/Source/VCL/ScktSrvr工程.
在AddClient方法中加入自己的代码就行了,那里可以得到客户端的IP
 
to LeeChange:
改造ScktSrvr.exe的方法不好,
我与“老人家”讨论过这个。
会带来很多弊端的。
to 天真:
非要这么惨吗?
 
procedure TSocketForm.AddClient(Thread: TServerClientThread);
var
Item: TListItem;
begin
Item := ConnectionList.Items.Add;
Item.Caption := IntToStr(Thread.ClientSocket.LocalPort);
Item.SubItems.Add(Thread.ClientSocket.RemoteAddress);
//这里的RemoteAddress就是客户端的ip
//可以用许多方法把这个值送给自己的程序
if ShowHostAction.Checked then
begin
Item.SubItems.Add(Thread.ClientSocket.RemoteHost);
if Item.SubItems[1] = '' then
Item.SubItems[1] := SHostUnknown;
end else
Item.SubItems.Add(SNotShown);
if Thread is TSocketDispatcherThread then
Item.SubItems.Add(DateTimeToStr(TSocketDispatcherThread(Thread).LastActivity));
Item.Data := Pointer(Thread);
UpdateStatus;
end;
 
后退
顶部