※ 引述《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多少了
(應該會不准,不過夠用了)