没有产品在购物车中。
👉文档说明
本文档是对游戏盾sdk中不常用到的一些函数进行功能说明。这些函数功能在特定的场景下可能对您的项目有帮助。在阅读本文档前请先阅读另一个普通功能的 sdk 说明,它里面把sdk 的原理和如何集成描述的较为清楚。我们也为高级功能做了示例项目,请查看“demo 高级功能”下的项目。
👉解决端口冲突
经过多年的观察及统计,端口冲突问题只是在个别客户端设备上发生且发生概率及低。但为彻底解决这个问题,我们还是建议您采用我们提供的高级功函数能将这个问题彻底解决掉。
由于我们的 sdk 是根据您配置的“转发规则”在客户端设备上开相应的端口,这就有极低的概率在个别的客户端发生端口冲突。端口冲突有两类情形:
✨第一种情形:您配置的某个端口在个别客户端上已被其它应用占用了,则该用户不能正常使用您的应用;
✨第二种情形:您有多个应用但使用同一个实例,而且用户在同一个设备上有时又会同时打开您的多个应用;用户打开的第一个应用时已把您实例的所有端口都占用了,第二个应用打开时就无法打开这些端口了。
这个问题在 PC 上没关系,第二个打开的应用业务是正常的,因为第二个应用会通过第一个应用连接到 sdk,但在移动端就会有问题,第二个应用在一开始时还是正常的,因为这时第二个应用会通过第一个应用连接到 sdk,在用户使用第二个应用时第一个应用会被切到后台,过段时间第一个应用可能会被系统休眠,这时第二个应用就无法连接了。
✅解决这个问集成起来也是很简单的,代码过程如下👇:
dunSetAutoChangePort(1);//设置成自动更换冲突端口,只需要调用一次
int ret = clinkStart(key);//启动盾,有些系统用 start 具体请看另一个文档,只需要调用一次
//在需要新建连接时调用下面这行代码来获取新端口
int new_tcpPort = dunGetCurrentTCPPort("127.0.10.21", 600);//获取新的tcp对应的端口
//接下来采用new_tcpPort来连接应用
//connect("127.0.10.21", new_tcpPort) 例如这行伪代码
再举个例子,例如转发规则里配置的是 127.0.10.21:600 转到 202.23.56.9:600,未集成盾前和集成盾后并解决端口冲突的对比伪代码👇:
未集成盾前的连接 connect("202.23.56.9",600)
集成盾后的连接 connect("127.0.10.21", dunGetCurrentTCPPort("202.23.56.9",600))
👉设置是否自动更换冲突的端口:
本函数必须在调用盾 start 前调用才有效。
函数原型:void dunSetAutoChangePort(int val)
参数:val:是否自动更换。
✨功能:当 val 设为 1,在盾启动时如果检测到某个端口已被占用或其它原因法无打开这个这端口时,就会自动生成一个随机可用的端口,并把这个随机生成的端口和原来的端口进行关联, 您的程序在新建连接时就可以通过 sdk 提供的dunGetCurrentTCPPort 或dunGetCurrentUDPPort 函数来获取新生成的端口,采用新的端口来进行连接,这样就解决了端口冲突问题。
下面是各系统下对应的 sdk 函数定义,具体调用示例可查看“demo 高级功能”里的项目👇:
✅Windows:
extern "C" CLINKAPI_API void dunSetAutoChangePort(int val);
✅android:
类:com.dun.clinkapi.Api
public native void dunSetAutoChangePort(int val);
✅IOS 静态库:
类:ClinkAPI
void dunSetAutoChangePort(int val);
✅IOS 动态库:
extern "C" void dunSetAutoChangePort(int val);
✅Unity
类:ClinkSDKForUnity
public static void dunSetAutoChangePort(int val)
✅Uni-app
插件name:dunClinkApiForUni
插件函数:dunSetAutoChangePort(val)
👉获取当前tcp对应端口:
在新建 tcp 连接前您要调用这个函数来获取您将要连接的端口对应的新端口,因为您原来的端口可能存在端口冲突,sdk 已将该端口换成另一个端口。
函数原型:int dunGetCurrentTCPPort(const char* ip, int port)
参数:ip:转发规则中的客户连接 IP,也就是 127 开头的 IP
port:转发规则中的客户连接端口,也就是 127 开头 IP 的对应端口
返回:获取到的新端口,如果传入的端口没有冲突或转发规则不存在返回的将和传入的端口一样,如果有冲突返回的是改变后的新端口。
下面是各系统下对应的 sdk 函数定义,具体调用示例可查看“demo 高级功能”里的项目👇:
✅Windows:
extern "C" CLINKAPI_API int dunGetCurrentTCPPort(const char* ip, int port);
✅Android:
类:com.dun.clinkapi.Api
public native int dunGetCurrentTCPPort(String ip,int port);
✅IOS 静态库:
类:ClinkAPI
int dunGetCurrentTCPPort(const char* ip, int port);
✅IOS 动态库:
extern "C" void dunGetCurrentTCPPort(int val);
✅Unity
类:ClinkSDKForUnity
public static int dunGetCurrentTCPPort(string ip, int port)
✅Uni-app
插件name:dunClinkApiForUni
插件函数:dunGetCurrentTCPPort(ip,port)
👉获取当前udp对应端口
在新建 udp 连接前您要调用这个函数来获取您将要连接的端口对应的新端口,因为您原来的端口可能存在端口冲突,sdk 已将该端口换成另一个端口。
函数原型:int dunGetCurrentUDPPort(const char* ip, int port)
参数:ip:转发规则中的客户连接 IP,也就是 127 开头的 IP
port:转发规则中的客户连接端口,也就是 127 开头 IP 的对应端口
返回:获取到的新端口,如果传入的端口没有冲突或转发规则不存在返回的将和传入的端口一样,如果有冲突返回的是改变后的新端口。
下面是各系统下对应的 sdk 函数定义,具体调用示例可查看“demo 高级功能”里的项目👇:
✅Windows:
extern "C" CLINKAPI_API int dunGetCurrentUDPPort(const char* ip, int port);
✅Android:
类:com.dun.clinkapi.Api
public native int dunGetCurrentUDPPort(String ip,int port);
✅IOS 静态库:
类:ClinkAPI
int dunGetCurrentUDPPort(const char* ip, int port);
✅IOS 动态库:
extern "C" void dunGetCurrentUDPPort(int val);
✅Unity
类:ClinkSDKForUnity
public static int dunGetCurrentUDPPort(string ip, int port)
✅Uni-app
插件name:dunClinkApiForUni
插件函数:dunGetCurrentUDPPort(ip,port)
👉获取客户端IP:
用来在客户端获取该客户端当前的 IP。转发规则中“获取 IP 方式”无论设成什么, 这个接口都是有效的,这个是在客户端获取的,转发规则是给您的服务器端获取的,两个没有关系,只是获取到的客户端 IP 都是一样的。
🌐例如:您可以在用户登录时,把登录信息和客户端 IP 一起发送到登录服务器,这样如果你后端服务器存在多次转发的话也可获取到客户的真实 IP。
函数原型:long long dunGetClientIP()
返回:有符号 64 位小字头整数 IP 值,通过其它函数可转成字符串格式的 IP,返回 0,说明盾未启动或未启动成功。
将整数 IP 转成字符串格式 IP 算法代码如下:👇
string ipstr = ip / 256 / 256 / 256 % 256 + "." + ip / 256 / 256 % 256 + "." + ip / 256 % 256 + "." + ip % 256;
下面是各系统下对应的 sdk 函数定义,具体调用示例可查看“demo 高级功能”里的项目👇:
✅Windows:
extern "C" CLINKAPI_API long long dunGetClientIP();
✅Android:
类:com.dun.clinkapi.Api
public native long dunGetClientIP();
✅IOS 静态库:
类:ClinkAPI
long long dunGetClientIP();
✅IOS 动态库:
extern "C" long long dunGetClientIP();
✅Unity
类:ClinkSDKForUnity
public static long dunGetClientIP()
✅Uni-app
插件name:dunClinkApiForUni 插件函数:dunGetClientIP()
基础基础指南查看:游戏盾SDK接入指南:从零开始的完整集成教程(2025最新版)
游戏盾产品介绍:点击查看
游戏盾价格表:点击查看