【问题标题】:File descriptor of a java datagram socketjava数据报套接字的文件描述符
【发布时间】:2010-09-22 14:44:18
【问题描述】:

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

斯里尼

【问题讨论】:

    标签: sockets file-descriptor datagram


    【解决方案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;
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-25
          • 2012-11-02
          • 1970-01-01
          • 2020-09-08
          • 2011-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多