免费P2P穿透通信 Tunnel隧道映射模块测试使用

Posted LC编程开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了免费P2P穿透通信 Tunnel隧道映射模块测试使用相关的知识,希望对你有一定的参考价值。

Tunnel模块测试

Wkf lib p2p通信库提供了Tunnel隧道通信模块,提供隧道代理网络通信。

Tunnel模块的资料如下图:

这些Tunnel模块的信息如下:

Test_lib_tunnel_client --- 提供Tunnel客户端的资料

Test_lib_tunnel_server --- 提供Tunnel服务器的资料

在这些目录下,执行 make_app.sh 脚本,就可以自动编译程序,生成对应的可执行程序。下面,分析Tunnel模块的API应用,如何快速构建一个P2P Tunnel隧道通信程序。

Tunnel客户端

在test_lib_tunnel_client目录下,提供了test_lib_tunnel_client_v1.cpp程序,源码如下:

#include <stdio.h>

#include <unistd.h>

#include <pthread.h>

#include <string.h>

#include <stdlib.h>

#include "wkf_lib_p2p.h"

//===========================================

//===========================================

//===========================================

//===========================================

int main(int argc, char* argv[])

{

int id;

int local_port = 6000; //本地端口;

int remote_port = 9000; //映射的远程目标端口;

//================

//初始化 tunnel client 模块;

//================

if(wkf_lib_tc_init())

{

LOGAPP("tc init err!\\n");

goto out;

}

//================

//获取一个 tunnel client 对象;

//================

id = p2p_tunnelc_get_obj();

if(id < 0){

LOGAPP("get tunnel client obj err, id = %d\\n", id);

goto out;

}

//================

//设置 SN 服务器地址;

//================

if(p2p_tunnelc_add_sn_addr(id, (char*)TEST_SN_IP, 9600)){

LOGAPP("add sn err\\n");

goto out;

}

//================

//设置连接UID的信息;

//================

if(p2p_tunnelc_set_con_uid(id, (char*)"ABC_XYZ_00000001", (char*)"admin", (char*)"123456"))

{

LOGAPP("pc set connet err!\\n");

goto out;

}

//================

//启动 tunnel client 模块;

//================

if(p2p_tunnelc_start(id))

{

LOGAPP("pc start err!\\n");

goto out;

}

//================

//输出 tunnel client 的状态;

//================

p2p_tunnelc_print_status(id);

//================

//设置端口映射;

//================

p2p_tunnelc_set_map_port(id, local_port, remote_port);

//================

//启动代理服务;

//================

p2p_tunnelc_start_agent_server(id);

out:

//================

//关闭 tunnel client 对象;

//================

p2p_tunnelc_close_obj(id);

//================

//销毁 tunnel client 模块;

//================

wkf_lib_tc_deinit();

LOGAPP("ok\\n");

return 0;

}

代码的具体框架如下:

  1. 调用wkf_lib_tc_init()函数,初始化tunnel client模块;
  2. 调用p2p_tunnelc_get_obj()函数,获取一个tunnel client对象;
  3. 调用p2p_tunnelc_add_sn_addr()函数,设置连接SN服务器的地址;
  4. 调用p2p_tunnelc_set_con_uid()函数,设置需要连接的UID,以及连接UID需要的验证信息;
  5. 调用p2p_tunnelc_start()函数,启动Tunnel client模块的工作;
  6. 调用p2p_tunnelc_print_status()函数,输出Tunnel client对象的信息;
  7. 调用p2p_tunnelc_set_map_port()函数,设置隧道映射的端口;
  8. 例如,设置本地的6000端口,映射到UID设备的9000端口;
  9. 调用p2p_tunnelc_start_agent_server()函数,启动代理服务;
  10. 调用p2p_tunnelc_close_obj()函数,关闭Tunnel client对象;
  11. 调用wkf_lib_tc_deinit()函数,关闭Tunnel client模块;

执行make_app.sh脚本,编译程序,得到natp2p_tunnel_client_v1和tcp_client程序。

当调用natp2p_tunnel_client_v1程序,与natp2p_tunnel_server_v1程序建立P2P通信之后,就可以执行tcp_client程序,与Tunnel server端的tcp_server通信。

Tunnel服务器

在test_lib_tunnel_server目录下,提供了test_lib_tunnel_server_v1.cpp程序,源码如下:

#include <stdio.h>

#include <unistd.h>

#include <pthread.h>

#include <string.h>

#include <stdlib.h>

#include "wkf_lib_p2p.h"

//===========================================

//===========================================

//===========================================

//===========================================

int main(int argc, char* argv[])

{

int id;

//================

//初始化 tunnel server 模块;

//================

if(wkf_lib_ts_init())

{

LOGAPP("ts init err!\\n");

goto out;

}

//================

//获取一个 tunnel server 对象;

//================

id = p2p_tunnels_get_obj();

if(id < 0){

LOGAPP("get ts id err, id = %d\\n", id);

goto out;

}

p2p_tunnels_add_sn_addr(id, (char*)TEST_SN_IP, 9600);

//==================

//设置设备的 UID, 以及需要验证的信息;

//==================

if(p2p_tunnels_set_uid_auth_info(id, (char*)"ABC_XYZ_00000001", (char*)"admin", (char*)"123456"))

goto out;

//==================

//启动服务;

//==================

p2p_tunnels_start(id);

out:

LOGAPP("tunnel server end!\\n");

//================

//销毁 tunnel server 对象;

//================

p2p_tunnels_close_obj(id);

//================

//销毁 tunnel server 模块;

//================

wkf_lib_ts_deinit();

return 0;

}

代码的具体框架如下:

  1. 调用wkf_lib_ts_init()函数,初始化tunnel server模块;
  2. 调用p2p_tunnels_get_obj()函数,获取一个tunnel server对象;
  3. 调用p2p_tunnels_add_sn_addr()函数,设置连接SN服务器的地址;
  4. 调用p2p_tunnels_set_uid_auth_info()函数,设置UID值,以及连接UID需要的用户名和密码验证信息;
  5. 调用p2p_tunnels_start()函数,启动隧道代理服务;
  6. 调用p2p_tunnels_close_obj()函数,关闭tunnel server对象;
  7. 调用wkf_lib_ts_deinit()函数,销毁tunnel server模块;

执行make_app.sh脚本,编译程序,得到natp2p_tunnel_server_v1和tcp_server程序。

那么,就分别启动这连个程序。

当调用natp2p_tunnel_client_v1程序,与natp2p_tunnel_server_v1程序建立P2P通信之后,就可以执行tcp_client程序,与Tunnel server端的tcp_server通信。

测试的用户,如果没有P2P服务器,可以联系作者,提供测试服务器。

P2P模块的软件资料,可以从下方连接获取:

链接:https://pan.baidu.com/s/1WimMcHRhEX9Z_gC1grNkKQ

提取码:6688

如果有任何疑问,可以随时联系作者:韦凯峰 13926572996(手机/微信同号)

以上是关于免费P2P穿透通信 Tunnel隧道映射模块测试使用的主要内容,如果未能解决你的问题,请参考以下文章

免费P2P穿透通信 Tunnel隧道映射模块测试使用

免费P2P穿透通信 Tunnel隧道映射模块测试使用

免费P2P穿透通信 P2P模块测试使用

免费P2P穿透通信 P2P模块测试使用

免费P2P穿透通信 P2P模块测试使用

免费P2P穿透通信 RDT可靠通信模块测试使用