在客戶端之間建立通信連接的方法、裝置及路由器的制造方法
【技術(shù)領(lǐng)域】
[0001]本公開涉及通信技術(shù)領(lǐng)域,尤其涉及一種在客戶端之間建立通信連接的方法、裝置及路由器。
【背景技術(shù)】
[0002]在一個(gè)使用Bonjour協(xié)議的本地網(wǎng)絡(luò)中,很多事情變得簡單。例如,當(dāng)用戶攜帶便攜式計(jì)算機(jī)到公司辦公時(shí),如果用戶想通過便攜式計(jì)算機(jī)在公司打印文檔,由于公司的打印機(jī)信息并沒有保存在用戶的便攜式計(jì)算機(jī)中,在此情形下,通過Bonjour協(xié)議可以使用戶的便攜式計(jì)算機(jī)連接到公司的打印機(jī),從而避免用戶在便攜式計(jì)算機(jī)上通過手動設(shè)置打印機(jī)的相關(guān)信息,使用戶的操作變得更為簡單。
[0003]通過Bonjour協(xié)議的具體實(shí)現(xiàn)過程如下:在打印機(jī)已經(jīng)啟動并且可以提供正常的打印服務(wù)的情況下(打印機(jī)具有本地唯一的域名,例如,xiaomi 10F._printer_._tcp.local和xiaomillF._printer_.tcp.local兩臺打印機(jī)),該打印機(jī)通過mDNS向本地的網(wǎng)絡(luò)路由器注冊打印服務(wù),將打印機(jī)的最新IP地址、端口號等注冊在路由器上;接入本地網(wǎng)絡(luò)的便攜式計(jì)算機(jī)在需要打印服務(wù)時(shí),例如,便攜式計(jì)算機(jī)通過開啟打印頁面并通過mDNS向路由器發(fā)送打印服務(wù)的請求,則所有在路由器注冊并可用的打印服務(wù)都會向便攜式計(jì)算機(jī)回應(yīng)mDNS報(bào)文,并攜帶各自的本地唯一域名,例如,在路由器注冊并可以提供打印服務(wù)的打印機(jī)為 xiaomi 10F._printer_.tcp.local 和 xiaomillF._printer_.tcp.local,那么在便攜式計(jì)算機(jī)的打印機(jī)瀏覽頁面中,會出現(xiàn)上述兩個(gè)打印機(jī)的名稱,如果xiaomilOF._printer_.tcp.local離用戶比較近,此時(shí)用戶可以點(diǎn)擊該打印機(jī)并開始打印。便攜式計(jì)算機(jī)以xiaomilOF._printer_.tcp.local域名發(fā)送mDNS報(bào)文向路由器請求對應(yīng)的IP地址和端口號。xiaomilOF._printer_.tcp.local的打印服務(wù)通過mDNS響應(yīng)并攜帶上該打印機(jī)的IP地址和端口號,便攜式計(jì)算機(jī)接收到打印機(jī)的IP地址和端口號后通過傳輸控制協(xié)議(Transmiss1n Control Protocol,簡稱為 TCP)與 xiaomilOF._printer_.tcp.local 的打印機(jī)建立連接,開始傳輸打印命令。
[0004]上述過程中需要便攜式計(jì)算機(jī)向路由器發(fā)Query mDNS,路由器再將Query mDNS轉(zhuǎn)發(fā)給打印機(jī),打印機(jī)向路由器響應(yīng)Answer mDNS,路由器再將Answer mDNS轉(zhuǎn)發(fā)給便攜式設(shè)備,因此打印機(jī)的發(fā)現(xiàn)、解析的流程過長。
【發(fā)明內(nèi)容】
[0005]為克服相關(guān)技術(shù)中存在的問題,本公開實(shí)施例提供一種在客戶端之間建立通信連接的方法、裝置及路由器,用以簡化客戶端查詢服務(wù)的流程。
[0006]根據(jù)本公開實(shí)施例的第一方面,提供一種減短客戶端查詢服務(wù)的流程的方法,包括:
[0007]接收來自第一客戶端的詢問報(bào)文,所述詢問報(bào)文中攜帶有所述第一客戶端需要的服務(wù)類型;
[0008]從服務(wù)資源列表中確定是否存在能夠提供所述服務(wù)類型的第二客戶端;
[0009]如果存在能夠提供所述服務(wù)類型的所述第二客戶端,向所述第一客戶端單播發(fā)送第一響應(yīng)報(bào)文,所述第一響應(yīng)報(bào)文攜帶有所述第二客戶端的第一網(wǎng)絡(luò)地址,以供所述第一客戶端通過所述第一網(wǎng)絡(luò)地址建立與所述第二客戶端的通信連接。
[0010]在一實(shí)施例中,所述接收來自第一客戶端的詢問報(bào)文之后,所述方法還可包括:
[0011]確定所述服務(wù)類型是否符合為所述第一客戶端設(shè)置的訪問權(quán)限;
[0012]如果確定符合所述訪問權(quán)限,執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端的步驟;
[0013]如果不符合,丟棄所述詢問報(bào)文。
[0014]在一實(shí)施例中,所述接收來自第一客戶端的詢問報(bào)文之后,所述方法還可包括:
[0015]從詢問會話表中查詢是否存在與所述詢問報(bào)文相匹配的會話表項(xiàng);
[0016]如果存在所述會話表項(xiàng),更新與所述會話表項(xiàng)相對應(yīng)的定時(shí)器,并執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端;
[0017]如果不存在所述會話表項(xiàng),創(chuàng)建與所述詢問報(bào)文相匹配的會話表項(xiàng),啟動與所述會話表項(xiàng)相對應(yīng)的定時(shí)器。
[0018]在一實(shí)施例中,所述接收來自第一客戶端的詢問報(bào)文之后,所述方法還可包括:
[0019]確定所述詢問報(bào)文中的問題字段是否為空;
[0020]如果為空,丟棄所述詢問報(bào)文;
[0021]如果不為空,從所述詢問報(bào)文中解析所述第一客戶端的服務(wù)類型,執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端的步驟。
[0022]在一實(shí)施例中,所述接收來自第一客戶端的詢問報(bào)文之后,所述方法還可包括:
[0023]確定所述詢問報(bào)文中的應(yīng)答字段是否為空;
[0024]如果為空,從所述詢問報(bào)文中解析所述第一客戶端的服務(wù)資源,執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端的步驟;
[0025]如果不為空,從所述應(yīng)答字段中解析所述第一客戶端能夠提供的服務(wù)資源;
[0026]根據(jù)所述第一客戶端能夠提供的服務(wù)資源更新所述服務(wù)資源列表。
[0027]在一實(shí)施例中,所述根據(jù)所述第一客戶端能夠提供的服務(wù)資源更新所述服務(wù)資源列表,可包括:
[0028]確定所述服務(wù)資源列表中是否已記錄所述第一客戶端能夠提供的服務(wù)資源;
[0029]如果已記錄所述第一客戶端能夠提供的服務(wù)資源,更新所述第一客戶端能夠提供的服務(wù)資源的生存時(shí)長;
[0030]如果未記錄所述第一客戶端能夠提供的服務(wù)資源,在所述服務(wù)資源列表中為所述第一客戶端能夠提供的服務(wù)資源創(chuàng)建相對應(yīng)的資源記錄。
[0031]在一實(shí)施例中,所述方法還可包括:
[0032]如果所述服務(wù)資源列表中不存在能夠提供所述服務(wù)類型的所述第二客戶端,向所述路由器所在的局域網(wǎng)內(nèi)組播發(fā)送所述詢問報(bào)文;
[0033]接收來自所述局域網(wǎng)內(nèi)的第三客戶端根據(jù)所述詢問報(bào)文返回的第二響應(yīng)報(bào)文;
[0034]如果從所述第二響應(yīng)報(bào)文中解析出符合所述第一客戶端需要的服務(wù)類型,向所述第一客戶端單播發(fā)送第二響應(yīng)報(bào)文,所述第二響應(yīng)報(bào)文攜帶所述第三客戶端的第二網(wǎng)絡(luò)地址,以供所述第一客戶端通過所述第二網(wǎng)絡(luò)地址建立與所述第三客戶端的通信連接。
[0035]在一實(shí)施例中,所述接收來自所述局域網(wǎng)內(nèi)的第三客戶端根據(jù)所述詢問報(bào)文返回的第二響應(yīng)報(bào)文之后,所述方法還可包括:
[0036]確定所述第二響應(yīng)報(bào)文中的應(yīng)答字段是否為空;
[0037]如果為空,丟棄所述第二響應(yīng)報(bào)文;
[0038]如果不為空,從所述第二響應(yīng)報(bào)文的應(yīng)答字段中解析出所述第三客戶端所提供的服務(wù)資源。
[0039]在一實(shí)施例中,所述方法還可包括:
[0040]確定所述服務(wù)資源列表中是否已記錄所述第三客戶端能夠提供的服務(wù)資源;
[0041]如果已記錄所述第三客戶端能夠提供的服務(wù)資源,更新所述第三客戶端能夠提供的服務(wù)資源的生存時(shí)長;
[0042]如果未記錄所述第三客戶端能夠提供的服務(wù)資源,在所述服務(wù)資源列表中為所述第三客戶端能夠提供的服務(wù)資源創(chuàng)建相對應(yīng)的資源記錄。
[0043]在一實(shí)施例中,所述方法還可包括:
[0044]確定所述服務(wù)資源列表中所記錄的各個(gè)客戶端的服務(wù)資源對應(yīng)的生存時(shí)長;
[0045]根據(jù)所述生存時(shí)長和定時(shí)器所記錄的在所述服務(wù)資源列表中的已過時(shí)長確定是否需要向所述各個(gè)客戶端發(fā)送詢問請求,以確定所述各個(gè)客戶端是否仍能夠提供所述服務(wù)資源列表中所記錄的服務(wù)類型。
[0046]在一實(shí)施例中,所述方法還可包括:
[0047]對于根據(jù)所述詢問消息返回響應(yīng)消息的客戶端,在所述服務(wù)資源列表中更新所述返回響應(yīng)消息的客戶端對應(yīng)的生命時(shí)長;
[0048]對于根據(jù)所述詢問消息未返回響應(yīng)消息的客戶端,將所述未返回響應(yīng)消息的客戶端在所述服務(wù)資源列表中所記錄的資源信息刪除。
[0049]根據(jù)本公開實(shí)施例的第二方面,提供一種減短客戶端查詢服務(wù)的流程的裝置,包括:
[0050]接收模塊,被配置為接收來自第一客戶端的詢問報(bào)文,所述詢問報(bào)文中攜帶有所述第一客戶端需要的服務(wù)類型;
[0051]第一確定模塊,被配置為從服務(wù)資源列表中確定是否存在能夠提供所述接收模塊接收到的所述詢問報(bào)文中攜帶的所述服務(wù)類型的第二客戶端;
[0052]第一發(fā)送模塊,被配置為如果所述第一確定模塊確定存在能夠提供所述服務(wù)類型的所述第二客戶端,向所述第一客戶端單播發(fā)送第一響應(yīng)報(bào)文,所述第一響應(yīng)報(bào)文攜帶有所述第二客戶端的第一網(wǎng)絡(luò)地址,以供所述第一客戶端通過所述第一網(wǎng)絡(luò)地址建立與所述第二客戶端的通信連接。
[0053]在一實(shí)施例中,所述裝置還可包括:
[0054]第二確定模塊,被配置為在所述接收模塊接收來自第一客戶端的詢問報(bào)文之后,確定所述服務(wù)類型是否符合為所述第一客戶端設(shè)置的訪問權(quán)限;
[0055]如果所述第二確定模塊確定符合所述訪問權(quán)限,所述第一確定模塊執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端的步驟;
[0056]第一丟棄模塊,被配置為如果所述第二確定模塊不符合所述訪問權(quán)限,丟棄所述詢問報(bào)文。
[0057]在一實(shí)施例中,所述裝置還可包括:
[0058]查詢模塊,被配置為在所述接收模塊接收來自第一客戶端的詢問報(bào)文之后,從詢問會話表中查詢是否存在與所述詢問報(bào)文相匹配的會話表項(xiàng);
[0059]更新模塊,被配置為如果所述查詢模塊查詢到存在所述會話表項(xiàng),更新與所述會話表項(xiàng)相對應(yīng)的定時(shí)器,所述第一確定模塊執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端;
[0060]第一創(chuàng)建模塊,被配置為如果所述查詢模塊查詢到不存在所述會話表項(xiàng),創(chuàng)建與所述詢問報(bào)文相匹配的會話表項(xiàng),啟動與所述會話表項(xiàng)相對應(yīng)的定時(shí)器。
[0061 ] 在一實(shí)施例中,所述裝置還可包括:
[0062]第三確定模塊,被配置為在所述接收模塊接收來自第一客戶端的詢問報(bào)文之后,確定所述詢問報(bào)文中的問題字段是否為空;
[0063]第二丟棄模塊,被配置為如果所述第三確定模塊確定所述詢問報(bào)文中的問題字段為空,丟棄所述詢冋報(bào)文;
[0064]第一解析模塊,被配置為如果所述第三確定模塊確定所述詢問報(bào)文中的問題字段不為空,從所述詢問報(bào)文中解析所述第一客戶端的服務(wù)類型,所述第一確定模塊執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端的步驟。
[0065]在一實(shí)施例中,所述裝置還可包括:
[0066]第四確定模塊,被配置為所述接收模塊接收來自第一客戶端的詢問報(bào)文之后,確定所述詢問報(bào)文中的應(yīng)答字段是否為空;
[0067]第二解析模塊,被配置為如果所述第四確定模塊確定所述詢問報(bào)文中的應(yīng)答字段為空,從所述詢問報(bào)文中解析所述第一客戶端的服務(wù)資源,所述第一確定模塊執(zhí)行所述根據(jù)所述服務(wù)類型從服務(wù)資源列表中確定是否有能夠提供所述服務(wù)類型的第二客戶端的步驟;
[0068]第三解析模塊,被配置為如果所述第四確定模塊確定所述詢問報(bào)文中的應(yīng)答字段不為空,從所述應(yīng)答字段中解析所述第一客戶端能夠提供的服務(wù)資源;
[0069]第一更新模塊,被配置為根據(jù)所述第三解析模塊解析出的所述第一客戶