当前位置: 技术问答>java相关
如何在JNI和C动态库之间传递SOCKET类型的值
来源: 互联网 发布时间:2015-09-17
本文导语: 我这里呢有一个C写成的动态库,里面有有几个函数分别为SOCKET通讯的建立,设置数据等等, 我现在要在JNI中调用其中有一个C函数为 SOCKET SocketConnect(char *pserver,*port) {SOCKET sockfd; ......... return SOCKET; } 还有一个...
我这里呢有一个C写成的动态库,里面有有几个函数分别为SOCKET通讯的建立,设置数据等等,
我现在要在JNI中调用其中有一个C函数为
SOCKET SocketConnect(char *pserver,*port)
{SOCKET sockfd;
.........
return SOCKET;
}
还有一个为:
int SockSendMesgSOCKET sockfd,char *buf)
{
......
}
JNI给我的函数名分别为:
JNIEXPORT jobject JNICALL Java_mytest_java8583_SocketConnect
(JNIEnv *, jclass, jstring, jint);
和
JNIEXPORT jint JNICALL Java_mytest_java8583_SockSendMesg
(JNIEnv *, jclass, jobject, jstring);
我现在对两者如何连接清楚但是就是其中SOCKET值的调用和转换不是很清楚。
敬请各位大侠帮忙谢了。。。)
小弟这里先多谢了啊。。
我现在要在JNI中调用其中有一个C函数为
SOCKET SocketConnect(char *pserver,*port)
{SOCKET sockfd;
.........
return SOCKET;
}
还有一个为:
int SockSendMesgSOCKET sockfd,char *buf)
{
......
}
JNI给我的函数名分别为:
JNIEXPORT jobject JNICALL Java_mytest_java8583_SocketConnect
(JNIEnv *, jclass, jstring, jint);
和
JNIEXPORT jint JNICALL Java_mytest_java8583_SockSendMesg
(JNIEnv *, jclass, jobject, jstring);
我现在对两者如何连接清楚但是就是其中SOCKET值的调用和转换不是很清楚。
敬请各位大侠帮忙谢了。。。)
小弟这里先多谢了啊。。
|
看了你对JNI还不是很了解
(1)C语言的SORCKET类型java是无法识别的,所以返回给java是没有用的;
其他类型比如char*也一样
(2)能够被java通过JNI调用的C语言动态库函数的函数名是要有一定的命名规则的,即你应该将C语言的动态库中SocketConnect()和SockSendMesg()改为
JNIEXPORT jobject JNICALL Java_mytest_java8583_SocketConnect
(JNIEnv *, jclass, jstring, jint);
和
JNIEXPORT jint JNICALL Java_mytest_java8583_SockSendMesg
(JNIEnv *, jclass, jobject, jstring);
然后在java代码中分别以SocketConnect()和SockSendMesg()调用。
建议你仔细先看看jdk文档中JNI的部分,然后找一些这方面的源代码仔细读一下
(1)C语言的SORCKET类型java是无法识别的,所以返回给java是没有用的;
其他类型比如char*也一样
(2)能够被java通过JNI调用的C语言动态库函数的函数名是要有一定的命名规则的,即你应该将C语言的动态库中SocketConnect()和SockSendMesg()改为
JNIEXPORT jobject JNICALL Java_mytest_java8583_SocketConnect
(JNIEnv *, jclass, jstring, jint);
和
JNIEXPORT jint JNICALL Java_mytest_java8583_SockSendMesg
(JNIEnv *, jclass, jobject, jstring);
然后在java代码中分别以SocketConnect()和SockSendMesg()调用。
建议你仔细先看看jdk文档中JNI的部分,然后找一些这方面的源代码仔细读一下