java数据报套接字的文件描述符
Posted
技术标签:
【中文标题】java数据报套接字的文件描述符【英文标题】:File descriptor of a java datagram socket 【发布时间】:2010-09-22 14:44:18 【问题描述】:如何获取 Java 数据报套接字的文件描述符?我已经在网上搜索了没有任何成功。
斯里尼
【问题讨论】:
【参考方案1】:老问题,但是对于遇到此问题的其他人,您可以这样做...
DatagramSocket socket = ....();
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(socket);
FileDescriptor fd = pfd.getFileDescriptor();
【讨论】:
【参考方案2】:您需要一个自定义工厂来返回 DatagramSocketImpl 的自定义子类,该子类具有文件描述符的公共 get 函数。
【讨论】:
【参考方案3】:您可以使用反射检索 FileDescriptor。以下作品适用于 Sun-Java
public static FileDescriptor getFileDescriptor(DatagramSocket ds)
try
final Field fimpl = ds.getClass().getDeclaredField("impl");
fimpl.setAccessible(true);
final DatagramSocketImpl impl = (DatagramSocketImpl) fimpl.get(ds);
final Method gfd = DatagramSocketImpl.class.getDeclaredMethod("getFileDescriptor",
new Class<?>[0]);
gfd.setAccessible(true);
return (FileDescriptor) gfd.invoke(impl);
catch (final Exception e)
e.printStackTrace();
return null;
本机套接字可以通过
public static int FdToInt(FileDescriptor fd)
try
final Field ffd = FileDescriptor.class.getDeclaredField("fd");
ffd.setAccessible(true);
return (Integer) ffd.get(fd);
catch (final Exception e)
e.printStackTrace();
return -1;
【讨论】:
以上是关于java数据报套接字的文件描述符的主要内容,如果未能解决你的问题,请参考以下文章