将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二进制文件的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章

通过UNIX域套接字传递文件描述符

Nebula系列通过UNIX域套接字传递描述符的应用

Java(android)中socket.io的文件描述符?

java数据报套接字的文件描述符

将 PHP 变量传递给外部 JavaScript(或 jQuery)文件的最有效方法

将 PHP 变量传递给外部 JavaScript(或 jQuery)文件的最有效方法