最近开发了一个用Delphi自带的
Socket做代理服务器的三层结构程序,
现在想控制客户端访问的用户数,
想请教各位有什么办法没有?
Socket做代理服务器的三层结构程序,
现在想控制客户端访问的用户数,
想请教各位有什么办法没有?
解决方案 »
- 如何得到存储过程中的参数的名称!
- Excel合并单元格问题
- 有没有人用过条码机开发过打印程序(型号:TSC,TTP-243E)
- 創建MDI程序,在顯示主窗體的同時,顯示登陸子窗體,此時要登陸成功后才能操作主窗體
- 一个关于Delphi6和Delphi7的问题
- 急急急急:DBGrid 中的事件和错误捕获
- 在保存数据表时, 怎么知道当中的某个或几个字段的值是否已经被修改过?
- 调用动态链接库的问题??急用??
- 怎样知道一个线程正常结束,从而进行后续操作?
- 出现“RPC服务器无法使用”,请问我应该如何设置服务器呢。
- 征求选择技术的两个问题!
- 请问谁有图像模型匹配的源程序吗,可以给我发一份吗?急需,来不及自己做了,请各位帮帮忙哦!!
能详细说明下么,应用层怎么判断连接数,还有怎么杀死这个客户端连接时创建的应用层的线程。
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
if Self.Socket.ActiveConnections <= 100 then // 增加这句,100表示连接上限
SocketThread := TSocketDispatcherThread.Create(False, ClientSocket,
InterceptGUID, Timeout, SocketForm.RegisteredAction.Checked, SocketForm.AllowXML.Checked);
end;
if Self.ActiveConnections <= 10 then
begin
...
end;
的限制。
谢谢你的指点,我试了一下,你的方法可以控制连接数。
但是当超过连接数的时候,客户端却不停的去连接而又连接不上,
给客户看起来好象是系统Down机的感觉。
能不能在客户连接的时候,给客户端'连接数已满'等提示
function TServer.login(const client_no: WideString;): OleVariant;
var
flag:integer;
begin
flag:=2;//
if clientnumber>=100 then
begin
flag:=1;
self.Destroy;
end;
result:=flag;
end;客户端就调用应用层的程序,根据返回状态来启动或关闭程序
if Self.ActiveConnections <= 10 then
begin
...
end
else
begin
ShowMessage('连接数已满');
end;
的限制。
只是一个代表,在ScktComp中,你还可以找到ClientSocket在相应的Connect中加入条件限制即可。
应该需要服务器端客户端配合才行。--------------------
应该让和客户端约定收到什么数据表示什么意思
服务器端达到最大连接后给客户端发送特定的数据
应当在服务器端加以限制,客户端不可以作指望的。当服务器端拒绝连接时,客户端只能弹出不能连接服务器的对话框,现在大多数应用都是这么做的。
这就是在应用层断开客户端的请求连接的在应用层写入:
function TServer.login(const client_no: WideString;): OleVariant;
var
flag:integer;
begin
flag:=2;//
if clientnumber>=100 then
begin
flag:=1;
self.Destroy;
end;
result:=flag;
end;客户端就调用应用层的程序,根据返回状态来启动或关闭程序
只能在Winsock那一层加以限制,当客户端发出连接请求时,拒绝连接。
当客户端想了解连接状态时,可以改写onSocketEvent,当为seLookup时无法连接,是无法连接服务器,当为seConnecting时无法连接,是服务器因为某原因积极地拒绝。
我的ShowMessage('连接数已满');只是一个象征意义的语句,并不是说就是弹出对话框,只需填入服务器相应代码即可。
不过我有一点不明白的是
到底是在代理服务器上控制还是在中间层应用服务器上控制好
我觉得如果能在自己写的中间层上控制可能会好点。
但是我不知道在中间层上怎样才能做到像Scktsrvr代理中
显示连接的客户数,如果能做到我就能在客户端连接中间层时
根据中间层的客户联接数返回一个值回客户端,根据这个值我就可以
决定是否让客户端连接进来了
你的SocketConnection需要引用SConnect 而SConnect又引用ScktComp,在Accept中修改代码即可达到搂主的目的。