【发布时间】:2010-09-22 14:44:18
【问题描述】:
如何获取 Java 数据报套接字的文件描述符?我已经在网上搜索了没有任何成功。
斯里尼
【问题讨论】:
标签: sockets file-descriptor datagram
如何获取 Java 数据报套接字的文件描述符?我已经在网上搜索了没有任何成功。
斯里尼
【问题讨论】:
标签: sockets file-descriptor datagram
老问题,但是对于遇到此问题的其他人,您可以这样做...
DatagramSocket socket = ....();
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(socket);
FileDescriptor fd = pfd.getFileDescriptor();
【讨论】:
您需要一个自定义工厂来返回 DatagramSocketImpl 的自定义子类,该子类具有文件描述符的公共 get 函数。
【讨论】:
您可以使用反射检索 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;
}
}
【讨论】: