高级玩家

- 贡献度
- 8
- 金元
- 4014
- 积分
- 433
- 精华
- 0
- 注册时间
- 2005-1-20
|
本帖最后由 Lejcey 于 2012-5-9 10:41 编辑
回复以上几个朋友,我的实现是这样的:
暗黑三的服务器是开放icmp协议的,也就是说,是可以ping的,因此使用的是windows api中IcmpSendEcho
DWORD IcmpSendEcho(
__in HANDLE IcmpHandle,
__in IPAddr DestinationAddress,
__in LPVOID RequestData,
__in WORD RequestSize,
__in_opt PIP_OPTION_INFORMATION RequestOptions,
__out LPVOID ReplyBuffer,
__in DWORD ReplySize,
__in DWORD Timeout
);
默认是向服务器发送32个字节,并等待服务器回应。
而国服星际2中的的服务器地址,是关闭ICMP端口的,ping是无用的,使用的是winsock2中的send,并向服务器的1119端口发送1个字节的数据。(怕发送太多的垃圾数据被封IP)
int send( __in SOCKET s, __in const char *buf, __in int len, __in int flags);
所以,任何方法都不是实际情况,也无法模拟实际情况,不可能准确!
实际情况不可能只发送几十个字节的数据,而是每时每刻都有大量数据传输,还涉及到多服务数据验证及加解密,以及服务器端的TCP队列等等,因此实际情况延迟会比测试结果大很多!
我做这个只是一时好玩而已,凯恩之角那个是对服务器ping 10次取平均值,因为道理一样,所以依然不可能准确。而短时间内太频繁的ping 服务器的防火墙功能可能会拒绝的。
|
|