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

3
我需要将由C ++应用程序创建的本地Winsock套接字传递给我的应用程序中使用java.net.Socket连接服务器的库。这个Winsock应用程序已经负责连接套接字。
我该如何显式设置java.net.Socket的套接字描述符?

你需要它做什么? - Konrad Garus
这个本地套接字绑定到特殊的硬件驱动程序。 - ApriOri
我建议在C中创建一个包装器模块,然后使用JNI来访问它。 - Romain Hippeau
1个回答

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

很好,我只需要再向前迈进一步,因为我必须提供一个Java套接字而不是输入/输出流。 - ApriOri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接