java数据报套接字的文件描述符

时间:2010-09-22 14:44:19

标签: sockets file-descriptor datagram

如何获取Java数据报套接字的文件描述符?我在网上搜索没有任何成功。

作者Srini

3 个答案:

答案 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;
    }

}