日韩美女乱婬AAA高清视频_国产色爱AV资源综合区_国产女同性黄网在线观看_欧美日韩一卡2卡3卡4卡新区乱码_俺来也俺也啪www色_精品久久久久久综合日本_99国内偷揿国产精品人妻_国产蜜芽剧果冻传媒_日本特级aaaaaaaa片_国产偷人妻精品一区二区在线

簡體中文

基于P2PTunnelAPIs和TCPIP協(xié)議開發(fā)NAS(或者攝像頭)-設(shè)備端

P2PTunnelAPIs Server端開發(fā)指南 | TUTK P2P SDK 開發(fā)手冊

一、API調(diào)用流程圖

截圖.png

圖 1:Server端授權(quán)驗證、初始化、啟動、連接管理、釋放完整流程

二、核心開發(fā)步驟(Server端)

以下為 P2PTunnel Server(服務(wù)端)的核心開發(fā)流程,包含授權(quán)激活、初始化、服務(wù)配置、啟動運行、狀態(tài)檢測、資源釋放等關(guān)鍵步驟,適配 SDK 全版本,支持多訪客連接場景。

(一)Server 初始化(必選)
1. 設(shè)置 SDK 許可證密鑰

啟動 Server 前需先通過 TUTK 提供的許可證密鑰激活 SDK,否則后續(xù)接口調(diào)用會失敗,密鑰需向 TUTK 官方申請。

// 1. 配置 SDK 授權(quán)密鑰(由 TUTK 官方提供) int ret = TUTK_SDK_Set_License_Key(sdk_license_key); if (ret != TUTK_ER_NoERROR) {    printf("TUTK_SDK_Set_License_Key() error[%d]!\n", ret);    return -1; }
說明:sdk_license_key 需妥善保管,避免泄露;服務(wù)啟動時僅需調(diào)用一次。
2. 初始化 P2PTunnel Server 模塊

根據(jù) SDK 版本選擇對應(yīng)的初始化接口,新版本支持局域網(wǎng)直連模式(提升傳輸速度,需 APP 端配合開啟),僅需在服務(wù)啟動時調(diào)用一次。

// 定義最大允許的訪客連接數(shù)(自定義,如8個連接) #define MAX_CONNECTION 8 // 2. 初始化 P2PTunnelServer(適配不同 SDK 版本) #if _USE_SDK_VERSION_BELOW_4_3_5_0_    // 舊版本:僅指定最大允許連接數(shù)    ret = P2PTunnelServerInitialize(MAX_CONNECTION);    if (ret != TUNNEL_ER_NoERROR) {        printf("P2PTunnelServerInitialize() error[%d]!\n", ret);        return -1;    } #else    // 新版本:支持局域網(wǎng)直連(第二個參數(shù)填1開啟)    // 優(yōu)勢:局域網(wǎng)內(nèi)傳輸速度大幅提升;注意:需客戶端同步開啟,且局域網(wǎng)內(nèi)數(shù)據(jù)不加密    ret = P2PTunnelServerInitialize2(MAX_CONNECTION, 1);    if (ret != TUNNEL_ER_NoERROR) {        printf("P2PTunnelServerInitialize2() error[%d]!\n", ret);        return -1;    } #endif
說明:多次調(diào)用初始化接口可能導(dǎo)致資源沖突,若需重啟服務(wù),需先執(zhí)行反初始化操作。
3. 注冊連接狀態(tài)回調(diào)函數(shù)

注冊回調(diào)函數(shù)以監(jiān)聽訪客連接狀態(tài)變更(如接入、退出、異常斷開),便于服務(wù)端進行連接管理和日志記錄。

// 3. 注冊連接狀態(tài)回調(diào)(監(jiān)聽訪客接入/退出等狀態(tài)變更) P2PTunnelServer_GetStatus(TunnelStatusCB, (void *)args);
說明:TunnelStatusCB 需按 SDK 定義的函數(shù)原型實現(xiàn),示例:void TunnelStatusCB(int SID, int status, void* pArg),其中 SID 為會話ID,status 為狀態(tài)碼。
(二)端口白名單配置(可選,提升安全性)

通過注冊端口驗證回調(diào),限制僅允許指定端口的服務(wù)通過 P2PTunnel 轉(zhuǎn)發(fā),拒絕非法端口訪問,降低安全風(fēng)險。

