大量client和server连接的问题(200分)

  • 主题发起人 主题发起人 delphilxh
  • 开始时间 开始时间
D

delphilxh

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么解决呢?
 
很麻烦。。。[:(]
 
怎么解决呀
 
连接不是问题。ServerSocket1的属性:用stNonBlocking方式;
threadcachesize的值设为你想要的数字。

{=================================================================
功 能: 解释GPRS指令并发送的函数
参 数: 有,Socket的通道序号、指令串
返回值: 成功: True 失败: False;
版 本: 2003/09/07
作 者: 吴仕龙
备 注:
=================================================================}
function gprsml(socindex,mlc:string):Boolean; //mlc是指命令串
var
dataml:array[1..100] of byte;
ml,gprsid:string;
i,j,cd,p:integer;
begin

j:=1;
cd:=length(trim(mlc)) div 2; //去空格,除2 取得长度;要求MLC长度刚好是偶数个
for i:=1 to cd do
begin
ml:=copy(trim(mlc),j,2);
dataml:=StrToInt('$'+ml);
j:=j+2;
end;

//指定对象抄表; 从指令中取得GPRS ID 号,再根据GPRS ID 号从列表中取得IP 和 端口号,最后才发指令;

for i:=0 to (form1.ListView1.Items.Count-1) do
begin
if (form1.listview1.Items.Item.SubItems.Strings[0]=gprsid) and (form1.listview1.Items.Item.Caption='离线') then
begin
form1.statusbar1.Panels.Items[3].Text:='此ID 号离线,不能发指令!';
result:=false; //指令发送失败
end;
if (form1.listview1.Items.Item.SubItems.Strings[0]=gprsid) and (form1.listview1.Items.Item.Caption='在线') then
begin
try
for p:=0 to form1.ServerSocket1.Socket.ActiveConnections - 1 do
begin //用列表中的IP和端口分别与线程中的IP和端口相比较,如果IP相等,端口不相等,则说明此线程已断开,应释放;
if (form1.ServerSocket1.Socket.Connections[p].RemoteAddress = form1.listview1.Items.Item.SubItems.Strings[1]) then
begin
if (inttostr(form1.ServerSocket1.Socket.Connections[p].RemotePort) = form1.listview1.Items.Item.SubItems.Strings[2]) then
begin
try
begin
form1.ServerSocket1.Socket.Connections[P].SendBuf(dataml,cd);
form1.RichEdit1.Lines.Insert(0,str_line);
form1.RichEdit1.Lines.Insert(0,'将要发送的端口:'+inttostr(form1.ServerSocket1.Socket.Connections[p].Remoteport));
form1.RichEdit1.Lines.Insert(0,'发指令:'+mlc);
result:=true; //指令发送成功
end;
except
on E:exception do form1.RichEdit1.Lines.Insert(0,'错误信息:'+E.Message);
end;
end
else
begin
form1.listview1.Items.Item.Caption:='离线';
form1.ServerSocket1.Socket.Connections.free; //删除一个没有用的线程
result:=false; //指令发送失败
end;
end;
end;
except
//不去执行出错信息,这样才不会有很多错误窗口;
on E:Exception do form1.RichEdit1.Lines.Insert(0,'错误信息:'+E.Message);
end;
end;
end;

end;
 
acceptex后如何的到ip呢
 
uoooooooooooooo
 
接受答案了.
 
后退
顶部