Sockets_Client_Server_communication_Linux_C

Sockets_Client_Server_communication_Linux_C

嗨,今天我想学习 c 和 Linux 中的套接字通信,但是我的下面的代码没有按预期工作。虽然我知道错误发生的位置,但我找不到问题。

server.c

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

char data[100];

int main()
{
    int socket_descrp,server_len;
    socket_descrp = socket(AF_UNIX,SOCK_STREAM,0);
    if(socket_descrp<0)
    {
     perror("server Socket failed\n");
     exit(1);
     }

    struct sockaddr_un server,client; 
    int clientlen;
    server.sun_family = AF_UNIX;
    strcpy(server.sun_path,"mysocket");
    unlink("mysocket");
    server_len = sizeof(server);

    if(bind(socket_descrp,(struct sockaddr *)&server,server_len)<0){
        printf("bind error\n");
        exit(1);

    }

    if(listen(socket_descrp,1)<0)
    {
        printf("listen error\n");
        exit(1);
    }

    if(accept(socket_descrp,(struct sockaddr*)&client,&clientlen)<0)
    {
        printf("accept error\n");
        exit(1);
    }



    if(read(socket_descrp,data,99)<0)
    {
        perror("Error occured in reading\n");
        exit(1);
    }
    else if(read(socket_descrp,data,99)==0)
    {
        printf("No bytes are read\n");
        exit(1);
    }
    else
        printf("Reading from client\n");

    printf("The read content is: %s\n",data);



    close(socket_descrp);   
    return 0;

}

client.c

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

char data[100]="Hello World!";

int main()
{
    int socket_descrp,client_len;
    socket_descrp = socket(AF_UNIX,SOCK_STREAM,0);
    if(socket_descrp<0)
    {
     perror("client Socket failed\n");
     exit(1);
     }

    struct sockaddr_un client;

    client.sun_family = AF_UNIX;
    strcpy(client.sun_path,"mysocket");
    client_len = sizeof(client);

    if(connect(socket_descrp,(struct sockaddr*)&client,client_len)<0)
    {
     printf("Connection error\n");
     exit(1);
    }

    if(write(socket_descrp,data,strlen(data))<0)
    {
        printf("Error writing to the socket\n");
        exit(1);
    }

    return 0;

}

打印的错误消息是 "Error occured in reading: invalid argument" 服务器可执行文件。我不明白为什么它不能读取。 客户端可执行文件未打印任何错误消息。我花了将近 2 个小时试图找到问题所在。 :(

您无法从服务器套接字读取。 accept returns 通过以下方式通信的套接字:

    client_sock = accept(socket_descrp, ...);
    read(client_sock, ...);