1. 程式人生 > >miniupnpc的主要函式介紹

miniupnpc的主要函式介紹

http://blog.163.com/miky_sun/blog/static/336940520105954733836/

1.miniupnpc庫主要使用的標頭檔案有

#include "miniwget.h"
#include "miniupnpc.h"
#include "upnpcommands.h"
#include "upnperrors.h"

它使用的lib庫是miniupnpc.lib

2.miniupnpc.h使用的函式有

upnpDiscover():主要用來搜尋區域網中所有的UPNP裝置(注意使用freeUPNPDevlist()釋放資源)

UPNP_GetValidIGD():在UPNP列表中檢視有效IGD裝置

UPNPIGD_IsConnected():判斷一個裝置是否連線正常

// 查詢區域網內所有Upnp裝置;按照連結串列的方式返回
UPNPDev* upnpDiscover()

// 釋放upnp裝置連結串列
freeUPNPDevlist(UPNPDev*)

// 從upnp裝置表中查詢有效地裝置;
// @UPNPDev : 裝置列表
// @UPNPUrls : 如果返回值非0,UPNPUrls作為傳出引數
// @IGDdatas : 如果返回值非0,IGDdatas作為傳出引數
// @result : =0沒有IGD裝置;=1有一個連線;=2有裝置但沒有連線;=3有UPNP但不是ICG裝置
UPNP_GetValidIGD(UPNPDev*, UPNPUrls*, IGDdatas*, ..)

// Used when skipping the discovery process.

UPNP_GetIGDFromUrl()
GetUPNPUrls()


// 判斷url是否相連線
// @struct UPNPUrls: 指定的裝置
// @struct IGDdatas: 裝置的其他資訊
// @result : =1連線正常;=0沒有連線
UPNPIGD_IsConnected(UPNPUrls*, IGDdatas);


// 釋放url資源
FreeUPNPUrls(UPNPUrls*);

// 封裝了recv函式
ReceiveData()

// 將內外IP,port在路由器上做一個對映
// @controlURL : IGD裝置的路徑
// @servicetype: IGD裝置型別
// @extPort : 映射出的外網埠

// @inPort : 內網port埠
// @inClient : 內網IP地址
// @desc : 描述資訊;通常設定為NULL
// @proto : 該外網埠支援的型別TCP或UDP
// @remoteHost : 該埠限制的IP地址、通常設定為NULL,表示所有IP都能訪問
// @result : =0對映成功;非0失敗
UPNP_AddPortMapping(char* controlURL, servicetype, extPort, inPort, inClient, desc, proto, remoteHost);


// 刪除指定裝置、指定對映的埠
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
// @extPort : 輸入映射出的外網埠
// @proto : 輸入該外網埠支援的型別TCP或UDP
// @remoteHost : 輸入該埠限制的IP地址、通常設定為NULL,表示所有IP都能訪問
// @result : =0成功;非0失敗
UPNP_DeletePortMapping(controlURL, servicetype, extPort, proto, remoteHost);

3.對upnp常見的操作

UPNP_GetSpecificPortMappingEntry:根據指定裝置和外網埠獲得內網資訊

UPNP_GetExternalIPAddress:根據指定裝置獲得外網ip地址

UPNP_GetConnectionTypeInfo:根據指定裝置,獲取連線型別


// 根據指定的裝置、和指定外網埠和通訊型別,獲得對映埠
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
// @extPort : 輸入映射出的外網埠
// @proto : 輸入該外網埠支援的型別TCP或UDP
// @inPort : 輸出內網port埠
// @inClient : 輸出內網IP地址
// @result : =0成功;非0失敗
UPNP_GetSpecificPortMappingEntry(controlURL, servicetype, extPort, proto, inClient, inPort);


// 根據指定的裝置,獲得所有的對映埠
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
// @index : 輸出對映埠的個數
// @result : =0成功;非0失敗
UPNP_GetGenericPortMappingEntry(controlURL, servicetype, ....);


// 根據指定的IGD裝置和路徑,查詢出外網IP
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
// @expIp : 輸出外網IP地址
// @result : =0成功;非0失敗
UPNP_GetExternalIPAddress(controlURL, servicetype, extIp);

// 獲得指定裝置的狀態
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
// @status : 輸出狀態資訊
// @uptime :
// @lastconnerr: 輸出錯誤程式碼
// @result : =0成功;非0失敗
UPNP_GetStatusInfo(controlURL, servicetype, status, uptime, lastconnerror);


// 根據指定裝置,獲取連線型別
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
// @connectType: 輸出IGD裝置的連線型別
// @result : =0成功;非0失敗
UPNP_GetConnectionTypeInfo(controlURL, servicetype, connectionType);


// 獲得接收和傳送的資料包總數、和位元組總數
// @controlURL : 輸入IGD裝置的路徑
// @servicetype: 輸入IGD裝置型別
UPNP_GetTotalBytesSent(controlURL, servicetype);
UPNP_GetTotalBytesReceived(controlURL, servicetype);
UPNP_GetTotalPacketsSent(controlURL, servicetype);
UPNP_GetTotalPacketsReceived(controlURL, servicetype);