免费P2P穿透通信 Tunnel隧道映射模块测试使用
Posted Linux编程学堂
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;
代码的具体框架如下:
- 调用wkf_lib_tc_init()函数,初始化tunnel client模块;
- 调用p2p_tunnelc_get_obj()函数,获取一个tunnel client对象;
- 调用p2p_tunnelc_add_sn_addr()函数,设置连接SN服务器的地址;
- 调用p2p_tunnelc_set_con_uid()函数,设置需要连接的UID,以及连接UID需要的验证信息;
- 调用p2p_tunnelc_start()函数,启动Tunnel client模块的工作;
- 调用p2p_tunnelc_print_status()函数,输出Tunnel client对象的信息;
- 调用p2p_tunnelc_set_map_port()函数,设置隧道映射的端口;
- 例如,设置本地的6000端口,映射到UID设备的9000端口;
- 调用p2p_tunnelc_start_agent_server()函数,启动代理服务;
- 调用p2p_tunnelc_close_obj()函数,关闭Tunnel client对象;
- 调用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;
代码的具体框架如下:
- 调用wkf_lib_ts_init()函数,初始化tunnel server模块;
- 调用p2p_tunnels_get_obj()函数,获取一个tunnel server对象;
- 调用p2p_tunnels_add_sn_addr()函数,设置连接SN服务器的地址;
- 调用p2p_tunnels_set_uid_auth_info()函数,设置UID值,以及连接UID需要的用户名和密码验证信息;
- 调用p2p_tunnels_start()函数,启动隧道代理服务;
- 调用p2p_tunnels_close_obj()函数,关闭tunnel server对象;
- 调用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隧道映射模块测试使用的主要内容,如果未能解决你的问题,请参考以下文章