设计背景:
1. APP 需要不断与中控系统进行数据包通信,设计分包,重发 机制,负荷压力大,在JAVA层实现,效率慢,于是提到JNI 层实现.
JAVA
private native void initUDPSocket(int port); private native String getLocalSocketIP(); private native void sendData(String ip, int port, byte[] data, int len); private native void freeSocket();
2.JNI:
//MAX data buffer size #define MAX_BUFFER_SIZE 1024 static void BindSocketToPort(JNIEnv* env, jobject obj, int sd, unsigned short port); void* ReceiveFromSocket(void* args); static int m_udpSocket; static int m_isExit = 0; static JavaVM* gVm = NULL; static jobject gObj = NULL; static jmethodID gOnReceiveData = NULL; char* TAG= "NATIVE_UDPMANAGER"; jint JNI_OnLoad(JavaVM* vm, void* reserved) { gVm = vm; return JNI_VERSION_1_4; } //初始化 JNIEXPORT void JNICALL Java_com_controlService_UDPManager_initUDPSocket (JNIEnv * env, jobject obj, jint port) { if(NULL == gObj){ gObj = (*env)->NewGlobalRef(env,obj); if(NULL == gObj) return; } if(NULL == gOnReceiveData){ jclass clazz = (*env)->GetObje