1. 實現(xiàn)端口驗證回調(diào)函數(shù)
// 定義允許放行的服務(wù)端口 #define WEB_SERVICE_PORT 80    // HTTP 服務(wù) #define SSH_SERVICE_PORT 22    // SSH 服務(wù) #define TELNET_SERVICE_PORT 23 // Telnet 服務(wù) // 端口驗證回調(diào)函數(shù) int TunnelPortVerifyCB(uint16_t nServicePort, const void *pArg){    int ret = 0;    switch (nServicePort) {        case WEB_SERVICE_PORT:        case SSH_SERVICE_PORT:        case TELNET_SERVICE_PORT:            printf("[%s] 端口[%d] 允許放行\(zhòng)n", __func__, nServicePort);            break;        default:            printf("[%s] 端口[%d] 拒絕訪問\n", __func__, nServicePort);            ret = -1;            break;    }    return ret; }
2. 注冊端口驗證回調(diào)
// 注冊端口驗證回調(diào) int ret = P2PTunnelServer_Register_Port_Verify(TunnelPortVerifyCB, NULL); if (ret != TUNNEL_ER_NoERROR) {    printf("P2PTunnelServer_Register_Port_Verify() error[%d]!\n", ret);    return -1; }
說明:回調(diào)函數(shù)中返回 0 表示放行,返回 -1 表示拒絕,可根據(jù)業(yè)務(wù)需求擴展端口白名單列表。
(三)啟動 Tunnel Server(必選)

啟動服務(wù)時需傳入設(shè)備唯一標(biāo)識(gUid)、賬密驗證回調(diào)、連接狀態(tài)信息回調(diào)及自定義參數(shù),啟動成功后設(shè)備即可通過公網(wǎng)接收訪客連接。

// 啟動 P2PTunnel Server // 參數(shù)說明:設(shè)備UID、賬密驗證回調(diào)、連接信息回調(diào)、自定義參數(shù) ret = P2PTunnelServer_Start_Ex(gUid, TunnelServerAuthentication, TunnelSessionInfoExCB, args); if (ret != TUNNEL_ER_NoERROR) {    printf("P2PTunnelServer_Start_Ex() error[%d]!\n", ret);    return -1; } else {    printf("P2PTunnelServer 啟動成功,可通過公網(wǎng)訪問\n"); }

重要提醒

gUid 為設(shè)備唯一標(biāo)識,需確保平臺唯一,否則會導(dǎo)致連接沖突。

(四)認(rèn)證與狀態(tài)回調(diào)實現(xiàn)(必選)
1. 賬密驗證回調(diào)函數(shù)

用于驗證訪客登錄賬號的合法性:SDK 接收訪客傳入的賬號后,通過該回調(diào)獲取對應(yīng)密碼并進行比對,僅賬號匹配時才允許建立連接。

// 賬密驗證回調(diào)函數(shù) void TunnelServerAuthentication(const char *cszAccount, char *cszPassword, uint32_t nPasswordMaxLength, const void *pArg) {    printf("[%s] 訪問賬號:%s,密碼緩沖區(qū)長度:%d\n", __func__, cszAccount, nPasswordMaxLength);        // 校驗賬號合法性(實際場景建議從配置文件或數(shù)據(jù)庫讀取賬號密碼)    if (strcmp(cszAccount, TUNNEL_USERNAME) == 0) {        // 賬號匹配:將預(yù)設(shè)密碼拷貝至 SDK 緩沖區(qū)進行比對        strcpy(cszPassword, TUNNEL_PASSWORD);    } else {        // 賬號不匹配:拒絕連接(不寫入密碼即可)        printf("未知賬號,拒絕連接\n");    } }
關(guān)鍵說明:實際項目中不建議硬編碼賬號密碼,應(yīng)從配置文件、數(shù)據(jù)庫或安全存儲中讀取,提升安全性。
2. 連接狀態(tài)信息回調(diào)函數(shù)

實時獲取訪客連接的詳細(xì)信息,包括連接模式、NAT 類型、P2PTunnel 版本、訪客 IP/端口、會話 ID 等,便于問題排查和狀態(tài)監(jiān)控。

// 連接狀態(tài)信息回調(diào)函數(shù) void TunnelSessionInfoExCB(sP2PTunnelSessionInfoEx *sSessionInfo, const void *pArg) {    printf("[%s] 連接信息更新\n", __func__);    printf("  連接模式 = %d,NAT 類型 = %d\n", sSessionInfo->nMode, sSessionInfo->nNatType);    printf("  P2PTunnel 版本 = %X,會話 ID = %d\n", (unsigned int)sSessionInfo->nVersion, sSessionInfo->nSID);    printf("  訪客 IP:端口 = %s:%d\n", sSessionInfo->szRemoteIP, sSessionInfo->nRemotePort); }
(五)數(shù)據(jù)傳輸(自動轉(zhuǎn)發(fā),無需額外開發(fā))

Tunnel Server 啟動后,即可正常部署 HTTP、FTP、RTSP、SSH 等標(biāo)準(zhǔn)服務(wù)。P2PTunnel 模塊會自動轉(zhuǎn)發(fā)對應(yīng)端口的數(shù)據(jù)流,無需額外修改服務(wù)代碼(服務(wù)端按本地常規(guī)方式部署即可)。

