2010-07-07 5 views
1

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

+0

Que voulez-vous besoin? –

+0

cette socket native est liée à un pilote matériel spécial. – ApriOri

+0

Je recommanderais de créer un module wrapper en C, puis d'utiliser JNI pour y accéder. –

Répondre

1

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

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