三层中必须要解决的问题,我的分布式数据库应用程序中怎么取得客户端的联接数量和联接IP (100分)

  • 主题发起人 主题发起人 无疯无禄
  • 开始时间 开始时间

无疯无禄

Unregistered / Unconfirmed
GUEST, unregistred user!
我也一直想这个问题:中间层怎么取得当前的各个连接的IP???
不知如何解决,
 
你既然是服务器,
他们连接都要通过你,
在连接的时候记下来不就行了,
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
楼上的兄弟,怎么取呢??
用的是SocketConncetion做联接的?
 
我觉得用dcom连接也可以实现,你可以在客户端检测出自己的ip,然后将ip作为参数传到服务器。
 
我的目的是为要服务器端知道,目的是要在服务端产生一个日志文件,记录联接联接状态,正在联接中客户端的IP等等
 
管他什么SocketConnection还是DCom连接,
总要登录应用服务器吧,
来个Login函数(参数你自己定啦加个IPAddress什么的!!!),再来个LogOut函数,
你做的程序运行和关闭时都调用它们,否则别想通过,
我就做过这鸟东东,代码不能给哦,
有什么问题你再提出来吧~!!!!!
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
哦,偶明白了
应该在联接之后发送IP等验证数据吧,如果不通过的话,就关闭联接是吗?
 
有没有更好的方法,最好是直接在中间层取联接属性
 
上面这种办法,只是实现了这样的功能
怎么才能真正的直接在应用服务器中取得联接IP和联接数呢?
 
也许以下对你有帮助:
客户端的SocketConnection->loginPrompt属性设置为true;
然后在SocketConnection的onlogin事件中调用中间层的login函数。这儿你可以取得本机的IP地址,至于如何取得IP,你自己想想吧。
中间层的login函数为:
procedure login(const username,password,....:widestring);
begin
//你可以根据需要添加参数
form1.listbox1.items.add(username+ ' '+password+'.....');
end;
至于如何使用应用服务器得到IP,我也在想是不是有方法直接得到,如果谁有答案不要忘记通知我哟。dreamwang@163.com谢谢!
 
scktsrvr有源码,仔细看懂后,可以进行修改,
不但可以达到真正的从IP上限制连接.
还可以集成到自己的程序之中.
 
同意zhanggeye的观点,我改过一次,非常好用。
 
我是将ScktSrvr的源码修改,和自己的服务程序合成一个
 
我也想知道
 
每个客户端连接的时候把自己的信息注册上去不就知道了
 
>>每个客户端连接的时候把自己的信息注册上去不就知道了
客戶端意外結束后怎麼辦?[^]
 
客户端的联接数量不是很好办吗?
RemoteDataModule.Create一次就是一个客户连接上来了啊
然后如果是用Oracle的话,里面不是有个GV_$SESSION的视图吗?里面记录了登陆信息
 
這個簡單,寫個函數,在客戶端調用就可以了
獲取本机IP函數如下
首先要在單元Uses裡添加WinSock

var
Ip,IpStr:string;
WSData:TWSAData;
ch:array[1..32]of char;
MyHost:PHostEnt;
i:Integer;
begin
if WSAstartup(2,WSData)<>0 then
begin
Halt(2);
end;
try
if getHostName(@ch[1],32)<>0 then
begin
Halt(3);
end;
except
Halt(3);
end;
MyHost :=GetHostByName(@ch[1]);
if MyHost=NIL then
begin
Halt(4);
end
else
begin
for i:=1 to 4do
begin
Ip:=inttostr(Ord(MyHost.h_addr^[i-1]));
IPStr:=IPStr+Ip;
if i<4 then
IPStr:=IPStr+'.';
end;
end;
result:=IPStr;
end;
最後將這個函數的返回值寫進一個表里,服務器定時刷新讀這個表不就OK了?
不知道我這個答案符合摟主的要求麽?我想應該沒有什麽問題
 
后退
顶部