如何得知服务器上有哪台客户机登陆(100分)

  • 主题发起人 主题发起人 jonyhuang
  • 开始时间 开始时间
J

jonyhuang

Unregistered / Unconfirmed
GUEST, unregistred user!
三层应用中,服务器应用程序如何得到有哪个客户端和服务器应用程序连接,我服务器端
使用DataSetProvider控件和客户端SocketConnection连接,
并在服务器上运行了scktsrvr.exe,要求在服务器程序中象scktsrvr.exe的users功能那样
随时知道有那台机登陆,那台断开了,不知能否实现。
jonyhuang
 
在socketconnection的连接事件或读写事件再或断开事件中读取
socket.RemoteAddress或 socket.RemoteHost 属性即可得知对方的信息
 
肯定能实现,利用服务端取得client ip
后调用函数转换成client 标识即可。
 
在socketdisconnection的事件中可以读取到断开信息,
你可以看DELPHI下面关于这个东西的例子。或者给我你的EMAIL我发个例子给你。
 
我也要 lijie123@990.net
 
To lovefox:
请给我一份吧,jswqg@cn99.com
 
是否用CORBA的?如果是用CORBA的,在CLIENT加下服务器端的一个scktsrvr_tlb和
CorbaObj单元(scktsrvr是你的服务器文件名)。在服务器上写方法就行了。如不懂
就发EM给我吧。121460612@163.net。
 
客户端激活远程数据模块时,可以重载服务端Initialize获得
客户端释放远程数据模块时,可以重载服务端Destroy获得;
 
同意:boyman
用服务器是多实例的,这样做可行,单实例的好象不行。
 
单实例的好象不行?单实例每一个客户启动一个进程,如果这样,可以利用共享内存来
记录客户的登录数,同样是使用nitialize,Destroy
 
我也要一份lazycat521@263.net
 
可以写一个函数,登入时,把用户的信息传给服务端。
 
我也要
zqs10597249@263.net
 
procedure Tresserver.RemoteDataModuleCreate(Sender: TObject);
begin
MainForm.UpdateClientCount(1);//加一个访问数
{可以把用户名放到数据库或。。。}
end;

procedure Tresserver.RemoteDataModuleDestroy(Sender: TObject);
begin
MainForm.UpdateClientCount(-1);//减一个访问数
{可以把用户名从在线数据库中删除或。。。}
end;
 
可以到我的主页上下载一个例子,
http://huchunguo.at.china.com
eg:
function loginuser(username, password : widestring):hresult;
begin
Mainscreen.UserList.Items.Add(username);
end;

function logoutuser(username:widestring):hresult;
begin
Mainscreen.UserList.Items.Delete(Mainscreen.UserList.Items.Indexof(username));
end;

Client端联接时,传入username, and password. Call loginuser(username, password);
Client disconnect时,call logoutuser(username);
这样就可以了。
 
to 房客
RemoteDataModuleCreate实际这样是不行的
 
delphi的exaple中有类似的程序
 
huchunguo 大虾的可行。我是过的,
但有个问题请教:如何让服务器的窗体显示出来(客户端激活服务器时)?
多谢!
 
后退
顶部