原型设置IP地址和端口
场景介绍
向客户端的通信引擎库传入IP地址和端口。
前提条件
客户已经实现了通信引擎库(示例工程为libCommunication.so动态库),并提供对外的设置IP地址和端口的函数。
开发流程
- 实现Jni初始化通信库的设置IP地址和端口的函数。
- 调用Jni设置通信库的IP地址和端口。
编码实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // 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开发过程