将本机Winsock套接字传递到Java套接字

将本机Winsock套接字传递到Java套接字,java,winsock,native,Java,Winsock,Native,我需要把一个由C++应用程序创建的本地Winsock套接字传递给我的应用程序中的一个库,该库使用 java .net .Socket < /C> >连接到一个服务器。 此Winsock应用程序已负责连接套接字 如何显式设置java.net.socket的套接字描述符?我在Unix上遇到了这样一个问题,不确定WinSock是否可以使用相同的机制 在我们的例子中,C语言中的程序使用特殊硬件创建套接字。C程序生成Java程序并将其传递到套接字。Java程序然后从套接字的文件描述符构造输入/输出流,这样

我需要把一个由C++应用程序创建的本地Winsock套接字传递给我的应用程序中的一个库,该库使用<代码> java .net .Socket < /C> >连接到一个服务器。 此Winsock应用程序已负责连接套接字


如何显式设置
java.net.socket的套接字描述符?

我在Unix上遇到了这样一个问题,不确定WinSock是否可以使用相同的机制

在我们的例子中,C语言中的程序使用特殊硬件创建套接字。C程序生成Java程序并将其传递到套接字。Java程序然后从套接字的文件描述符构造输入/输出流,这样它就可以像普通套接字一样对其进行读/写

Java代码片段在这里

    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);
Class clazz=FileDescriptor.Class;
构造器c;
试一试{
c=clazz.getDeclaredConstructor(新类[]{Integer.TYPE});
}捕获(安全异常e){
e、 printStackTrace();
返回;
}捕获(无此方法例外){
e、 printStackTrace();
返回;
}
c、 setAccessible(true);
文件描述符fd;
试一试{
fd=c.newInstance(新整数(套接字));
}捕获(IllegalArgumentException e){
e、 printStackTrace();
返回;
}捕获(实例化异常e){
e、 printStackTrace();
返回;
}捕获(非法访问例外e){
e、 printStackTrace();
返回;
}捕获(调用TargetException e){
e、 printStackTrace();
返回;
}
FileOutputStream os=新的FileOutputStream(fd);
FileInputStream is=新的FileInputStream(fd);

你需要它做什么?这个本机套接字绑定到特殊的硬件驱动程序。我建议用C创建一个包装器模块,然后使用JNI访问它。这很好,我只需要再向前一步,因为我必须提供java套接字,而不是输入/输出流。