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

问题描述 投票:3回答:1

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

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

java winsock native
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);
© www.soinside.com 2019 - 2024. All rights reserved.