我是软件开发新手,目前我正在尝试获取套接字的文件描述符,我作为实习生的工作是编写与 C 代码(较旧的代码)具有相同功能的 java 代码(新更新)一)。 C代码使用了一个名为
getFd()
的函数,经过研究我发现java有类似于getFD()
或getFileDescriptor()
的功能。不知怎的,我在 Socket 类中找不到它们
我尝试了很多解决方案,例如使用
SocketImpl()
,但它对我不起作用...我已经陷入这个问题两天了,在尝试了数十种解决方案后我不知道该怎么办。预先感谢。
根据其他用户的建议,您可能应该尝试按照其设计者的意图使用 Java API。
话虽如此,这就是您如何使用反射访问文件描述符:
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);