为什么 Write 系统调用不向套接字文件写入任何内容?

Why is the Write system call in not writing anything to the sockets file?

我正在编写一个简单的服务器客户端程序来交换数据。在我写入套接字文件后,写入不会失败,甚至不是部分写入。但是当我使用 ls -l 检查套接字文件的详细信息时,我仍然看到它的大小为零并且服务器没有收到任何东西。谁能帮我解决我在这里做错了什么??

这是server.c

int main()
{
    int socket_fd = 0;
    struct sockaddr_un addr;
    int result = -1;
    char buffer[MAX_BUFFER_SIZE];

    printf("Creating a socket\n");
    socket_fd = socket(AF_UNIX,SOCK_STREAM,0);
    if(socket_fd == -1)
    {
        perror("SOCKET");
        return 0;
    }
    printf("Socket has been created %d\n",socket_fd);

    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path,_SOCKET_PATH,sizeof(addr.sun_path)-1);

    printf("PATH : %s\n",addr.sun_path);

    if(remove(_SOCKET_PATH) == -1)
    {
        perror("REMOVE");
        return 0;
    }

    printf("Binding the socket\n");
    result = bind(socket_fd,(struct sockaddr *)&addr,sizeof(struct sockaddr_un));
    if(result == -1)
    {
        perror("BIND");
        return 0;
    }
    printf("Binding the socket is done\n");

    printf("Listening to the socket\n");

    if(listen(socket_fd,1) == -1)
    {
        perror("Listen");
        return 0;
    }

    if((result = accept(socket_fd,NULL,NULL)) == -1)
    {
        perror("ACCEPT");
        return 0;
    }

    printf("Connection Accepted\n");

    while (1)
    {
        while (result = read(socket_fd,buffer,sizeof(buffer)-1) > 0)
        {
            printf("Client said : %s\n",buffer);
        }
    }
}

这是client.c

int main()
{
    int socket_fd = 0;
    struct sockaddr_un addr;
    int result = -1;
    char buffer[MAX_BUFFER_SIZE];

    printf("Creating a socket\n");
    socket_fd = socket(AF_UNIX,SOCK_STREAM,0);
    if(socket_fd == -1)
    {
        perror("SOCKET");
        return 0;
    }
    printf("Socket has been found %d\n",socket_fd);

    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path,_SOCKET_PATH,sizeof(addr.sun_path)-1);

    printf("Connecting to the socket\n");
    result = connect(socket_fd,(struct sockaddr *)&addr,sizeof(struct sockaddr_un));
    if(result == -1)
    {
        perror("CONNECT");
        return 0;
    }

    printf("The client is connected to the server.\n");

    while (1)
    {
        memset(buffer,0,sizeof(buffer));
        scanf("%s",buffer);
        printf("DATA WRITTEN %s,%d\n",buffer,strlen(buffer)+1);
        result = write(socket_fd,buffer,strlen(buffer)+1);
        printf("result = %d\n",result);
        sleep(5);
    }
}

感谢您的帮助!

if((result = accept(socket_fd,NULL,NULL)) == -1)
...
    while (result = read(socket_fd,buffer,sizeof(buffer)-1) > 0)

您正在尝试从服务器套接字 (socket_fd) 读取数据。相反,您需要从 accept 返回的新套接字中读取,即您在 result = accept... 中调用的 result。引用自man accept

On success, these system calls return a nonnegative integer that is a file descriptor for the accepted socket. On error, -1 is returned, and errno is set appropriately.