原型设置IP和端口
场景介绍
向客户端的通信引擎库传入IP和端口。
前提条件
客户已经实现了通信引擎库(示例工程为libCommunication.so动态库),并提供对外的设置IP和端口的函数。
开发流程
- 实现Jni初始化通信库的设置IP和端口的函数。
- 调用Jni设置通信库的IP和端口。
编码实例
// JAVA调用
public class Activity implements BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
if (!NetConfig.initialize()) {
// 通信库初始化失败,退出activity
}
// 第三个参数为通信协议类型, 0是tcp
if (!NetConfig.setNetConfig(proxyIp, proxyPort, 0)) {
// 通信库设置IP或者端口
}
}
}
// Jni实现
JNIEXPORT jboolean JNICALL NET_CONFIG_JNI(initialize)(JNIEnv* env, jclass cls)
{
(void) env;
(void) cls;
if (g_handle != nullptr) {
return true;
}
// 加载通信的动态库
g_handle = dlopen(LIB_COMM_NAME.c_str(), RTLD_GLOBAL | RTLD_LAZY);
if (g_handle == nullptr) {
ERR("error: Failed to open shared library:%s", LIB_COMM_NAME.c_str());
return false;
}
// 寻找到ConfigNetAddress设置IP和端口的函数
const std::string CONFIG_NET_ADDRESS_FUNC = "ConfigNetAddress";
g_configNetAddressFunc = reinterpret_cast<ConfigNetAddressFunc>(
dlsym(g_handle, CONFIG_NET_ADDRESS_FUNC.c_str()));
if (g_configNetAddressFunc == nullptr) {
dlclose(g_handle);
return false;
}
return true;
}
JNIEXPORT jboolean JNICALL NET_CONFIG_JNI(setNetConfig)(JNIEnv* env, jclass cls, jstring ip, jint port, jint type)
{
(void) cls;
(void) env;
if (g_configNetAddressFunc == nullptr) {
ERR("setNetConfig failed, g_configNetAddressFunc is nullptr");
return false;
}
// 设置IP和端口
g_configNetAddressFunc(GetIpHostOrder(Jstring2String(env, ip)), port, type);
return true;
}
父主题: API开发过程