S
startcn
Unregistered / Unconfirmed
GUEST, unregistred user!
在用IDTCPServer的时候,发现一个很奇怪的问题:
在局域网内部,当某个客户端同时发出两个数据包的时候,server对所有连接的客户端广播这两个包,发包客户端收的这两个包的时间间隔在20ms左右,但是其他客户端在150ms以上 ,可以肯定的是,server端对所有客户端发出这两个包的时间差在5ms以下,因为服务器端没有做任何事情,只是立即转发。百思不得其解,还望各位高手指点一些,多谢了。
服务器端的代码如下:
procedure TForm1.BroadCastMsg(Msg:String);
var
List : TList;
Count : Integer;
begin
List := tcpServer.Threads.LockList;
try
for Count := 0 to List.Count - 1 do
try
if TIdPeerThread(List.Items[Count]).Connection.Connected then begin
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
memo1.lines.Add('Send '+Msg+' To '+TIdPeerThread(List.Items[Count]).Connection.Binding.PeerIP+' at '+FloatToStr(GetTickCount))
end;
except
TIdPeerThread(List.Items[Count]).Stop;
end;
finally
tcpServer.Threads.UnlockList;
end;
end;
在局域网内部,当某个客户端同时发出两个数据包的时候,server对所有连接的客户端广播这两个包,发包客户端收的这两个包的时间间隔在20ms左右,但是其他客户端在150ms以上 ,可以肯定的是,server端对所有客户端发出这两个包的时间差在5ms以下,因为服务器端没有做任何事情,只是立即转发。百思不得其解,还望各位高手指点一些,多谢了。
服务器端的代码如下:
procedure TForm1.BroadCastMsg(Msg:String);
var
List : TList;
Count : Integer;
begin
List := tcpServer.Threads.LockList;
try
for Count := 0 to List.Count - 1 do
try
if TIdPeerThread(List.Items[Count]).Connection.Connected then begin
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
memo1.lines.Add('Send '+Msg+' To '+TIdPeerThread(List.Items[Count]).Connection.Binding.PeerIP+' at '+FloatToStr(GetTickCount))
end;
except
TIdPeerThread(List.Items[Count]).Stop;
end;
finally
tcpServer.Threads.UnlockList;
end;
end;