请教一个Indy TcpServer的奇怪问题,请高手指教。 (300分)

  • 主题发起人 主题发起人 startcn
  • 开始时间 开始时间
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;
 
不知道哦........高手来回答吧........
 
这和你的交换机 以及 TCP / IP 协议栈 都有关系,
你说的发包客户端时间隔会段,这可能使因为 TCP 通道已经被建立,不需要在耗费时间去验证的原因。
 
嗯,我想有可能也是这个问题。
请问有什么解决方法吗?
 
你还是要看看 到底问题出在交换机
还是出在 TC P / IP 协议栈
或是 INDY 本身。
比如 换个交换机试试
比如 不用INDY试试
这样马上就能定位出问题所在,解决起来也方便。
不过客户端 网卡 可能收到包的速度都是差不多的,也许协议栈的操作出现了分叉。
 
交换机是不可能有问题的,这个可以排除。
INDY本身问题么,也有可能,不过看了它的源码,好像也找不出什么地方有问题。-_-
嗯,换其它控件试一下吧,要是真的是协议栈的操作的问题,那该怎么办啊?
这100-200ms的差距还是蛮大的,不应该以前没人注意过吧?
 
比如不用TCP改用UDP就可以解决时间差的问题了。
 
好,我试一下看看,多谢qince兄。
 
后来仔细想了下,我这个应用不能用udp。-_-。否则改动太多。还有什么解决方法吗?
 
能在Tcp的基础上解决吗?
 
用serversocket试了,还是有100多ms的延迟误差。-_-。救命啊,大侠
 
Chat 用TIdTcpServer和TIdTcpClient做的聊天室例子
http://www.wisdomcube.com/stuff/chat.rar
看一下这个有没有帮助???
 
谢谢a'p'p001兄,不过那个例子应该没用。
我的问题是很注重时间,2个局域网内的客户端接受同2个从服务器端来的消息,时间的间隔上居然会莫名其妙的相差100ms以上,真的是很纳闷呀。
 
多人接受答案了。
 
无所谓,没关系,s't'a'r't'c'n兄,不过这样结巴着念确实不好玩
 
后退
顶部