【问题标题】:Derefrencing pointer to incomplete type in TCP client? (C)在 TCP 客户端中取消引用指向不完整类型的指针? (C)
【发布时间】:2014-12-14 14:40:06
【问题描述】:

我正在尝试用 C 语言创建一个服务器和一个客户端 (TCP),它们将用作一个简单的聊天系统。我对这些事情知之甚少,一直在参考this server examplethis client example .

注意:根据我有限的研究建议,我将 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 );

在这条线 (37) 上:

memcpy( (char*)server->h_addr, (char*)&serv_addr.sin_addr.s_addr, server->h_length );

有人告诉我:

client.c:37: error: dereferencing pointer to incomplete type
client.c:37: error: dereferencing pointer to incomplete type

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

【问题讨论】:

    标签: c sockets tcp client-server


    【解决方案1】:

    struct hostent,即server,在netdb.h 中定义。由于您不包含此标头,因此您在执行 server-&gt; 时取消引用指向不完整类型的指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-07
      • 2013-12-22
      • 2013-03-11
      • 2021-06-30
      相关资源
      最近更新 更多