本發(fā)明涉及通信領(lǐng)域,尤其涉及一種設(shè)備的發(fā)現(xiàn)方法和裝置。
背景技術(shù):
現(xiàn)有技術(shù)中設(shè)備發(fā)現(xiàn)功能一般依賴于第三方軟件DLNA(Digital Living Network Alliance,數(shù)字生活網(wǎng)絡(luò)聯(lián)盟)的UPnP(Universal Plug and Play,通用即插即用協(xié)議)。DLNA是一個(gè)由消費(fèi)性電子、移動(dòng)電話以及電腦廠商組成的聯(lián)盟組織。使用DLNA有很多的限制,比如DLNA規(guī)定了所使用的網(wǎng)絡(luò)協(xié)議,必須支持IPv4,規(guī)定了所有DLNA設(shè)備都必須支持使用HTTP協(xié)議進(jìn)行媒體的傳輸?shù)?,因此使用DLNA有很多的局限。
由于現(xiàn)有技術(shù)中設(shè)備發(fā)現(xiàn)功能一般依賴于第三方軟件DLNA,當(dāng)被依賴的軟件DLNA不存在或者發(fā)生變化時(shí),發(fā)現(xiàn)設(shè)備功能就無(wú)法實(shí)現(xiàn),所以依賴于DLNA發(fā)現(xiàn)設(shè)備就不可避免地產(chǎn)生軟件耦合。軟件耦合是指兩個(gè)或兩個(gè)以上的軟件相互依賴于對(duì)方的一個(gè)量度。此外,由于第三方軟件帶來(lái)的一些副作用也難以避免,比如DLNA是通過(guò)有線網(wǎng)絡(luò)或者無(wú)線網(wǎng)絡(luò)連接的,對(duì)網(wǎng)絡(luò)會(huì)有延遲;并且DLNA發(fā)現(xiàn)設(shè)備的流程復(fù)雜,這都會(huì)導(dǎo)致發(fā)現(xiàn)設(shè)備的速度不快。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提出一種設(shè)備的發(fā)現(xiàn)方法和裝置,旨在實(shí)現(xiàn)跳過(guò)DLNA復(fù)雜的流程發(fā)現(xiàn)設(shè)備,加快發(fā)現(xiàn)設(shè)備的速度。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種設(shè)備的發(fā)現(xiàn)方法,所述方法包括如下步驟:
當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包;
判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包;
若是,則當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得所述待連接終端的信息;
根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。
可選地,所述當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息的步驟之后包括:
啟動(dòng)心跳線程,獲得網(wǎng)絡(luò)中的心跳包;
所述根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表的步驟包括:
根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息;
根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。
可選地,所述根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息的步驟包括:
獲取網(wǎng)絡(luò)中的心跳包;
解析所述心跳包,獲得發(fā)送所述心跳包的設(shè)備標(biāo)識(shí);
根據(jù)獲得的設(shè)備標(biāo)識(shí)和待連接終端的信息確定待連接設(shè)備的在線信息。
可選地,所述方法還包括:
與可連接設(shè)備列表中的設(shè)備建立用戶數(shù)據(jù)協(xié)議連接。
可選地,所述自定義數(shù)據(jù)包包括設(shè)備IP地址和ID。
此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種設(shè)備的發(fā)現(xiàn)裝置,其特征在于,所述裝置包括:
監(jiān)聽(tīng)模塊,用于當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包;
判斷模塊,用于判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包;
解析模塊,用于若是,則當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息;
更新模塊,用于根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。
可選地,所述裝置還包括:
獲得模塊,用于啟動(dòng)心跳線程,獲得網(wǎng)絡(luò)中的心跳包;
所述更新模塊包括:
確定單元,用于根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息;
更新單元,用于根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。
可選地,所述確定單元包括:
獲取子單元,獲取網(wǎng)絡(luò)中的心跳包;
解析子單元,用于解析所述心跳包,獲得發(fā)送所述心跳包的設(shè)備標(biāo)識(shí);
確定子單元,用于根據(jù)獲得的設(shè)備標(biāo)識(shí)和待連接終端的信息確定待連接設(shè)備的在線信息。
可選地,所述裝置還包括:
連接模塊,用于與可連接設(shè)備列表中的設(shè)備建立用戶數(shù)據(jù)協(xié)議連接。
可選地,所述自定義數(shù)據(jù)包包括設(shè)備IP地址和ID。
本發(fā)明通過(guò)當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包;判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包;若是,則當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息;根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。通過(guò)上述方式,本發(fā)明通過(guò)當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包,判斷監(jiān)聽(tīng)到的是否是待連接設(shè)備發(fā)送的自定義數(shù)據(jù)包,然后根據(jù)監(jiān)聽(tīng)到的自定義數(shù)據(jù)包實(shí)現(xiàn)對(duì)待連接終端的發(fā)現(xiàn),不需要依賴于第三方軟件DLNA,因此不會(huì)產(chǎn)生使用第三方軟件帶來(lái)的軟件耦合的問(wèn)題,跳過(guò)了DLNA發(fā)現(xiàn)設(shè)備的復(fù)雜流程,發(fā)現(xiàn)流程也相對(duì)簡(jiǎn)單,并且能夠加快設(shè)備發(fā)現(xiàn)的速度。
附圖說(shuō)明
圖1為本發(fā)明設(shè)備的發(fā)現(xiàn)方法第一實(shí)施例的流程示意圖;
圖2為本發(fā)明設(shè)備的發(fā)現(xiàn)方法第二實(shí)施例的流程示意圖;
圖3為本發(fā)明實(shí)施例中根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息的細(xì)化流程示意圖;
圖4為本發(fā)明設(shè)備的發(fā)現(xiàn)方法第三實(shí)施例的流程示意圖;
圖5為本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第一實(shí)施例的功能模塊示意圖;
圖6為本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第二實(shí)施例的功能模塊示意圖;
圖7為本發(fā)明實(shí)施例中確定單元的細(xì)化功能示意圖;
圖8為本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第三實(shí)施例的流程示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種設(shè)備的發(fā)現(xiàn)方法。
參照?qǐng)D1,圖1為本發(fā)明設(shè)備的發(fā)現(xiàn)方法第一實(shí)施例的流程示意圖。
本發(fā)明設(shè)備發(fā)現(xiàn)的方法包括如下步驟:
步驟S100,當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包。
為保證本發(fā)明能夠正常實(shí)施,本發(fā)明中各個(gè)設(shè)備需要在同一網(wǎng)絡(luò)中,因此可以事先建立局域網(wǎng),當(dāng)然也可以采用廣域網(wǎng),即各個(gè)設(shè)備可以通過(guò)廣域網(wǎng)進(jìn)行通信。具體地,各個(gè)設(shè)備可以通過(guò)TCP/IP基礎(chǔ)協(xié)議進(jìn)行通信,具體實(shí)施中也可以通過(guò)其他的協(xié)議進(jìn)行通信,比如采用NetBEUI協(xié)議。
在使用過(guò)程中,用戶可以將當(dāng)前終端上電開(kāi)機(jī),然后接入事先建立好的網(wǎng)絡(luò),網(wǎng)絡(luò)中預(yù)先設(shè)置為可以相互發(fā)現(xiàn)的設(shè)備可以向網(wǎng)絡(luò)中發(fā)送自定義數(shù)據(jù)包,當(dāng)然網(wǎng)絡(luò)中的各個(gè)設(shè)備也可以相互發(fā)送自定義數(shù)據(jù)包;在將當(dāng)前終端上電開(kāi)機(jī),并接入事先建立好的網(wǎng)絡(luò)后,用戶可以通過(guò)當(dāng)前終端或當(dāng)前終端自動(dòng)向網(wǎng)絡(luò)中發(fā)送自定義數(shù)據(jù)包。所述自定義數(shù)據(jù)包攜帶了當(dāng)前終端的描述信息。描述信息至少包括該設(shè)備IP地址和設(shè)備唯一ID,具體實(shí)施中除了包括設(shè)備IP地址和ID之外,還可以包括端口號(hào)、軟件版本、硬件版本和設(shè)備類型中的至少一種。本實(shí)施例中描述信息中包括該設(shè)備IP地址、設(shè)備唯一ID、端口號(hào)、軟件版本、硬件版本和設(shè)備類型,其自定義數(shù)據(jù)包詳細(xì)數(shù)據(jù)結(jié)構(gòu)如下:
{
unsigned char[128]ipaddr,
unsigned int port,
unsigned int device_type,
unsigned char[128]device_id,
unsigned char[128]software_version,
unsigned char[128]hardware_version,
}
在將當(dāng)前終端上電開(kāi)機(jī),并接入事先建立好的網(wǎng)絡(luò)后,當(dāng)前終端同時(shí)監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)中的數(shù)據(jù)包。當(dāng)前終端可以是可以相互發(fā)現(xiàn)的設(shè)備中的任何一個(gè)。
在本實(shí)施例中,所述終端包括手機(jī)、PAD、電視、電腦等可以向計(jì)算機(jī)輸入程序和數(shù)據(jù)或接收計(jì)算機(jī)輸出處理結(jié)果的設(shè)備。
步驟S200,判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包。
在監(jiān)聽(tīng)到數(shù)據(jù)包時(shí),可以對(duì)監(jiān)聽(tīng)到的數(shù)據(jù)包進(jìn)行判斷,判斷監(jiān)聽(tīng)到的數(shù)據(jù)包是否是自定義數(shù)據(jù)包。
具體地,通過(guò)自定義數(shù)據(jù)包的名稱或者標(biāo)識(shí)位判斷監(jiān)聽(tīng)到的數(shù)據(jù)包是否是自定義數(shù)據(jù)包;若監(jiān)聽(tīng)到的數(shù)據(jù)包里含有名稱和標(biāo)識(shí)位中的至少一種,則該數(shù)據(jù)包為自定義數(shù)據(jù)包。
步驟S300,若是,則當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息。
在當(dāng)前終端獲取到其他設(shè)備發(fā)送的自定義數(shù)據(jù)包后,當(dāng)前終端解析獲取到的自定義數(shù)據(jù)包,從而獲得其他終端信息。具體地,本實(shí)施例中對(duì)獲得的自定義數(shù)據(jù)包進(jìn)行解析,獲得待連接終端的設(shè)備IP地址和設(shè)備唯一ID。
具體實(shí)施中根據(jù)自定義數(shù)據(jù)包包括的內(nèi)容不同,獲得其他終端信息也會(huì)不同,比如如果自定義數(shù)據(jù)包包括該設(shè)備IP地址、設(shè)備唯一ID、端口號(hào)、軟件版本、硬件版本和設(shè)備類型,則解析獲得其他設(shè)備的IP地址、設(shè)備唯一ID、端口號(hào)、軟件版本、硬件版本和設(shè)備類型。
步驟S400,根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。
本實(shí)施例中還事先建立有一個(gè)設(shè)備列表,此列表的作用為記錄可連接的設(shè)備,包括可連接的設(shè)備的標(biāo)識(shí)信息,比如設(shè)備ID等。具體實(shí)施中還可以包括設(shè)備IP地址等。
具體地,本實(shí)施例中設(shè)備列表可以為一個(gè)可實(shí)時(shí)更新的列表,具體實(shí)施中設(shè)備列表還可以為一個(gè)定時(shí)更新的列表。本實(shí)施例在網(wǎng)絡(luò)中發(fā)現(xiàn)設(shè)備時(shí),將該設(shè)備的信息反饋到列表中,在列表中記錄設(shè)備的信息,記錄完之后,對(duì)可連接設(shè)備列表進(jìn)行更新。
本實(shí)施例中通過(guò)當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包;判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包;若是,則當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息;根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。通過(guò)上述方式,本實(shí)施例通過(guò)當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包,判斷監(jiān)聽(tīng)到的是否是待連接設(shè)備發(fā)送的自定義數(shù)據(jù)包,然后根據(jù)監(jiān)聽(tīng)到的自定義數(shù)據(jù)包實(shí)現(xiàn)對(duì)待連接終端的發(fā)現(xiàn),不需要依賴于第三方軟件DLNA,因此不會(huì)產(chǎn)生使用第三方軟件帶來(lái)的軟件耦合的問(wèn)題,跳過(guò)了DLNA發(fā)現(xiàn)設(shè)備的復(fù)雜流程,發(fā)現(xiàn)流程也相對(duì)簡(jiǎn)單,并且能夠加快設(shè)備發(fā)現(xiàn)的速度。
進(jìn)一步地,參照?qǐng)D2,圖2為本發(fā)明設(shè)備的發(fā)現(xiàn)方法第二實(shí)施例的流程示意圖。
基于本發(fā)明設(shè)備的發(fā)現(xiàn)方法第一實(shí)施例,步驟S300之后的步驟可以包括:
S500,啟動(dòng)心跳線程,獲得網(wǎng)絡(luò)中的心跳包。
基于本發(fā)明設(shè)備發(fā)現(xiàn)的方法第一實(shí)施例,步驟S400可以包括:
S410,根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息;
S420,根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。
為了確定發(fā)現(xiàn)的可連接設(shè)備是否實(shí)時(shí)在線,本實(shí)施例中所有終端可以實(shí)時(shí)監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)中的心跳包。本實(shí)施例中心跳包為UDP(User Data Protocol,用戶數(shù)據(jù)協(xié)議)包,UDP是與TCP相對(duì)應(yīng)的協(xié)議,它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過(guò)去。每個(gè)UDP數(shù)據(jù)包都有完整的源、目的地址及分組編號(hào),各自在網(wǎng)絡(luò)中獨(dú)立傳輸。當(dāng)然心跳包還可以為其他協(xié)議的數(shù)據(jù)包。
網(wǎng)絡(luò)中各個(gè)設(shè)備都會(huì)向網(wǎng)絡(luò)中發(fā)送心跳包,同時(shí)各個(gè)設(shè)備都可以在網(wǎng)絡(luò)中監(jiān)聽(tīng)心跳包,通過(guò)監(jiān)聽(tīng)心跳包獲取其他設(shè)備的在線情況。心跳包是在設(shè)備之間或者設(shè)備向網(wǎng)絡(luò)定時(shí)通知對(duì)方自己狀態(tài)的一個(gè)自己定義的命令字,按照一定的時(shí)間間隔發(fā)送,類似于心跳。用來(lái)判斷對(duì)方(設(shè)備,進(jìn)程或其它網(wǎng)元)是否正常運(yùn)行而定時(shí)發(fā)送簡(jiǎn)單的通訊包。
心跳包的內(nèi)容沒(méi)有特別規(guī)定,一般都是很小的包,或者是只包含包頭的一個(gè)空包。因此用心跳包來(lái)獲取設(shè)備在線信息,不會(huì)加重服務(wù)器的負(fù)擔(dān)。因此本實(shí)施例中通過(guò)啟動(dòng)心跳線程,根據(jù)待連接終端信息獲得對(duì)應(yīng)的心跳包;通過(guò)心跳包確定待連接設(shè)備的在線信息;根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。
在本實(shí)施例中,通過(guò)啟動(dòng)心跳線程,獲得網(wǎng)絡(luò)中的心跳包;根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息;根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。通過(guò)上述方式,用心跳包來(lái)獲取設(shè)備在線信息,不會(huì)加重服務(wù)器的負(fù)擔(dān)。能夠可以快速地獲取其他終端信息,提高了可連接設(shè)備列表的準(zhǔn)確性。
進(jìn)一步地,參照?qǐng)D3,圖3為本發(fā)明實(shí)施例中根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息的步驟包括的細(xì)化流程示意圖。
基于本發(fā)明設(shè)備的發(fā)現(xiàn)方法第一實(shí)施例,步驟S410可以包括:
S411,獲取網(wǎng)絡(luò)中的心跳包;
S412,解析所述心跳包,獲得發(fā)送所述心跳包的設(shè)備標(biāo)識(shí);
S413,根據(jù)獲得的設(shè)備標(biāo)識(shí)和待連接終端的信息確定待連接設(shè)備的在線信息。
具體地,本實(shí)施例中當(dāng)前終端自動(dòng)獲取來(lái)自網(wǎng)絡(luò)中的心跳包,解析所述心跳包,通過(guò)UDP心跳包中所包含的完整的源、目的地址及分組編號(hào)判斷是否是所述列表中可連接設(shè)備的心跳包。若是,則獲取設(shè)備在線信息,對(duì)更新可連接設(shè)備列表中的設(shè)備進(jìn)行更新,將不在線的設(shè)備移出可連接設(shè)備列表;若否,則忽略所述心跳包。
在本實(shí)施例中,通過(guò)獲取網(wǎng)絡(luò)中的心跳包;解析所述心跳包,獲得發(fā)送所述心跳包的設(shè)備標(biāo)識(shí);根據(jù)獲得的設(shè)備標(biāo)識(shí)和待連接終端的信息確定待連接設(shè)備的在線信息。通過(guò)上述方式,用心跳包來(lái)獲取設(shè)備在線信息,不會(huì)加重服務(wù)器的負(fù)擔(dān)。能夠?qū)崟r(shí)確定設(shè)備的在線情況,使得可連接設(shè)備列表更加準(zhǔn)確。
進(jìn)一步地,參照?qǐng)D4,圖4為本發(fā)明設(shè)備發(fā)現(xiàn)的方法第三實(shí)施例的流程示意圖;
基于本發(fā)明設(shè)備的發(fā)現(xiàn)方法第一實(shí)施例,所述方法還包括:
S600,與可連接設(shè)備列表中的設(shè)備建立用戶數(shù)據(jù)協(xié)議連接。
本實(shí)施例中在啟動(dòng)心跳線程,根據(jù)檢測(cè)到各個(gè)設(shè)備的在線情況,更新可連接列表后,可連接設(shè)備列表中存在的設(shè)備即為在線的設(shè)備,此時(shí),本實(shí)施例中建立與可連接設(shè)備列表中各個(gè)設(shè)備的連接。
具體地,與可連接設(shè)備列表中的設(shè)備建立UDP連接。UDP是定義用來(lái)在互連網(wǎng)絡(luò)環(huán)境中提供包交換的計(jì)算機(jī)通信的協(xié)議。此協(xié)議默認(rèn)認(rèn)為網(wǎng)路協(xié)議(IP)是其下層協(xié)議。此協(xié)議提供了向另一用戶程序發(fā)送信息的最簡(jiǎn)便的協(xié)議機(jī)制。UDP連接只是邏輯上的連接,并不建立物理連接,具有資源消耗小,處理速度快的優(yōu)點(diǎn)。具體實(shí)施中還可以建立其他連接。
進(jìn)一步地,本實(shí)施例中與可連接設(shè)備列表中的設(shè)備建立UDP連接的過(guò)程可以包括向可連接設(shè)備列表中的設(shè)備直接發(fā)送UDP數(shù)據(jù)包,確認(rèn)第一終端與可連接設(shè)備列表中的設(shè)備之間的通信是否正常,若可連接設(shè)備列表中的設(shè)備有回應(yīng),那么說(shuō)明對(duì)方網(wǎng)絡(luò)是正常的。
需要特別說(shuō)明的是,在與可連接設(shè)備列表中的設(shè)備建立UDP連接后,第一終端可以重新監(jiān)聽(tīng)網(wǎng)絡(luò)中的自定義數(shù)據(jù)包。
在本實(shí)施例中在更新可連接設(shè)備列表后,與可連接設(shè)備列表中的設(shè)備建立UDP連接。通過(guò)上述方式,本實(shí)施例中與其他設(shè)備建立UDP連接,資源消耗小,處理速度快,并且可以根據(jù)UDP連接發(fā)送的信息快速確認(rèn)第一終端與可連接設(shè)備列表中的設(shè)備之間的通信是否正常,進(jìn)一步確認(rèn)了可連接設(shè)備列表中的設(shè)備是否可以連接。
本發(fā)明還提供一種設(shè)備的發(fā)現(xiàn)裝置。
參照?qǐng)D5,圖5為本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第一實(shí)施例的功能模塊示意圖。
在本實(shí)施例中,該設(shè)備的發(fā)現(xiàn)裝置包括:
監(jiān)聽(tīng)模塊100,用于當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包。
為保證本發(fā)明能夠正常實(shí)施,本發(fā)明中各個(gè)設(shè)備需要在同一網(wǎng)絡(luò)中,因此可以事先建立局域網(wǎng),當(dāng)然也可以采用廣域網(wǎng),即各個(gè)設(shè)備可以通過(guò)廣域網(wǎng)進(jìn)行通信。具體地,各個(gè)設(shè)備可以通過(guò)TCP/IP基礎(chǔ)協(xié)議進(jìn)行通信,具體實(shí)施中也可以通過(guò)其他的協(xié)議進(jìn)行通信,比如采用NetBEUI協(xié)議。
在使用過(guò)程中,用戶可以將當(dāng)前終端上電開(kāi)機(jī),然后接入事先建立好的網(wǎng)絡(luò),網(wǎng)絡(luò)中預(yù)先設(shè)置為可以相互發(fā)現(xiàn)的設(shè)備可以向網(wǎng)絡(luò)中發(fā)送自定義數(shù)據(jù)包,當(dāng)然網(wǎng)絡(luò)中的各個(gè)設(shè)備也可以相互發(fā)送自定義數(shù)據(jù)包;在將當(dāng)前終端上電開(kāi)機(jī),并接入事先建立好的網(wǎng)絡(luò)后,用戶可以通過(guò)當(dāng)前終端或當(dāng)前終端自動(dòng)向網(wǎng)絡(luò)中發(fā)送自定義數(shù)據(jù)包。所述自定義數(shù)據(jù)包攜帶了當(dāng)前終端的描述信息。描述信息至少包括該設(shè)備IP地址和設(shè)備唯一ID,具體實(shí)施中除了包括設(shè)備IP地址和ID之外,還可以包括端口號(hào)、軟件版本、硬件版本和設(shè)備類型中的至少一種。本實(shí)施例中描述信息中包括該設(shè)備IP地址、設(shè)備唯一ID、端口號(hào)、軟件版本、硬件版本和設(shè)備類型,其自定義數(shù)據(jù)包詳細(xì)數(shù)據(jù)結(jié)構(gòu)如下:
{
unsigned char[128]ipaddr,
unsigned int port,
unsigned int device_type,
unsigned char[128]device_id,
unsigned char[128]software_version,
unsigned char[128]hardware_version,
}
當(dāng)然,在將當(dāng)前終端上電開(kāi)機(jī),并接入事先建立好的網(wǎng)絡(luò)后,當(dāng)前終端同時(shí)監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)中的數(shù)據(jù)包。當(dāng)前終端可以是可以相互發(fā)現(xiàn)的設(shè)備中的任何一個(gè)。
在本實(shí)施例中,所述終端包括手機(jī)、PAD、電視、電腦等可以向計(jì)算機(jī)輸入程序和數(shù)據(jù)或接收計(jì)算機(jī)輸出處理結(jié)果的設(shè)備。
判斷模塊200,用于判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包。
在監(jiān)聽(tīng)到數(shù)據(jù)包時(shí),可以對(duì)監(jiān)聽(tīng)到的數(shù)據(jù)包進(jìn)行判斷,判斷監(jiān)聽(tīng)到的數(shù)據(jù)包是否是自定義數(shù)據(jù)包。
具體地,通過(guò)自定義數(shù)據(jù)包的名稱或者標(biāo)識(shí)位判斷監(jiān)聽(tīng)到的數(shù)據(jù)包是否是自定義數(shù)據(jù)包;若監(jiān)聽(tīng)到的數(shù)據(jù)包里含有名稱和標(biāo)識(shí)位中的至少一種,則該數(shù)據(jù)包為自定義數(shù)據(jù)包。
解析模塊300,用于當(dāng)前終端解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息。
在當(dāng)前終端獲取到其他設(shè)備發(fā)送的自定義數(shù)據(jù)包后,當(dāng)前終端解析獲取到的自定義數(shù)據(jù)包,從而獲得其他終端信息。具體地,本實(shí)施例中對(duì)獲得的自定義數(shù)據(jù)包進(jìn)行解析,獲得待連接終端的設(shè)備IP地址和設(shè)備唯一ID。
具體實(shí)施中根據(jù)自定義數(shù)據(jù)包包括的內(nèi)容不同,獲得其他終端信息也會(huì)不同,比如如果自定義數(shù)據(jù)包包括該設(shè)備IP地址、設(shè)備唯一ID、端口號(hào)、軟件版本、硬件版本和設(shè)備類型,則解析獲得其他設(shè)備的IP地址、設(shè)備唯一ID、端口號(hào)、軟件版本、硬件版本和設(shè)備類型。
更新模塊400,用于根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。
本實(shí)施例中還事先建立有一個(gè)設(shè)備列表,此列表的作用為記錄可連接的設(shè)備,包括可連接的設(shè)備的標(biāo)識(shí)信息,比如設(shè)備ID等。具體實(shí)施中還可以包括設(shè)備IP地址等。
具體地,本實(shí)施例中設(shè)備列表可以為一個(gè)可實(shí)時(shí)更新的列表,具體實(shí)施中設(shè)備列表還可以為一個(gè)定時(shí)更新的列表。本實(shí)施例在網(wǎng)絡(luò)中發(fā)現(xiàn)設(shè)備時(shí),將該設(shè)備的信息反饋到列表中,在列表中記錄設(shè)備的信息,記錄完之后,對(duì)可連接設(shè)備列表進(jìn)行更新。
在本實(shí)施例中,通過(guò)監(jiān)聽(tīng)模塊100監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包;判斷模塊200判斷所述數(shù)據(jù)包是否是自定義數(shù)據(jù)包;若是,則解析模塊300解析所述自定義數(shù)據(jù)包,獲得待連接終端的信息;更新模塊400根據(jù)所述待連接終端的信息,更新當(dāng)前終端的可連接設(shè)備列表。通過(guò)上述方式,本實(shí)施例通過(guò)當(dāng)前終端監(jiān)聽(tīng)網(wǎng)絡(luò)中的數(shù)據(jù)包,判斷監(jiān)聽(tīng)到的是否是待連接設(shè)備發(fā)送的自定義數(shù)據(jù)包,然后根據(jù)監(jiān)聽(tīng)到的自定義數(shù)據(jù)包實(shí)現(xiàn)對(duì)待連接終端的發(fā)現(xiàn),不需要依賴于第三方軟件DLNA,因此不會(huì)產(chǎn)生使用第三方軟件帶來(lái)的軟件耦合的問(wèn)題,跳過(guò)了DLNA發(fā)現(xiàn)設(shè)備的復(fù)雜流程,發(fā)現(xiàn)流程也相對(duì)簡(jiǎn)單,并且能夠加快設(shè)備發(fā)現(xiàn)的速度。
進(jìn)一步地,參照?qǐng)D6,圖6為本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第二實(shí)施例的功能模塊示意圖。
基于本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第一實(shí)施例,所述裝置還包括:
獲得模塊500,啟動(dòng)心跳線程,獲得網(wǎng)絡(luò)中的心跳包;
更新模塊400可以包括:
確定單元410,用于根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息;
更新單元420,根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。
為了確定發(fā)現(xiàn)的可連接設(shè)備是否實(shí)時(shí)在線,本實(shí)施例中所有終端可以實(shí)時(shí)監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)中的心跳包。本實(shí)施例中心跳包為UDP(User Data Protocol,用戶數(shù)據(jù)協(xié)議)包,UDP是與TCP相對(duì)應(yīng)的協(xié)議,它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過(guò)去。每個(gè)UDP數(shù)據(jù)包都有完整的源、目的地址及分組編號(hào),各自在網(wǎng)絡(luò)中獨(dú)立傳輸。當(dāng)然心跳包還可以為其他協(xié)議的數(shù)據(jù)包。
網(wǎng)絡(luò)中各個(gè)設(shè)備都會(huì)向網(wǎng)絡(luò)中發(fā)送心跳包,同時(shí)各個(gè)設(shè)備都可以在網(wǎng)絡(luò)中監(jiān)聽(tīng)心跳包,通過(guò)監(jiān)聽(tīng)心跳包獲取其他設(shè)備的在線情況。心跳包是在設(shè)備之間或者設(shè)備向網(wǎng)絡(luò)定時(shí)通知對(duì)方自己狀態(tài)的一個(gè)自己定義的命令字,按照一定的時(shí)間間隔發(fā)送,類似于心跳。用來(lái)判斷對(duì)方(設(shè)備,進(jìn)程或其它網(wǎng)元)是否正常運(yùn)行而定時(shí)發(fā)送簡(jiǎn)單的通訊包。
心跳包的內(nèi)容沒(méi)有特別規(guī)定,一般都是很小的包,或者是只包含包頭的一個(gè)空包。因此用心跳包來(lái)獲取設(shè)備在線信息,不會(huì)加重服務(wù)器的負(fù)擔(dān)。因此本實(shí)施例中通過(guò)啟動(dòng)心跳線程,根據(jù)待連接終端信息獲得對(duì)應(yīng)的心跳包;通過(guò)心跳包確定待連接設(shè)備的在線信息;根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。
在本實(shí)施例中,通過(guò)啟動(dòng)心跳線程,獲得網(wǎng)絡(luò)中的心跳包;根據(jù)獲得的心跳包和待連接終端的信息確定待連接設(shè)備的在線信息;根據(jù)待連接設(shè)備的在線信息更新所述可連接設(shè)備列表。通過(guò)上述方式,用心跳包來(lái)獲取設(shè)備在線信息,不會(huì)加重服務(wù)器的負(fù)擔(dān)。能夠可以快速地獲取其他終端信息,提高了可連接設(shè)備列表的準(zhǔn)確性。
進(jìn)一步地,參照?qǐng)D7,圖7為本發(fā)明實(shí)施例中確定單元的細(xì)化功能示意圖。
基于本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第一實(shí)施例,確定單元410可以包括:
獲取子單元411,用于獲取網(wǎng)絡(luò)中的心跳包;
獲得子單元412,用于解析所述心跳包,獲得發(fā)送所述心跳包的設(shè)備標(biāo)識(shí);
確定子單元413,用于根據(jù)獲得的設(shè)備標(biāo)識(shí)和待連接終端的信息確定待連接設(shè)備的在線信息。
具體地,本實(shí)施例中當(dāng)前終端自動(dòng)獲取來(lái)自網(wǎng)絡(luò)中的心跳包,解析所述心跳包,通過(guò)UDP心跳包中所包含的完整的源、目的地址及分組編號(hào)判斷是否是所述列表中可連接設(shè)備的心跳包。若是,則獲取設(shè)備在線信息,對(duì)更新可連接設(shè)備列表中的設(shè)備進(jìn)行更新,將不在線的設(shè)備移出可連接設(shè)備列表;若否,則忽略所述心跳包。
在本實(shí)施例中,通過(guò)獲取網(wǎng)絡(luò)中的心跳包;解析所述心跳包,獲得發(fā)送所述心跳包的設(shè)備標(biāo)識(shí);根據(jù)獲得的設(shè)備標(biāo)識(shí)和待連接終端的信息確定待連接設(shè)備的在線信息。通過(guò)上述方式,用心跳包來(lái)獲取設(shè)備在線信息,不會(huì)加重服務(wù)器的負(fù)擔(dān)。能夠?qū)崟r(shí)確定設(shè)備的在線情況,使得可連接設(shè)備列表更加準(zhǔn)確。
進(jìn)一步地,參照?qǐng)D8,圖8為本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第三實(shí)施例的流程示意圖。
基于本發(fā)明設(shè)備的發(fā)現(xiàn)裝置第一實(shí)施例,所述裝置還包括:
連接模塊600,用于與可連接設(shè)備列表中的設(shè)備建立用戶數(shù)據(jù)協(xié)議連接。
本實(shí)施例中在啟動(dòng)心跳線程,根據(jù)檢測(cè)到各個(gè)設(shè)備的在線情況,更新可連接列表后,可連接設(shè)備列表中存在的設(shè)備即為在線的設(shè)備,此時(shí),本實(shí)施例中建立與可連接設(shè)備列表中各個(gè)設(shè)備的連接。
具體地,與可連接設(shè)備列表中的設(shè)備建立UDP連接。UDP是定義用來(lái)在互連網(wǎng)絡(luò)環(huán)境中提供包交換的計(jì)算機(jī)通信的協(xié)議。此協(xié)議默認(rèn)認(rèn)為網(wǎng)路協(xié)議(IP)是其下層協(xié)議。此協(xié)議提供了向另一用戶程序發(fā)送信息的最簡(jiǎn)便的協(xié)議機(jī)制。UDP連接只是邏輯上的連接,并不建立物理連接,具有資源消耗小,處理速度快的優(yōu)點(diǎn)。具體實(shí)施中還可以建立其他連接。
進(jìn)一步地,本實(shí)施例中與可連接設(shè)備列表中的設(shè)備建立UDP連接的過(guò)程可以包括向可連接設(shè)備列表中的設(shè)備直接發(fā)送UDP數(shù)據(jù)包,確認(rèn)第一終端與可連接設(shè)備列表中的設(shè)備之間的通信是否正常,若可連接設(shè)備列表中的設(shè)備有回應(yīng),那么說(shuō)明對(duì)方網(wǎng)絡(luò)是正常的。
需要特別說(shuō)明的是,在與可連接設(shè)備列表中的設(shè)備建立UDP連接后,第一終端可以重新監(jiān)聽(tīng)網(wǎng)絡(luò)中的自定義數(shù)據(jù)包。
在本實(shí)施例中在更新可連接設(shè)備列表后,與可連接設(shè)備列表中的設(shè)備建立UDP連接。通過(guò)上述方式,本實(shí)施例中與其他設(shè)備建立UDP連接,資源消耗小,處理速度快,并且可以根據(jù)UDP連接發(fā)送的信息快速確認(rèn)第一終端與可連接設(shè)備列表中的設(shè)備之間的通信是否正常,進(jìn)一步確認(rèn)了可連接設(shè)備列表中的設(shè)備是否可以連接。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。