当一个程序通过FastCGI的开始,它exec'd与已经打开交谈到Web服务器的插座。 套接字的文件描述符号码交给程序,但是这怎么可能被转化成有用Java中的东西,比如一个Socket实例?
我的托管服务使用的mod_fastcgi的Apache httpd的。 他们不会让我配置外部服务器在那里我提供主机:端口,通过FastCgiExternalServer的请求转发到。
当一个程序通过FastCGI的开始,它exec'd与已经打开交谈到Web服务器的插座。 套接字的文件描述符号码交给程序,但是这怎么可能被转化成有用Java中的东西,比如一个Socket实例?
我的托管服务使用的mod_fastcgi的Apache httpd的。 他们不会让我配置外部服务器在那里我提供主机:端口,通过FastCgiExternalServer的请求转发到。
你不能这样做合法。 但是,你可以这样做一个黑客(不要在家里尝试这个)。 您可以从阅读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);
你想什么Socket
呢? 在插座的唯一有用的方法是的getInputStream和getOutputStream方法 ,但如果你正在运行,你已经有了那些CGI:他们是所谓的System.in和System.out的 。 :)