Re: [问题] 想知道连线时间差以及ping值

楼主: LaPass (LaPass)   2015-05-30 23:02:40
※ 引述《LaPass (LaPass)》之铭言:
: 我正在写有连线的程式
: 程式中需要得知
: 1. server跟client端的时间是否有差异
: 主要还是因为不一定每个人的电脑、手机都会去校正时间的关系
: 如果资料的时间错的话,会出问题
: 2. 需要知道ping值
: 有些网络游戏会会把那东西显示在萤幕的右上角或左上角
: 让使用者知道自己lag多久
: 呃.... 该不会是用
: Runtime.getRuntime().exec("ping xxxxxx");
: 然后把ping出来的数字显示出来吧?
: 请问该怎么抓到这些东西?
刚刚看了一下NTP的作法
http://ccnet.ntu.edu.tw/ntp/operate.html
简单来讲就是
纪录下时间T1,传个封包过去
对方收到封包,把自己的时间T2夹在封包内回传
收到封包,纪录下时间T3
(T3-T1)/2 = lag的时间
(T1+lag) - T2 = 两台电脑的时间差
至于 “lag有可能不会是固定值” 这点则被忽略了
在网络很顺的状况下,应该ok的
然后对时之后,ping值应该使用,在讯息封包内夹个时间传过去
看对方收到时延迟多少,就知道ping多少了
(应该会不准,不过够用了)
作者: Killercat (杀人猫™)   2015-05-30 23:08:00
lag不是固定值得话多丢几次刚好network panic的话就...等下次sync吧
作者: LPH66 (-6.2598534e+18f)   2015-05-31 00:49:00
T3-T1 就是 ping 值了吧...然后 T1+lag 我个人是会用 (T3+T1)/2 代替Y这个值也有个直观意义是在你的时间 (T3+T1)/2 时封包到对面所以它跟 T2 的差当然就是所求的时间差
楼主: LaPass (LaPass)   2015-05-31 08:25:00
tcp/ip 应该也能这样用才对
作者: fr3ak (fr3@K)   2015-05-31 13:39:00
原 po 也提过 NTP. NTP 不就专干这事? 好奇为什么需要另外的 solution?
楼主: LaPass (LaPass)   2015-05-31 18:49:00
因为... client是手机,我必须要确定系统时间没被调过。
作者: fr3ak (fr3@K)   2015-05-31 19:30:00
手机可以 NTP
作者: Killercat (杀人猫™)   2015-05-31 19:34:00
他想确定手机时间ntp没被使用者恶搞 关掉乱改等等这个其实自己钻个洞放个socket捞就好....
作者: fr3ak (fr3@K)   2015-05-31 19:56:00
应该有手机上可用的 NTP client 吧 (?)
作者: Killercat (杀人猫™)   2015-05-31 21:17:00
“所有”的NTP Client都需要root因为NTP Client基本功能就是改系统时间,没有任何作业系统做这件事情不用admin权限的 :P所以比较好的做法就是挖个洞捞时间response反正不能改,就叫使用者自己改...附带一提,需要admin权限是因为security,主要是避免奇怪的程式让凭证过期(或者明明过期了假装没过期)
楼主: LaPass (LaPass)   2015-05-31 22:40:00
对,就是这样

Links booklink

Contact Us: admin [ a t ] ucptt.com