Je dois passer un socket natif winsock créé par l'application C++ à une bibliothèque de mon application qui utilise java.net.Socket pour se connecter à un serveur. Cette application winsock prend déjà en charge la connexion de la socket. comment puis-je définir explicitement le descripteur de socket de java.net.Socket?passer le socket natif winsock au socket java
Répondre
J'ai rencontré un tel problème sous Unix, je ne sais pas si le même mécanisme fonctionne pour vous avec WinSock.
Dans notre cas, un programme en C crée un socket en utilisant un matériel spécial. Le programme C engendre le programme Java lui transmet le socket. Le programme Java construit ensuite le flux d'entrée/sortie à partir du descripteur de fichier du socket afin qu'il puisse le lire/écrire comme un socket normal.
L'extrait de code Java est ici,
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);
C'est gentil, j'ai juste besoin d'un pas de plus car je dois fournir un socket java et non des flux d'entrée/sortie. – ApriOri
Que voulez-vous besoin? –
cette socket native est liée à un pilote matériel spécial. – ApriOri
Je recommanderais de créer un module wrapper en C, puis d'utiliser JNI pour y accéder. –