请问各位大虾,客户端如何得到这个延迟时间 ( 积分: 100 )

  • 主题发起人 主题发起人 rainbar
  • 开始时间 开始时间
R

rainbar

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,在玩游戏的时候,很多游戏客户端都有显示网络延迟的功能,我想问一下在DELPHI中如何得到客户端连接到服务器特定端口的网络延迟时间啊?
200776151188282.jpg
 
啊?没有人回答我吗?
哪位大虾能不能给个代码啊?
 
知道 ping 吗? 建立用 raw_sock 写吧.
 
游戏服务器都是自己写的,这还不简单,发个特定的数据包,同时记下发包时间,然后收到该特定包的回复后,即可算出来回所花的时间了啊。
 
頂。。。。。
 
to:iceapi
用raw_sock写?我不会啊,能不能给个源码啊?

to:ufo!
因为我刚才开始学习DELPHI,对这方面还不是太了解,能不能给个简单的代码什么的?

我用了一个FUNCTION
代码:
function TFormMain.IdIcmpPing(SvrIP: string;SvrPingPort: Integer):string;
begin
  idIcmpSvr.Host := SvrIP;
  idIcmpSvr.Port := SvrPingPort;
  idIcmpSvr.BufferSize := 0;
  idIcmpSvr.ReceiveTimeout := 100;
  idIcmpSvr.Ping;
  Application.ProcessMessages;
  Result := IntToStr(idIcmpSvr.ReplyStatus.MsRoundTripTime);
end;

然后再读出服务器的IP地址后调用:
代码:
....
          SvrIP :=  lblItem[i][1];
          SvrPingPort :=StrToInt(lblItem[i][3]);
          Caption := IdIcmpPing(SvrIP,SvrPingPort);
....

但是得到的结果很令人失望。随着 idIcmpSvr.ReceiveTimeout := 100; 这里的值不同,得到的结果都是不同的。如果这里是100的话,那最后的结果都在140左右,如果改成1000的话,那得到的结果都是在1140左右。怎么会这样呢?
 
哪位大虾能不能帮一下忙啊?
 
还是没人回答吗?急啊,请大虾们帮帮忙啊!
 
后退
顶部