我需要将C ++应用程序创建的本机winsock套接字传递给我的应用程序中使用java.net.Socket
连接到服务器的库。
这个Winsock应用程序已经负责连接插座。
如何显式设置java.net.Socket
?
答案 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);