摘要:本文闡述了在歐視邁(OZEAM)全數(shù)字可視對講系統(tǒng)中進(jìn)行internet校時的必要性和實現(xiàn)途徑
關(guān)鍵詞:internet校時全數(shù)字可視對講系統(tǒng)歐視邁OZEAMRFC-868
Abstract:Thispaperexplainedthenecessityandtheimplementationtosynchronizethesystemclockoftheoutdoorunitandtheindooruintinthedigitalvideointercomsystem(brand:OZEAM)usinganNTP(networktimeprotocol)server.
Keywords:timesynchronizing,NTP(networktimeprotocol),digitalvideointercomsystem,OZEAM.
1.全數(shù)字可視對講系統(tǒng)校時的現(xiàn)狀
目前全數(shù)字可視對講系統(tǒng)主要通過以下方法進(jìn)行校時:
(1)在安裝有管理中心的情況下,管理中心充當(dāng)時間服務(wù)器,門口機和室內(nèi)機與管理中心通訊,獲取當(dāng)前時間來設(shè)置本機時間。
(2)在沒有安裝管理中心的情況下,只能在門口機和室內(nèi)機上手動設(shè)置本機時間。但一旦斷電,又恢復(fù)到初始時間。這給用戶帶來不便,特別是單家獨戶的別墅用戶,一般是不可能安裝管理中心的。
沒有安裝管理中心但全數(shù)字可視對講門口機和室內(nèi)機已連接互聯(lián)網(wǎng),能不能通過互聯(lián)網(wǎng)進(jìn)行自動校時?答案是肯定的。
2.RFC-868時間協(xié)議
本RFC規(guī)范了一個ARPAInternetcommunity上的標(biāo)準(zhǔn)。在ARPAInternet上的所有主機應(yīng)當(dāng)采用和實現(xiàn)這個標(biāo)準(zhǔn)。
此協(xié)議提供了一個獨立于站點的,機器可讀的日期和時間信息。時間服務(wù)返回的是以秒數(shù),是從1900年1月1日午夜到現(xiàn)在的秒數(shù)。
設(shè)計這個協(xié)議的一個重要目的在于,網(wǎng)絡(luò)上的許多主機并沒有時間的觀念,在分布式的系統(tǒng)上,我們可以想一想,北京的時間和東京的時間如何分呢?主機的時間往往可以人為改變,而且因為機器時鐘內(nèi)的誤差而變得不一致,因此需要使用時間服務(wù)器通過選舉方式得到網(wǎng)絡(luò)時間,讓服務(wù)器有一個準(zhǔn)確的時間觀念。不要小看時間,這對于一些以時間為標(biāo)準(zhǔn)的分布運行的程序簡單是太重要了。
這個協(xié)議可以工作在TCP和UDP協(xié)議下。下面是通過TCP協(xié)議工作的時間協(xié)議的工作過程:這里S代表服務(wù)器,C代表客戶。
S:檢測端口37
U:連接到端口37
S:以32位二進(jìn)制數(shù)發(fā)送時間
U:接收時間
U:關(guān)閉連接
S:關(guān)閉連接
服務(wù)器在端口37上監(jiān)聽連接。當(dāng)連接建立后,服務(wù)器返回一個32位的時間值,然后關(guān)閉連接。這個過程也不難,如果服務(wù)器不能決定現(xiàn)在是什么時間,服務(wù)器會拒絕連接或不發(fā)送任何數(shù)據(jù)而直接關(guān)閉連接。
下面我們看看使用UDP協(xié)議的情況:這里S代表服務(wù)器,C代表客戶。
S:檢測端口37
U:發(fā)送一個空數(shù)據(jù)報到端口37
S:接收這個空數(shù)據(jù)報
S:發(fā)送包含32位二進(jìn)制數(shù)(用于表示時間)的數(shù)據(jù)報
U:接收時間數(shù)據(jù)報
服務(wù)器在端口37上監(jiān)聽數(shù)據(jù)包。當(dāng)一個數(shù)據(jù)包來后,服務(wù)器返回一個包含32位的時間的數(shù)據(jù)包。這個過程也不難,如果服務(wù)器不能決定現(xiàn)在是什么時間,服務(wù)器會拋棄接收到的數(shù)據(jù)報而不作出任何應(yīng)答。
*時間
時間是由32位表示的,是自1900年1月1日0時到當(dāng)前的秒數(shù),我們可以計算一下,這個協(xié)議只能表示到2036年就不能用了。(但是我們也知道計算機發(fā)展速度這么快,可能到時候就會有更好的協(xié)議代替這個協(xié)議,或者有已經(jīng)想出有效的解決辦法了。)
下面是些例子:
thetime2,208,988,800correspondsto00:001Jan1970GMT,
2,398,291,200correspondsto00:001Jan1976GMT,
2,524,521,600correspondsto00:001Jan1980GMT,
2,629,584,000correspondsto00:001May1983GMT,
以及-1,297,728,000correspondsto00:0017Nov1858GMT.
3.Internet校時的程序?qū)崿F(xiàn)
下面是使用TCP協(xié)議的實現(xiàn)Internet校時的部分代碼。
voidtime_internet_to_local(void*recv_buf)//接到的數(shù)據(jù)轉(zhuǎn)換為本地時間
{
assert(recv_buf);
charp[4],*precv=((char*)recv_buf)+3;
for(inti=0;i<4;i++)< p="">
p[i]=*precv--;
*(long*)p-=2208988800;
SYSTEMTIMEst;
tm*ptm=gmtime((time_t*)p);
st.wYear=ptm->tm_year+1900;
st.wMonth=ptm->tm_mon+1;
st.wDay=ptm->tm_mday;
st.wHour=ptm->tm_hour;
st.wMinute=ptm->tm_min;
st.wSecond=ptm->tm_sec;
st.wMilliseconds=0;
SetSystemTime(&st);
}
BOOLGetTimeFromServer(DWORD*lpdwTime)//TCP方式
{
*lpdwTime=0;
BOOLbReturn=FALSE;
SOCKETsSock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET!=sSock)
{
structsockaddr_insin;
memcpy(&sin.sin_addr,&NISTSVRSARY[choice].addr,sizeof(in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(IPPORT_TIMESERVER);
wprintf(L"\n...waitingtolink...\n");
if(0!=connect(sSock,(structsockaddr*)&sin,sizeof(structsockaddr_in)))
{
wprintf(L"Linked.Receivingdata...\n");
intiResult;
iResult=recv(sSock,(char*)lpdwTime,4,0);
if(iResult==4)
{
*lpdwTime=ntohl(*lpdwTime);
bReturn=TRUE;
}
else
{
wprintf(L"Failtogettime!iResult=%d\n",iResult);
}
}else
wprintf(L"Failtolink,overtime!\n");
closesocket(sSock);
}
returnbReturn;
}
4.結(jié)束語
程序在EVC4.0編寫調(diào)試正確,并在WinCE5.0下運行正確。只要門口機或室內(nèi)機連接Internet,則自動進(jìn)行校時,無需手動設(shè)置,也無需安裝管理中心。
Internet自動校時為歐視邁(OZEAM)全數(shù)字可視對講系統(tǒng)增色不少。
全數(shù)字可視對講系統(tǒng)
類數(shù)字可視對講系統(tǒng)
電梯控制系統(tǒng)
雙向可視對講求助系統(tǒng)
智能家居系統(tǒng)
聲波云門禁系統(tǒng)
4000-020-230