将Java套接字文件描述符传递给C二进制文件的最有效方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Java套接字文件描述符传递给C二进制文件的最有效方法相关的知识,希望对你有一定的参考价值。
我似乎无法在任何地方找到答案,我正在尝试用Java获取套接字,并交出其文件描述符编号,以便我可以在C二进制文件中使用它(fd将作为参数)。
我已经使用反射获取了FileDescriptor但是无法在任何地方访问实际的数字。
我知道其他人已经建议过JNI,但是如果可能的话我想把它保存在Java中(并且无法完全弄清楚如何去做)
在Java 7中,您可以将SocketInputStream
转换为FileInputStream
,并调用getFD()
来获取FileDescriptor
对象。
然后,您可以使用反射来访问文件描述符对象的qazxsw poi字段。 (您使用qazxsw poi方法获取Field,调用private int fd
,然后使用Class.getDeclaredField(...)
获取字段的值。)
请注意,这样做可能会使您的代码平台变得依赖。无法保证特定的私有字段将出现在较旧的......或即将到来的Java版本中,或者由其他供应商/供应商完成的Java实现中。
Stephen C的答案解决了如何获取Field.setAccessible(true)
,但这是一个来自该对象的文件描述符号的方法。在Windows上,Field.getInt(...)
在内部使用FileDescriptor
而不是FileDescriptor
,因此该方法首先检查是否使用long handle
并返回如果是,否则它将回退到返回int fd
。我没有像OP那样用套接字测试这个,但我想handle
JVM仍然使用fd
。
Windows
以上是关于将Java套接字文件描述符传递给C二进制文件的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章
Java(android)中socket.io的文件描述符?