我是软件开发的新手,目前我正试图获得套接字的文件描述符,我作为实习生的工作是编写与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);