大螃嗨

好记性不如烂笔头

用户工具

站点工具


ethereum_cpp项目结构_p2p

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
ethereum_cpp项目结构_p2p [2017/09/27 07:51] – 创建 螃蟹ethereum_cpp项目结构_p2p [2018/01/09 03:13] (当前版本) 螃蟹
行 3: 行 3:
 =====概念===== =====概念=====
   * UPnP  miniupnpc   * UPnP  miniupnpc
-  * +  * [[以太坊p2p节点发现算法|以太坊p2p节点发现算法]] 
 + 
 + 
 +====miniupnpc==== 
 + 
 +开源的UPnP实现库,官网如下:http://miniupnp.free.fr/ 
 + 
 +===miniupnpc库主要使用的头文件有=== 
 + #include "miniwget.h" 
 + #include "miniupnpc.h" 
 + #include "upnpcommands.h" 
 + #include "upnperrors.h" 
 + 
 +====miniupnpc.h使用的函数有==== 
 +<code cpp> 
 +// 查询局域网内所有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); 
 + 
 +</code> 
 +====对upnp常见的操作==== 
 + // 根据指定的设备、和指定外网端口和通讯类型,获得映射端口 
 + // @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); 
 + 
 + 
ethereum_cpp项目结构_p2p.1506498662.txt.gz · 最后更改: 2017/09/27 07:51 由 螃蟹