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

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

我是软件开发新手,目前我正在尝试获取套接字的文件描述符,我作为实习生的工作是编写与 C 代码(较旧的代码)具有相同功能的 java 代码(新更新)一)。 C代码使用了一个名为

getFd() 
的函数,经过研究我发现java有类似于
getFD()
getFileDescriptor()
的功能。不知怎的,我在 Socket 类中找不到它们

我尝试了很多解决方案,例如使用

SocketImpl()
,但它对我不起作用...我已经陷入这个问题两天了,在尝试了数十种解决方案后我不知道该怎么办。预先感谢。

java sockets socket.io inputstream file-descriptor
1个回答
0
投票

根据其他用户的建议,您可能应该尝试按照其设计者的意图使用 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);
© www.soinside.com 2019 - 2024. All rights reserved.