我想设计一个recv函数
JNIEXPORT jint JNICALL Java_com_cn_connect_SocketUnit_recv(
JNIEnv * env, jclass cls, jint sock, jbyteArray buf, jint len)
我想的是JAVA成传一个byte[]数组 和长度过来。 我把接收的数据写到这个buf里面。
我现在只知道可以
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
从jbyteArray转成char*取得数据。
然后使用ReleaseByteArrayElements释放。我现在的代码大概是这样的。 if (sock == -1) {
return -1;
}
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
if (data == 0) {
return -1;
}
int ret = recv(sock, data, len, 0);
if (ret == 0) {
break; //socket probably closed
} else if (ret < 0) {
break; //handle errors appropriately
}
(*env)->ReleaseByteArrayElements(env, buf, data, 0);
但是我觉得这样做是不对的。
JNIEXPORT jint JNICALL Java_com_cn_connect_SocketUnit_recv(
JNIEnv * env, jclass cls, jint sock, jbyteArray buf, jint len)
我想的是JAVA成传一个byte[]数组 和长度过来。 我把接收的数据写到这个buf里面。
我现在只知道可以
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
从jbyteArray转成char*取得数据。
然后使用ReleaseByteArrayElements释放。我现在的代码大概是这样的。 if (sock == -1) {
return -1;
}
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
if (data == 0) {
return -1;
}
int ret = recv(sock, data, len, 0);
if (ret == 0) {
break; //socket probably closed
} else if (ret < 0) {
break; //handle errors appropriately
}
(*env)->ReleaseByteArrayElements(env, buf, data, 0);
但是我觉得这样做是不对的。
解决方案 »
- 3个button的weight都是1,为什么第一个始终要宽一些呢?
- Android:如何实现编辑文本
- 如何实现门开关的动作
- TextView显示问题
- 求高手帮助,关于视频文件得到视频帧数据问题
- 要实现一个在andriod手机上通过“打开”按钮能读取服务器的文件
- 请教个Android的问题,用AudioTrack播放音频的左右数据排列问题????????????????????????????
- 请问一下AsyncTask的用法
- 关于seekbar的拖动问题
- 求助 android studio 生成apk 安装到真机闪退
- android手机联网时会有什么系统广播发出呢??
- Android SDK下不了
然后调用env->SetByteArrayRegion(buf, 0, ret, data);
if (sock == -1) {
return -1;
}
char* data = (char*)((*env)->GetByteArrayElements(env, buf, 0));
if (data == 0) {
return -1;
}
int ret = recv(sock, data, len, 0);
if (ret == 0) {
break; //socket probably closed
} else if (ret < 0) {
break; //handle errors appropriately
}
(*env)->SetByteArrayRegion(env, buf, 0, ret, data);
(*env)->ReleaseByteArrayElements(env, buf, data, 0);
return ret;现在的代码我改成这样的了,但是没有测试请问是否该这样呢?
不清楚你的具体情况,个人觉得可以直接在c++端创建buf接收,然后返回这个buf到java层。