[英]What is .Net Socket.Handle equivalent for java
在Java中,有任何等效于c#功能的功能。
Socket.Handle
https://msdn.microsoft.com/zh-CN/library/system.net.sockets.socket.handle(v=vs.110).aspx
我已经在Internet上搜索了,还检查了java.net.Socket的属性,但无法提取类似的内容。 任何信息表示赞赏。
非常感谢。
如果我理解正确,则基本上需要socket.getImpl().getFileDescriptor().fd
。 这些方法/字段都不是公共的,将反射作为唯一选择:
static int getHandle(Socket socket) throws ReflectiveOperationException {
Method getImpl = Socket.class.getDeclaredMethod("getImpl");
getImpl.setAccessible(true);
SocketImpl impl = (SocketImpl) getImpl.invoke(socket);
Method getFileDescriptor = SocketImpl.class.getDeclaredMethod("getFileDescriptor");
getFileDescriptor.setAccessible(true);
FileDescriptor fileDescriptor = (FileDescriptor) getFileDescriptor.invoke(impl);
Field fd = FileDescriptor.class.getDeclaredField("fd");
fd.setAccessible(true);
return (int) fd.get(fileDescriptor);
}
从Java 9开始,它带有许多警告:
警告:发生了非法的反射访问操作
...
警告:所有非法访问操作将在以后的版本中被拒绝
结论是,(普通)Java可能不是满足此要求的正确工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.