我可以从文件描述符获得Java Socket技术?(Can I get a Java Socket

2019-07-31 14:50发布

当一个程序通过FastCGI的开始,它exec'd与已经打开交谈到Web服务器的插座。 套接字的文件描述符号码交给程序,但是这怎么可能被转化成有用Java中的东西,比如一个Socket实例?

我的托管服务使用的mod_fastcgi的Apache httpd的。 他们不会让我配置外部服务器在那里我提供主机:端口,通过FastCgiExternalServer的请求转发到。

Answer 1:

你不能这样做合法。 但是,你可以这样做一个黑客(不要在家里尝试这个)。 您可以从阅读is和写入os

    Class<FileDescriptor> clazz = FileDescriptor.class;

    Constructor<FileDescriptor> c;
    try {
        c = clazz.getDeclaredConstructor(new Class[] { Integer.TYPE });
    } catch (SecurityException e) {
        e.printStackTrace();
        return;
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
        return;
    }

    c.setAccessible(true);
    FileDescriptor fd;
    try {
        fd = c.newInstance(new Integer(socket));
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        return;
    } catch (InstantiationException e) {
        e.printStackTrace();
        return;
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        return;
    } catch (InvocationTargetException e) {
        e.printStackTrace();
        return;
    }

    FileOutputStream os = new FileOutputStream(fd);
            FileInputStream is = new FileInputStream(fd);


Answer 2:

你想什么Socket呢? 在插座的唯一有用的方法是的getInputStream和getOutputStream方法 ,但如果你正在运行,你已经有了那些CGI:他们是所谓的System.in和System.out的 。 :)



文章来源: Can I get a Java Socket from a file descriptor number?