如何保障android客戶端與伺服器時間同步,不受使用者更改系統時間的影響?
ntp原理如下:
device a傳送乙個ntp報文給device b,該報文帶有它離開device a時的時間戳,該時間戳為10:00:00am(t1)。
當此ntp報文到達device b時,device b加上自己的時間戳,該時間戳為11:00:01am(t2)。
當此ntp報文離開device b時,device b再加上自己的時間戳,該時間戳為11:00:02am(t3)。
當device a接收到該響應報文時,device a的本地時間為10:00:03am(t4)。
至此,device a已經擁有足夠的資訊來計算兩個重要的引數:
ntp報文的往返時延delay=(t4-t1)-(t3-t2)=2秒。
device a相對device b的時間差offset=((t2-t1)+(t3-t4))/2=1小時。
上述有幾個地方可能會影響結果的準確度:
額,看了上面的方法,發現實際應用比較麻煩,因為使用者隨時可能更改系統時間,不可能每次都去校準一次。
下面說乙個簡單的方法:
當然這裡肯定是有誤差的,主要是網路延遲帶來的誤差,對於時間精度要求不是很高的地方可以使用這個方法。因為elapsedrealtime 跟系統設定的時間無關,所以使用者更改系統時間也不會影響。
參考:android客戶端與伺服器時間同步
android中的systemclock類
伺服器與客戶端
建立socket操作,建立流式套接字,返回套接字型大小socksrv socket socket int af,int type,int protocol 第乙個引數,指定位址簇 tcp ip只能是af inet,也可寫成pf inet socket socksrv socket af inet,s...
客戶端與伺服器
cs與bs 軟體使用方式上的兩種劃分 c s client server pc客戶端與伺服器架構 特點 在伺服器當中就主要是乙個資料庫,把所有業務邏輯都交給客戶端來完成 優點 較為安全,使用者介面豐富,客戶體驗好 缺點 每次公升級都要重新安裝,針對不同的作業系統開發,可移植性差 b sbrowser...
伺服器與客戶端 client
include include include include include include include define serv port 9000 define buff size 1024 struct user void fillmsg struct user userinfo void...