为什么在从 Android 中的本机程序连接到 LocalServerSocket 时连接被拒绝

问题描述

一个java服务器LocalServerSocket监听一个抽象的unix域套接字,名为'myaudsocket',如:

public void listen() {
    String name = "myaudsocket";
    mSocket = new LocalServerSocket(name);
    LocalSocket client = mSocket.accept();
    ...
}

我可以通过下面的Java代码连接服务器:

public void connect() {
    String name = "myaudsocket";
    LocalSocket client = new LocalSocket();
    client.connect(new LocalSocketAddress(name));
    Log.d("client","connected to " + name);
}

但是如果我无法通过本机代码连接到服务器:

#define SOKET_NAME "@myaudsocket"
void connect() {
    char* name = SOKET_NAME;
    struct sockaddr_un addr;
    int sock = socket(AF_UNIX,SOCK_STREAM,0);
    if (sock < 0) {
        perror("Failed to create socket");
        return -1;
    }

    memset(&addr,sizeof(addr));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path,SOKET_NAME,sizeof(addr.sun_path)-1);
    if (name[0] == '@') 
       addr.sun_path[0] = '\0';
    
    if (connect(sock,(struct sockaddr *)&addr,sizeof(addr)) < 0) {
        perror("Failed to connect");
        close(sock);
        return -1;
    }
    ...
}

控制台总是说:“无法连接:连接被拒绝”。但是上面的原生代码可以在一般的Linux OS(比如Ubuntu)上运行。

我该如何解决

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)