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