procedure TServer.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i,j:integer; begin j:=-1; for i:=0 to sessions do begin if session[i].CHandle= socket.SocketHandle then begin session[i].CSocket :=socket; session[i].CName:=socket.RemoteHost; session[i].CAddress:=socket.RemoteAddress; session[i].CUsed:=true; break; end; j:=i; end; if sessions=CMax then begin socket.SendText('对不起,已超过最大在线人数,请稍后!'); exit; end; if j=sessions then begin inc(sessions); session[i].CSocket:=socket; session[i].CHandle:=socket.SocketHandle; session[i].CName:=socket.RemoteHost; session[i].CAddress:=socket.RemoteAddress; session[i].CUsed:=true; end; listbox1.Items.Add(inttostr(socket.SocketHandle)); statusbar1.Panels[0].Text:='客户端'+socket.RemoteHost+'已连接'; end;我用是用的ServerSocket 控件 在ClientConnect事件中记录连接数const CMax=3;//客户端最大连接数 type client_record=record CHandle: integer;//客户端套接字句柄 CSocket:TCustomWinSocket; //客户端套接字 CName:string; //客户端计算机名称 CAddress:string; //客户端计算机IP地址 CUsed: boolean;//客户端联机标志 end;这个例子我也是网上找的,找找有完整的例子,自己再扩充一下,理解一下。
1、设全局变量var FClientCount:integer;
2、RemoteDat1的TTServer.RemoteDataModuleCreate(Sender: TObject); 事件中
FClientCount:= FClientCount+1;
当客户端上线,创建数据模块时,自动加 1 。
Socket: TCustomWinSocket);
var
i,j:integer;
begin
j:=-1;
for i:=0 to sessions do
begin
if session[i].CHandle= socket.SocketHandle then
begin
session[i].CSocket :=socket;
session[i].CName:=socket.RemoteHost;
session[i].CAddress:=socket.RemoteAddress;
session[i].CUsed:=true;
break;
end;
j:=i;
end;
if sessions=CMax then
begin
socket.SendText('对不起,已超过最大在线人数,请稍后!');
exit;
end; if j=sessions then
begin
inc(sessions);
session[i].CSocket:=socket;
session[i].CHandle:=socket.SocketHandle;
session[i].CName:=socket.RemoteHost;
session[i].CAddress:=socket.RemoteAddress;
session[i].CUsed:=true;
end;
listbox1.Items.Add(inttostr(socket.SocketHandle));
statusbar1.Panels[0].Text:='客户端'+socket.RemoteHost+'已连接';
end;我用是用的ServerSocket 控件
在ClientConnect事件中记录连接数const
CMax=3;//客户端最大连接数
type
client_record=record
CHandle: integer;//客户端套接字句柄
CSocket:TCustomWinSocket; //客户端套接字
CName:string; //客户端计算机名称
CAddress:string; //客户端计算机IP地址
CUsed: boolean;//客户端联机标志
end;这个例子我也是网上找的,找找有完整的例子,自己再扩充一下,理解一下。