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