Comunicación de LocalSocket con el dominio de Unix en Android NDK

Tengo la aplicación de Android, que necesita establecer conexión de socket de dominio unix con nuestra biblioteca de C ++ (utilizando Android NDK)

public static String SOCKET_ADDRESS = "your.local.socket.address"; // STRING 

Hay LocalSocket en java que acepta "cadena" (your.local.socket.address)

 #define ADDRESS "/tmp/unix.str" /* ABSOLUTE PATH */ struct sockaddr_un saun, fsaun; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { perror("server: socket"); exit(1); } saun.sun_family = AF_UNIX; strcpy(saun.sun_path, ADDRESS); 

Pero el socket de dominio unix que está en capa nativa acepta "ruta absoluta". Entonces, ¿cómo pueden estas dos partes comunicarse entre sí?

Por favor comparta cualquier ejemplo si es posible

LocalSocket utiliza el espacio de nombres abstracto de Linux en lugar del sistema de archivos. En C estas direcciones se especifican añadiendo '\ 0' a la ruta.

 const char name[] = "\0your.local.socket.address"; struct sockaddr_un addr; addr.sun_family = AF_UNIX; // size-1 because abstract socket names are *not* null terminated memcpy(addr.sun_path, name, sizeof(name) - 1); 

Observe también que no debe pasar sizeof(sockaddr_un) para bind o sendto porque todos los bytes que siguen al carácter '\ 0' se interpretan como el nombre abstracto del socket. Calcule y pase el tamaño real en su lugar:

 int res = sendto(sock, &data, sizeof(data), 0, (struct sockaddr const *) &addr, sizeof(addr.sun_family) + sizeof(name) - 1); 

Pro Android C ++ con el libro NDK, capítulo 10 me ayudó a empezar con lo mismo.

  • Acceso a WebView desde otra función en la clase MainActivity
  • No obtiene respuesta en la conexión de socket
  • Androide, socket, programación, atrás, router
  • Aplicación de chat: qué tecnología es mejor para implementar aplicación de chat en Android
  • Sockets, Threads y Servicios en android, ¿cómo hacerlos trabajar juntos?
  • Conexión HTTP de Android
  • 'Permiso denegado' al conectarse al socket unix abstracto
  • DatagramSocket.bind (); Socket excepción: no se puede asignar la dirección solicitada. Emulador de Android
  • Recibe UDP en Android Marshmallow
  • AsyncSocket en java?
  • Comunicación de socket cliente / servidor de Android mediante Service o IntentService
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.