无法使用 Java 获取套接字的文件描述符



我是软件开发的新手,目前我正试图获得套接字的文件描述符,我作为实习生的工作是编写与C代码(旧代码)具有相同功能的java代码(新更新)。C代码使用一个叫做getFd()的函数,经过研究,我发现java有类似于getFD()getFileDescriptor()的东西。不知怎么的,我在Socket类

中找不到它们我尝试了一堆解决方案,如使用SocketImpl(),但它不适合我…我在这个问题上卡住了2天,我不知道在尝试了几十个解决方案后该怎么做。提前感谢。

正如其他用户建议的那样,您可能应该尝试按照其设计者的意图使用Java API。

也就是说,在Mac OSX和Linux上,你可以使用反射来访问文件描述符:

Method getImplMethod = ServerSocket.class.getDeclaredMethod("getImpl");
getImplMethod.setAccessible(true);
SocketImpl socketImpl = (SocketImpl) getImplMethod.invoke(serverSocket);
Field socketFdField = SocketImpl.class.getDeclaredField("fd");
socketFdField.setAccessible(true);
FileDescriptor fd = (FileDescriptor) socketFdField.get(socketImpl);
Field fileDescriptorFdField = FileDescriptor.class.getDeclaredField("fd");
fileDescriptorFdField.setAccessible(true);
int fdInt = fileDescriptorFdField.getInt(fd);

最新更新