Tengo un código C existente que usa sockets sin procesar ICMP para hacer Ping y necesito usar este código en Java ya que Java no admite paquetes ICMP. Cuando envuelvo el código en JNI y lo llamo, el código C no puede obtener el socket al hacer:La mejor manera de hacer una programación de socket RAW con Java
socket (AF_INET, SOCK_RAW, 1);
Supongo que Java ha eliminado algunos privilegios que inhabilitan el uso del socket sin formato del proceso de Java. Esto debo encontrar una solución para.
he observado lo siguiente:
- Si escribo un programa de C y llamo a eso de Java utilizando el código de tiempo de ejecución en forma de horquilla puede abrir el zócalo.
- Si ejecuto este código nativo de Eclipse, también se ejecuta correctamente. Supongo que esto proviene del hecho de que Eclipse se ha iniciado desde eclipse.exe, y no desde java.exe.
Esto significa que podría resolver mi problema eligiendo una de estas dos estrategias, pero tampoco me gusta. ¿Hay otras formas en que logre que Java acepte que el código JNI está abriendo este socket?
Editar: Cuanto más miro este problema, me imagino que debe ser un problema relacionado con Windows 7 con respecto a cómo se inicia Java.
También parece que si tiene ventanas para comportarse o si se encuentra en otra plataforma que no sea Windows, también podría usarse el método InetAddress.isReachable().
Esta biblioteca se ve genial. Aunque está haciendo lo mismo que nuestro código nativo, mi problema debe estar relacionado con Windows. – Knubo
Sí, creo que escribir bibliotecas JNI es un poco doloroso. Entonces, cuando tenga dudas, use algo que ya exista. ¿Obtuviste esta lib para trabajar con Windows 7 o también está fallando? – Andy
Decidimos ir con Runtime.exec() ya que tenemos que resolverlo y seguir avanzando. Creo que tu respuesta es la mejor hasta el momento y realmente debería resolver mi pregunta, aunque no es mi problema, así que lo aceptaré :) – Knubo