在 TCP 客户端中取消指向不完整类型的指针?(C)

cou*_*sto 0 c sockets tcp client-server

我正在尝试用 C 语言制作一个服务器和一个客户端(TCP),它们将充当一个简单的聊天系统。我对这些事情知之甚少,并且一直在参考这个服务器示例这个客户端示例

注意:按照我有限的研究建议,我将 bzero() 和 bcopy() 更改为 memset() 和 memcpy(),但是在这两种情况下都发生了错误。除此之外,我自己的客户端仅在格式和输出方面与链接示例不同。

    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent * server;

    char buffer[256];

    if (argc < 3) {
        fprintf(stderr,"usage %s hostname port\n", argv[0]);
        exit(0);
    }

    portno = atoi(argv[2]);

    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0)  { perror("failed_socket_open"); exit(1); }

    server = (struct hostent *)gethostbyname(argv[1]);

    if (server == NULL) {
        fprintf(stderr,"host isn't real, everything is a lie\n");
        exit(0);
    }

    memset((char *) &serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    memcpy( (char*)server->h_addr,(char*) &serv_addr.sin_addr.s_addr, server->h_length );
Run Code Online (Sandbox Code Playgroud)

在此行 (37) 上:

memcpy( (char*)server->h_addr, (char*)&serv_addr.sin_addr.s_addr, server->h_length );
Run Code Online (Sandbox Code Playgroud)

有人告诉我:

client.c:37: error: dereferencing pointer to incomplete type
client.c:37: error: dereferencing pointer to incomplete type
Run Code Online (Sandbox Code Playgroud)

看来这是由于没有关于 server->h_length 应提供的大小的足够信息的结果。我是否缺少某些库函数,或者其他什么?

小智 5

struct hostent,即server,定义在 中netdb.h。由于您不包含此标头,因此在执行server->.