我似乎无法在任何地方找到答案,我正在尝试用Java获取套接字,并交出其文件描述符编号,以便我可以在C二进制文件中使用它(fd将作为参数) 。
我使用反射获取了FileDescriptor但无法在任何地方访问实际数字。
我知道其他人已经建议过JNI,但如果可能的话我想把它保存在Java中(并且无法完全弄清楚如何做到这一点)
答案 0 :(得分:2)
在Java 7中,您可以将SocketInputStream
转换为FileInputStream
,并致电getFD()
以获取FileDescriptor
对象。
然后,您可以使用反射来访问FileDescriptor对象的private int fd
字段。 (您使用Class.getDeclaredField(...)
方法获取字段,调用Field.setAccessible(true)
,然后使用Field.getInt(...)
获取字段的值。)
请注意,这样做可能会使您的代码平台依赖。无法保证特定的私有字段将出现在较旧的......或即将到来的Java版本中,或者由其他供应商/供应商完成的Java实现中。
答案 1 :(得分:0)
Stephen C的答案解决了如何获得FileDescriptor
,但这是一个来自该对象的文件描述符编号的方法。在Windows上,FileDescriptor
在内部使用long handle
而不是int fd
,因此此方法首先检查是否使用handle
,如果是,则返回,否则返回fd
1}}。我没有像OP那样使用套接字对此进行测试,但我想{J}仍然使用Windows
。{/ p>
handle