2010-07-07 54 views
1

我需要将由C++应用程序创建的本机winsock套接字传递给我的应用程序中使用java.net.Socket连接到服务器的库。 这winsock appication已经照顾连接插座。 如何显式设置java.net.Socket的套接字描述符?将本地winsock套接字传递给java套接字

+0

你需要什么用的? – 2010-07-07 09:38:03

+0

这个本地套接字绑定到特殊的硬件驱动程序。 – ApriOri 2010-07-07 09:46:28

+0

我会建议在C中创建一个包装模块,然后使用JNI来访问它。 – 2010-07-07 14:15:49

回答

1

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

这很好,我只需要再向前一步,因为我必须提供一个java套接字而不是输入/输出流。 – ApriOri 2010-07-08 11:24:55