作者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/m.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