RDX*_*RDX 9 sockets android network-programming unix-socket android-ndk
我有Android应用程序,需要与我们的C++库建立unix域套接字连接(使用Android NDK)
public static String SOCKET_ADDRESS = "your.local.socket.address"; // STRING
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
但是在本机层的unix域套接字接受"绝对路径".那么这两方如何相互沟通呢?
如果可能,请分享任何示例
Joh*_*ohn 13
LocalSocket使用Linux抽象命名空间而不是文件系统.在C中,这些地址是通过在路径上加上'\ 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);
Run Code Online (Sandbox Code Playgroud)
另请注意,不应传递sizeof(sockaddr_un)给 bind或者sendto因为'\ 0'字符后面的所有字节都被解释为抽象套接字名称.计算并传递实际大小:
int res = sendto(sock, &data, sizeof(data), 0,
(struct sockaddr const *) &addr,
sizeof(addr.sun_family) + sizeof(name) - 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9686 次 |
| 最近记录: |