呵呵,我刚解决完这个问题。
1、建一个表,存储客户端情况。如ip、机器名、用户名、是否允许连接等。
2、客户端加一个password 窗体,如果password正确则客户端发送ip、机器名或用户名
3、服务器得到后,判断是否允许,如不允许,发送信息到客户端,客户端close.
4、如果在连接过程中终止服务。我的方法是:
每当客户端取数据时,都检查一下是否允许。
或者加上socket、client组件。一旦不允许,向客户端发一个不允许信息,客户端close
以下代码共参考
procedure Tserdf.ckcompass(var comm, Param2, boxlist: OleVariant);
var
list:variant;
i:integer;
begin
if (varisarray(comm)) then
begin
//寻找连接及权限
form1.Table2.SetKey;
form1.Table2.FieldByName('ip地址').AsString:=comm[1];
if not form1.table2.gotokey then
begin
param2:='error';
//加入询问是否加入连接
if messagedlg('没有记录的'+comm[1]+' '+comm[2]+'试图连接本机,是否加入?',mtinformation,[mbok,mbcancel],0)=mrok then
begin
if form1.Table2.CanModify then
begin
form1.Table2.Append;
form1.Table2.FieldByName('ip地址').AsString:=comm[1];
form1.Table2.FieldByName('客户机名称').AsString:=comm[2];
form1.Table2.FieldByName('昵称').AsString:='陌生人';
form1.Table2.FieldByName('是否允许连接').AsString:='允许';
form1.Table2.Post;
param2:='error3';
showmessage('请对新连接用户赋予权限');
end;
end;
end
else
//找见纪录
if form1.Table2.FieldByName('是否允许连接').AsString='允许' then
begin
//code
end //允许end
else
//不允许
param2:='error2';
end;
if param2='error' then
messagedlg('来自'+comm[1]+' '+comm[2]+'试图连接本机,已拒绝',mtinformation,[mbok,mbcancel],0);
end;