idtcpserver同时给上百个客户发消息总是奇怪退出(无提示) ( 积分: 100 )

  • 主题发起人 主题发起人 carolson2
  • 开始时间 开始时间
C

carolson2

Unregistered / Unconfirmed
GUEST, unregistred user!
环境: Delphi 7 自带的idtcpserver client
Client部分是这样操作的: 不考虑服务器状态,只try except。如果server中断也不产生什么后果(会重新连接)
Client 接到服务机发来的消息后立刻反馈一个。 比如 Server.Writeln(string), client用readln 循环读,一旦有指定的立刻反馈一个string Client.writeln...., client 每间隔30秒writeln 一个string给server

Server部分,因为同时连接的客户很多,上百上千个。经过测试,如连接的客户很少就没问题。 如多了,则如果server 只接收没问题。 一旦接收并反馈就出问题了。
我把所有涉及到tcp连接的都放在try中了。但是server总是无任何提示的就自己退出了 :(
关键代码如下,盼解决!

在 procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
内:

try
ThisIP:=athread.Connection.socket.Binding.PeerIP;
myCMD:='mingling ';
except
myCMD:='';
end;

if myCMD='mingling' then
begin
try

checklistbox.lines.add(myCMD);
... ... 其他都是些不出现except的
except

end;

end;



在server发消息的button 内:
procedure TForm1.Button1Click(Sender: TObject);
代码:
var
i:integer;
begin
with IdTCPServer1.Threads.LockList do
for i:=0 to count -1 do
begin
sleep(10);
try
TIdPeerThread(Items).Connection.WriteLn('mingling');
except
// except 不操作,这样不用管client是否还在了 :) 比如意外断等等。
end;

end;

IdTCPServer1.Threads.UnlockList;
end;
 
补充:
在客户很多的时候比如上百个, 一按button 莫名其妙的程序就自己推出了。

希望达到: 一按button 立刻给所有客户发消息, 所有客户接到消息后立刻反馈一个消息。 server接到反馈的消息显示。

是同时连接太多?还是?
 
后退
顶部