作者LaPass (LaPass)
看板java
标题Re: [问题] 想知道连线时间差以及ping值
时间Sat May 30 23:02:40 2015
※ 引述《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多少了
(应该会不准,不过够用了)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.38.76.211
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1432998163.A.14F.html
1F:→ Killercat: lag不是固定值得话多丢几次 05/30 23:08
2F:→ Killercat: 刚好network panic的话就...等下次sync吧 05/30 23:08
3F:推 LPH66: T3-T1 就是 ping 值了吧... 05/31 00:49
4F:→ LPH66: 然後 T1+lag 我个人是会用 (T3+T1)/2 代替Y 05/31 00:49
5F:→ LPH66: 这个值也有个直观意义是在你的时间 (T3+T1)/2 时封包到对面 05/31 00:50
6F:→ LPH66: 所以它跟 T2 的差当然就是所求的时间差 05/31 00:52
7F:→ LaPass: tcp/ip 应该也能这样用才对 05/31 08:25
8F:推 fr3ak: 原 po 也提过 NTP. NTP 不就专干这事? 好奇为什麽需要另外 05/31 13:39
9F:→ fr3ak: 的 solution? 05/31 13:39
10F:→ LaPass: 因为... client是手机,我必须要确定系统时间没被调过。 05/31 18:49
11F:→ fr3ak: 手机可以 NTP 05/31 19:30
12F:→ Killercat: 他想确定手机时间ntp没被使用者恶搞 关掉乱改等等 05/31 19:34
13F:→ Killercat: 这个其实自己钻个洞放个socket捞就好.... 05/31 19:34
14F:→ fr3ak: 应该有手机上可用的 NTP client 吧 (?) 05/31 19:56
15F:→ Killercat: 「所有」的NTP Client都需要root 05/31 21:17
16F:→ Killercat: 因为NTP Client基本功能就是改系统时间,没有任何作业 05/31 21:17
17F:→ Killercat: 系统做这件事情不用admin权限的 :P 05/31 21:17
18F:→ Killercat: 所以比较好的做法就是挖个洞捞时间response 05/31 21:17
19F:→ Killercat: 反正不能改,就叫使用者自己改... 05/31 21:17
20F:→ Killercat: 附带一提,需要admin权限是因为security,主要是避免 05/31 21:20
21F:→ Killercat: 奇怪的程式让凭证过期(或者明明过期了假装没过期) 05/31 21:20
22F:→ LaPass: 对,就是这样 05/31 22:40