---
title: 原型设置IP地址和端口
description: "向客户端的通信引擎库传入IP地址和端口。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/armnative/kunpengcpsvideo_16_0018.html
sourcePath: /source/zh/kunpengboostkithistory/2300/armnative/kunpengcpsvideo_16_0018.html
indexId: e4ff29a8a7dd5bcbbe194795c5fc66af45c54582eec95da16d25374ba4827b7577
---
# 原型设置IP地址和端口

#### 场景介绍

向客户端的通信引擎库传入IP地址和端口。


#### 前提条件

客户已经实现了通信引擎库（示例工程为libCommunication.so动态库），并提供对外的设置IP地址和端口的函数。


#### 开发流程

1. 实现Jni初始化通信库的设置IP地址和端口的函数。
2. 调用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;
}
```
