0

プログラムがFastCGIを介して開始されると、Webサーバーと通信するためにすでに開いているソケットで実行されます。ソケットのファイル記述子番号はプログラムに渡されますが、それをSocketインスタンスなどのJavaで役立つものに変換するにはどうすればよいでしょうか。

私のホスティングサービスは、Apachehttpdにmod_fastcgiを使用しています。FastCgiExternalServerを介してリクエストを転送するためのhost:portを提供する外部サーバーを構成することはできません。

4

2 に答える 2

1

何のために欲しいSocketですか?ソケット内の唯一の有用なメソッドはgetInputStreamgetOutputStreamですが、CGI として実行している場合は、既にそれらを持っています: それらはSystem.inSystem.outと呼ばれます。:)

于 2009-08-07T08:25:06.180 に答える
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);
于 2009-08-07T12:30:23.267 に答える