我使用indy的idtcpserver/idtcpserver时候,客户端发过来数据,然后向每个客户端发送收到的数据,但是过了大概半个小时左右,就发现客户端收不到数据,其他的客户端连接也连接不上服务器,我的客户端大概在70个左右,其中有一个客户端没3秒钟就发送3条消息,我使用的是流操作模式,发送代码如下,那位高手指点小弟一下,急var
i,count:integer;
pt,st:TIdPeerThread;
messageid:xmessageid;
FSendStream:TmemoryStream;
goodsrelease:Tgoodsrelease;
pgoodsrelease:^Tgoodsrelease;
client:Tidtcpclient;
clist : TList;
CS:TRTLCriticalSection;
begin
messageid:=XMIDClientreleasedatas; try
initializeCriticalSection(cs);
FSendStream:=Tmemorystream.Create;
Fsendstream.Clear;
Fsendstream.Write(messageid,sizeof(messageid));
count:=goodslist.Count;
FSendStream.Write(count,sizeof(count));
for i:=0 to goodslist.Count-1 do
begin
pgoodsrelease:=pointer(goodslist.Items[i]);
goodsrelease:=pgoodsrelease^;
Fsendstream.Write(goodsrelease,sizeof(goodsrelease));
end;
try
clist := IdTCPServer.Threads.LockList;
finally
IdTCPServer.Threads.UnlockList;
end;
try
EnterCriticalSection(cs);
for i:=0 to clist.Count-1 do
begin
pt:=TIdPeerThread(clist.items[i]);
if pt.ThreadID<>athread.ThreadID then
begin
try begin
pt.Connection.WriteInteger(Fsendstream.Size);
pt.Connection.WriteStream(Fsendstream);
end;
except
pt.Stop;
end;
end;
end;
finally
LeaveCriticalSection(CS);
end;
finally
Fsendstream.Free;
end;
end;
i,count:integer;
pt,st:TIdPeerThread;
messageid:xmessageid;
FSendStream:TmemoryStream;
goodsrelease:Tgoodsrelease;
pgoodsrelease:^Tgoodsrelease;
client:Tidtcpclient;
clist : TList;
CS:TRTLCriticalSection;
begin
messageid:=XMIDClientreleasedatas; try
initializeCriticalSection(cs);
FSendStream:=Tmemorystream.Create;
Fsendstream.Clear;
Fsendstream.Write(messageid,sizeof(messageid));
count:=goodslist.Count;
FSendStream.Write(count,sizeof(count));
for i:=0 to goodslist.Count-1 do
begin
pgoodsrelease:=pointer(goodslist.Items[i]);
goodsrelease:=pgoodsrelease^;
Fsendstream.Write(goodsrelease,sizeof(goodsrelease));
end;
try
clist := IdTCPServer.Threads.LockList;
finally
IdTCPServer.Threads.UnlockList;
end;
try
EnterCriticalSection(cs);
for i:=0 to clist.Count-1 do
begin
pt:=TIdPeerThread(clist.items[i]);
if pt.ThreadID<>athread.ThreadID then
begin
try begin
pt.Connection.WriteInteger(Fsendstream.Size);
pt.Connection.WriteStream(Fsendstream);
end;
except
pt.Stop;
end;
end;
end;
finally
LeaveCriticalSection(CS);
end;
finally
Fsendstream.Free;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货