原型设置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开发过程