在Android NDK中使用LocalSocket与Unix域进行通信

我有Android应用程序,需要与我们的C ++库(使用Android NDK)build立unix域套接字连接。

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

在Java中有LocalSocket接受“string”(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); 

但是在本地层的unix域套接字接受“绝对path”。 那么这两方怎么可以相互沟通?

请尽可能分享任何示例

Solutions Collecting From Web of "在Android NDK中使用LocalSocket与Unix域进行通信"

LocalSocket使用Linux抽象名称空间而不是文件系统。 在C中,这些地址是通过在path中加上'\ 0'来指定的。

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

还要注意,不应该传递sizeof(sockaddr_un)bind或发送,因为'\ 0'字符之后的所有字节都被解释为抽象套接字名称。 计算并通过实际大小,而不是:

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

与NDK书,第10章的Android C + +,帮助我开始相同的。