專利名稱:局域網(wǎng)通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)技術(shù),特別涉及局域網(wǎng)上客戶端和服務(wù)器建立聯(lián)系的方法。
背景技術(shù):
在局域網(wǎng)上,客戶端要與服務(wù)器進(jìn)行通信,以實(shí)現(xiàn)客戶端對(duì)服務(wù)器的控制,首先需要建立客戶端與服務(wù)器的通信聯(lián)系。這方面的一個(gè)典型例子是硬盤(pán)錄像機(jī)(DVR)在網(wǎng)絡(luò)上的運(yùn)用。一般的應(yīng)用中,DVR主機(jī)(服務(wù)器)安置在現(xiàn)場(chǎng)前端,無(wú)需工作人員值守,如煤礦井底、銀行、收費(fèi)站點(diǎn)等。工作人員可通過(guò)遠(yuǎn)端的PC機(jī)(客戶端)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,對(duì)所有DVR主機(jī)進(jìn)行統(tǒng)一管理。也可對(duì)單個(gè)DVR主機(jī)進(jìn)行單獨(dú)控制,如控制攝像頭的上下、左右、遠(yuǎn)近以及變焦等操作,還可以對(duì)服務(wù)器的DVR進(jìn)行各種錄像模式設(shè)置,報(bào)警設(shè)置,網(wǎng)絡(luò)設(shè)置等。所有以上的遠(yuǎn)程操作都是利用現(xiàn)有的網(wǎng)絡(luò)技術(shù)實(shí)現(xiàn)的。一般情況下,客戶端訪問(wèn)DVR主機(jī),都是在預(yù)先知道DVR主機(jī)的IP地址和相應(yīng)的端口號(hào),然后主動(dòng)發(fā)出連接請(qǐng)求,這樣兩端就建立起了連接,進(jìn)行相關(guān)的網(wǎng)絡(luò)操作,如發(fā)送控制、發(fā)送文件等。由于DVR主機(jī)的狀態(tài)是不可預(yù)知的,如果客戶端要訪問(wèn)的DVR主機(jī)不在線或中途死機(jī)了,就會(huì)發(fā)生連接失敗的故障。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題,就是提供一種可以動(dòng)態(tài)地查詢網(wǎng)絡(luò)內(nèi)所有滿足條件的服務(wù)器的方法,以便建立客戶端和服務(wù)器的通信聯(lián)系。
本發(fā)明解決所述技術(shù)問(wèn)題,采用的技術(shù)方案是,局域網(wǎng)通信方法,包括建立客戶端和服務(wù)器的連接;其特征在于,客戶端和服務(wù)器的連接步驟如下 a.客戶端向局域網(wǎng)廣播發(fā)送帶有服務(wù)器ID的IP包; b.網(wǎng)絡(luò)中的服務(wù)器收到所述IP包后進(jìn)行解析,具有所述ID的服務(wù)器響應(yīng)此IP包,并返回包含本機(jī)IP地址和端口號(hào)的信息;其它服務(wù)器則不作任何響應(yīng),丟棄此包; c.客戶端發(fā)送完IP包后,接著創(chuàng)建一個(gè)線程,用來(lái)專門(mén)負(fù)責(zé)接收網(wǎng)絡(luò)上服務(wù)器的響應(yīng)信息; d.客戶端讀取響應(yīng)信息后,再創(chuàng)建一個(gè)線程接收下一個(gè)服務(wù)器的響應(yīng)信息; f.客戶端將接收的響應(yīng)信息加入本地管理列表。
本發(fā)明的有益效果是,查找服務(wù)器方便、快捷,可以通過(guò)自動(dòng)搜索知道哪些服務(wù)器已經(jīng)在線,運(yùn)行情況等。
具體實(shí)施例方式 以下結(jié)合實(shí)施例,詳細(xì)描述本發(fā)明的技術(shù)方案。
本發(fā)明的技術(shù)方案是,局域網(wǎng)通信方法,包括建立客戶端和服務(wù)器的連接;其特征在于,客戶端和服務(wù)器的連接步驟如下 a.客戶端向局域網(wǎng)廣播發(fā)送帶有服務(wù)器ID的IP包; b.網(wǎng)絡(luò)中的服務(wù)器收到所述IP包后進(jìn)行解析,具有所述ID的服務(wù)器響應(yīng)此IP包,并返回包含本機(jī)IP地址和端口號(hào)的信息;其它服務(wù)器則不作任何響應(yīng),丟棄此包; c.客戶端發(fā)送完IP包后,接著創(chuàng)建一個(gè)線程,用來(lái)專門(mén)負(fù)責(zé)接收網(wǎng)絡(luò)上服務(wù)器的響應(yīng)信息; d.客戶端讀取響應(yīng)信息后,再創(chuàng)建一個(gè)線程接收下一個(gè)服務(wù)器的響應(yīng)信息; f.客戶端將接收的響應(yīng)信息加入本地管理列表; 具體的是,步驟a中,所述IP包包含搜索服務(wù)器的相關(guān)語(yǔ)句; 進(jìn)一步的是,所述步驟a中,客戶端向局域網(wǎng)廣播發(fā)送2次IP包; 更具體的是,所述步驟c中,客戶端是在消息處理函數(shù)中,利用select阻塞機(jī)制對(duì)接收緩沖區(qū)進(jìn)行監(jiān)聽(tīng)來(lái)接收服務(wù)器的響應(yīng)信息的; 特別地,所述服務(wù)器為DVR主機(jī)。
實(shí)施例 下面以局域網(wǎng)中,客戶端對(duì)DVR主機(jī)的控制,描述本發(fā)明的技術(shù)方案。
作為局域網(wǎng)內(nèi)的DVR主機(jī),都具有其身份識(shí)別標(biāo)識(shí)(DVR主機(jī)的ID)??蛻舳讼认蚓钟蚓W(wǎng)上廣播發(fā)送一個(gè)帶有特定識(shí)別標(biāo)識(shí)的IP包,考慮到UDP協(xié)議的不可靠性,客戶端要發(fā)送兩次IP包。
網(wǎng)絡(luò)中的所有的DVR主機(jī),收到客戶端發(fā)送的IP包后,通過(guò)解析IP包,取其內(nèi)容比較,如果具有上述識(shí)別標(biāo)識(shí)的DVR主機(jī)收到所述IP包,就響應(yīng)此IP包,并向客戶端返回包含本機(jī)IP地址和端口號(hào)的信息。
客戶端接收到返回的響應(yīng)信息后,就知道了此DVR主機(jī)的IP地址和端口號(hào)等信息了,將這些信息添加到本機(jī)的DVR主機(jī)列表中,連接建立完成。而其它非DVR主機(jī)接收到所述IP包,不作任何響應(yīng),丟棄此IP包。
客戶端發(fā)送完廣播包后,接著創(chuàng)建一個(gè)線程,用來(lái)專門(mén)負(fù)責(zé)接收網(wǎng)絡(luò)上DVR主機(jī)對(duì)客戶端的響應(yīng)信息??蛻舳嗽谙⑻幚砗瘮?shù)(BroadcastThread)中,利用select阻塞機(jī)制來(lái)對(duì)接收緩沖區(qū)進(jìn)行監(jiān)聽(tīng),一旦發(fā)現(xiàn)接收緩沖區(qū)內(nèi)有內(nèi)容(在這里即為有DVR主機(jī)的響應(yīng)信息),立即讀取內(nèi)容。然后再創(chuàng)建一個(gè)線程進(jìn)行接收下一個(gè)DVR的響應(yīng)消息。接收完成,將DVR主機(jī)返回的IP地址及端口號(hào)等信息,加入本地管理信息列表,連接建立過(guò)程結(jié)束。
本例部分代碼如下(DVR主機(jī)的識(shí)別標(biāo)識(shí)為CHDVR) 客戶端自動(dòng)搜索DVR的廣播發(fā)送程序 void CSearchDVR::OnRefresh() { char buffer[50]; //定義發(fā)送緩沖區(qū) int i=0; LOOP(i, SERVER_MAXSIZE)m_arrayPort[i]=0;//SERVER_MAXSIZE=5,自定義最大的DVR數(shù)量。<!-- SIPO <DP n="3"> --><dp n="d3"/> memset(buffer,0,50); //清空緩沖區(qū) strcpy(buffer,"CHDVR"); //發(fā)送DVR主機(jī)識(shí)別的消息命令碼CHDVR int nRet=sendto(m_hBroadcastSocket,buffer,50,0,(structsockaddr*)&sockBroadcast,sizeof(sockBroadcast)); //向廣播地址sockBroadcast發(fā)送“CHDVR” HANDLE handle=NULL; //定義線程的句柄 if((handle=AfxBeginThread((AFX_THREADPROC)&BroadcastThread,(LPVOID)this))!=NULL)//創(chuàng)建線程,用來(lái)接收DVR發(fā)送過(guò)來(lái)的響應(yīng)消息。 CloseHandle(handle); } 客戶端廣播接收的線程處理 UINT BroadcastThread(LPVOID lpVoid) { CSearchDVR*pDlg=(CSearchDVR*)lpVoid; ASSERT(pDlg->m_hWnd); char buffer[50]; //定義接收緩沖區(qū) int nRet=0; TIMEVAL tv; //定義阻塞最大時(shí)間,時(shí)間到達(dá)后,就取消<br/>阻塞?! ? tv.tv_sec=2; tv.tv_usec=0; fd_set rfds; FD_ZERO(&rfds); FD_SET(pDlg->m_hBroadcastSocket,&rfds); int length=sizeof(sockaddr_in); if(select((pDlg->m_hBroadcastSocket)+1,&rfds,NULL,NULL,<!-- SIPO <DP n="4"> --><dp n="d4"/>&tv)) //select用來(lái)阻塞程序,直到有DVR發(fā)送過(guò)來(lái)響應(yīng)消息,自動(dòng)<br/>喚醒?! memset(buffer,0,50); //清空接收緩沖區(qū) nRet=recvfrom(pDlg->m_hBroadcastSocket,buffer,50,0,(sockaddr*)&(pDlg->sockFrom),&length); //接收DVR響應(yīng)消息。其中sockFrom中包含有主機(jī)DVR的IP和端口信息,這是我們目的所在?! f(nRet>0) { if(buffer
!=′0′) pDlg->m_arrayPort[g_nServerCounter++]=atoi(buffer); pDlg->AddDvrIp(); //把找到的一個(gè)DVR IP添加到對(duì)應(yīng)的列表中,進(jìn)行管理?! HANDLE handle=NULL; If((handle=AfxBeginThread((AFX_THREADPROC)&BroadcastThread,(LPVOID)pDlg))!=NULL) //繼續(xù)創(chuàng)建一個(gè)線程來(lái)接收下一個(gè)DVR的響應(yīng)?! ? CloseHandle(handle); } return 1;} 本發(fā)明可以集成在DVR主機(jī)中,也可用于其它嵌入式產(chǎn)品服務(wù)器端和客戶端的通信。
權(quán)利要求
1.局域網(wǎng)通信方法,包括建立客戶端和服務(wù)器的連接;其特征在于,客戶端和服務(wù)器的連接步驟如下
a.客戶端向局域網(wǎng)廣播發(fā)送帶有服務(wù)器ID的IP包;
b.網(wǎng)絡(luò)中的服務(wù)器收到所述IP包后進(jìn)行解析,具有所述ID的服務(wù)器響應(yīng)此IP包,并返回包含本機(jī)IP地址和端口號(hào)的信息;其它服務(wù)器則不作任何響應(yīng),丟棄此包;
c.客戶端發(fā)送完IP包后,接著創(chuàng)建一個(gè)線程,用來(lái)專門(mén)負(fù)責(zé)接收網(wǎng)絡(luò)上服務(wù)器的響應(yīng)信息;
d.客戶端讀取響應(yīng)信息后,再創(chuàng)建一個(gè)線程接收下一個(gè)服務(wù)器的響應(yīng)信息;
f.客戶端將接收的響應(yīng)信息加入本地管理列表。
2.根據(jù)權(quán)利要求1所述的局域網(wǎng)通信方法,其特征在于,步驟a中,所述IP包包含搜索服務(wù)器的相關(guān)語(yǔ)句。
3.根據(jù)權(quán)利要求1所述的局域網(wǎng)通信方法,其特征在于,所述步驟a中,客戶端向局域網(wǎng)廣播發(fā)送2次IP包。
4.根據(jù)權(quán)利要求1所述的局域網(wǎng)通信方法,其特征在于,所述步驟c中,客戶端是在消息處理函數(shù)中,利用select阻塞機(jī)制對(duì)接收緩沖區(qū)進(jìn)行監(jiān)聽(tīng)來(lái)接收服務(wù)器的響應(yīng)信息的。
5.根據(jù)權(quán)利要求1、2、3或4所述的局域網(wǎng)通信方法,其特征在于,所述服務(wù)器為DVR主機(jī)。
全文摘要
本發(fā)明涉及網(wǎng)絡(luò)技術(shù),特別涉及局域網(wǎng)上客戶端和服務(wù)器建立聯(lián)系的方法。本發(fā)明提供了一種可以動(dòng)態(tài)地查詢網(wǎng)絡(luò)內(nèi)所有滿足條件的服務(wù)器的方法,以便建立客戶端和服務(wù)器的通信聯(lián)系。本發(fā)明的技術(shù)方案是,客戶端根據(jù)服務(wù)器的標(biāo)識(shí)信息,發(fā)送廣播。當(dāng)需要連接時(shí),客戶端向具有特定標(biāo)識(shí)的服務(wù)器發(fā)出連接請(qǐng)求,具有對(duì)應(yīng)標(biāo)識(shí)的服務(wù)器收到請(qǐng)求后,向客戶端返回其IP地址、端口號(hào)等信息,客戶端據(jù)此建立與該服務(wù)器的聯(lián)系。本發(fā)明的有益效果是,查找服務(wù)器方便、快捷,可以通過(guò)自動(dòng)搜索知道哪些服務(wù)器已經(jīng)在線,運(yùn)行情況等。
文檔編號(hào)H04L12/28GK1929418SQ20061002187
公開(kāi)日2007年3月14日 申請(qǐng)日期2006年9月15日 優(yōu)先權(quán)日2006年9月15日
發(fā)明者楊毅, 尤金剛, 彭世偉 申請(qǐng)人:四川長(zhǎng)虹電器股份有限公司