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

时间:2010-07-07 09:36:04

标签: java winsock native

我需要将C ++应用程序创建的本机winsock套接字传递给我的应用程序中使用java.net.Socket连接到服务器的库。 这个Winsock应用程序已经负责连接插座。

如何显式设置java.net.Socket

的套接字描述符

1 个答案:

答案 0 :(得分:3)

我在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);