說明:若已配置端口白名單,僅白名單中指定的端口會被轉(zhuǎn)發(fā),未配置則允許所有端口轉(zhuǎn)發(fā)(不推薦)。
(六)設(shè)備登錄狀態(tài)檢測(推薦)

設(shè)備成功登錄 P2P 服務(wù)器后,會通過心跳機制維持連接。為應(yīng)對異常掉線場景,可通過 IOTC_Get_Login_Info 接口持續(xù)檢測登錄狀態(tài),確保服務(wù)可用性。

unsigned int login_state; int login_fail_count = 0; // 循環(huán)檢測登錄狀態(tài)(gProcessRun 為程序運行狀態(tài)標(biāo)志) while (gProcessRun) {    int ret = IOTC_Get_Login_Info(&login_state);    printf("IOTC_Get_Login_Info() 重試失敗次數(shù) = %d,登錄狀態(tài) = %u\n", ret, login_state);        // 接口調(diào)用異常,退出檢測    if (ret < IOTC_ER_NoERROR) {        break;    }        // 重試失敗次數(shù)超過4次:設(shè)備已與 P2P 服務(wù)器失聯(lián)    if (ret > 4) {        // 無用戶訪問且網(wǎng)絡(luò)暢通時,執(zhí)行反初始化        if (is_no_user_connected() && is_network_available()) {            printf("設(shè)備已從 P2P 服務(wù)器掉線,執(zhí)行反初始化\n");            P2PTunnelServer_Stop();            P2PTunnelServerDeInitialize();            break;        }    }        // 5秒檢測一次    for (int sleep_count = 0; sleep_count < 5 && gProcessRun; sleep_count++) {        sleep(1);    } }
說明:is_no_user_connected() 需自行實現(xiàn)(判斷當(dāng)前是否有訪客連接),is_network_available() 可通過 ping 網(wǎng)關(guān)或公網(wǎng)地址實現(xiàn)網(wǎng)絡(luò)連通性檢測;login_state = 7 表示設(shè)備正常登錄并收到 P2P 服務(wù)器響應(yīng)。
(七)Server 反初始化(必選)

用于停止 Tunnel 服務(wù)并釋放資源,通常在程序退出時調(diào)用一次;若中途需重啟服務(wù),也需先執(zhí)行反初始化操作。

// 停止 Tunnel Server 服務(wù) P2PTunnelServer_Stop(); // 釋放 Tunnel Server 資源 P2PTunnelServerDeInitialize(); printf("P2PTunnel Server 反初始化完成\n");

注意

反初始化前需確保所有訪客連接已斷開,否則可能導(dǎo)致資源釋放不徹底,建議在反初始化前調(diào)用連接檢測接口,等待所有連接斷開后再執(zhí)行。

三、常見問題

問:P2PTunnelAPIs 可以使用 IOTCAPIs 的 API 嗎?

答:可以,需傳入會話 ID(SID)作為參數(shù),即可復(fù)用 IOTCAPIs 的相關(guān)接口功能,數(shù)據(jù)會通過 P2P 隧道傳輸。


問:P2PTunnelAPIs 可以與其他模塊(AV、RDT)一起使用嗎?

答:技術(shù)上支持,但集成復(fù)雜度較高,可能存在資源競爭或兼容性問題,通常不建議混合使用。若需同時實現(xiàn)音視頻傳輸和隧道功能,建議優(yōu)先使用 P2PTunnel 承載音視頻 TCP 流。


問:局域網(wǎng)直連模式開啟后,數(shù)據(jù)傳輸是否安全?

答:局域網(wǎng)直連模式下,數(shù)據(jù)傳輸不加密,僅適用于信任的局域網(wǎng)環(huán)境;若需加密傳輸,需關(guān)閉該模式,數(shù)據(jù)會通過 TUTK 私有加密協(xié)議傳輸。


問:如何限制最大訪客連接數(shù)?

答:在初始化接口(P2PTunnelServerInitializeP2PTunnelServerInitialize2)中指定最大連接數(shù)參數(shù),超過該數(shù)量的連接會被拒絕。

即刻開啟您的物聯(lián)網(wǎng)之旅

聯(lián)系解決方案專家
Kalay App
資訊安全白皮書
全球?qū)@季?/a>
解決方案
新聞動態(tài)
公司動態(tài)
行業(yè)資訊
媒體報道
永續(xù)發(fā)展
經(jīng)營者的話
社會參與
環(huán)境永續(xù)
公司治理

+86 755 27702549

7×24小時服務(wù)熱線

法律聲明 隱私權(quán)條款

關(guān)注“TUTK”

TUTK服務(wù)盡在掌握

? 2022 物聯(lián)智慧科技(深圳)有限公司版權(quán)所有粵ICP備14023641號
在線咨詢
掃一掃

TUTK服務(wù)盡在掌握

全國免費服務(wù)熱線
+86 755 27702549

返回頂部