如何获取Java数据报套接字的文件描述符?我在网上搜索没有任何成功。
作者Srini
答案 0 :(得分:5)
老问题,但对于遇到此问题的其他人,你可以这样做......
DatagramSocket socket = ....();
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(socket);
FileDescriptor fd = pfd.getFileDescriptor();
答案 1 :(得分:0)
您需要一个自定义工厂来返回DatagramSocketImpl的自定义子类,该子类具有文件描述符的公共get函数。
答案 2 :(得分:0)
您可以使用反射检索 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;
}
}