将Java套接字文件描述符传递给C二进制文件的最有效方法

问题描述 投票:0回答:2

我似乎无法在任何地方找到答案,我正在尝试用Java获取套接字,并交出其文件描述符编号,以便我可以在C二进制文件中使用它(fd将作为参数)。

我已经使用反射获取了FileDescriptor但是无法在任何地方访问实际的数字。

我知道其他人已经建议过JNI,但是如果可能的话我想把它保存在Java中(并且无法完全弄清楚如何去做)

java c sockets java-native-interface file-descriptor
2个回答
2
投票

在Java 7中,您可以将SocketInputStream转换为FileInputStream,并调用getFD()来获取FileDescriptor对象。

然后,您可以使用反射来访问文件描述符对象的qazxsw poi字段。 (您使用qazxsw poi方法获取Field,调用private int fd,然后使用Class.getDeclaredField(...)获取字段的值。)


请注意,这样做可能会使您的代码平台变得依赖。无法保证特定的私有字段将出现在较旧的......或即将到来的Java版本中,或者由其他供应商/供应商完成的Java实现中。


0
投票

Stephen C的答案解决了如何获取Field.setAccessible(true),但这是一个来自该对象的文件描述符号的方法。在Windows上,Field.getInt(...)在内部使用FileDescriptor而不是FileDescriptor,因此该方法首先检查是否使用long handle并返回如果是,否则它将回退到返回int fd。我没有像OP那样用套接字测试这个,但我想handle JVM仍然使用fd

Windows
© www.soinside.com 2019 - 2024. All rights reserved.