我试图在C中创建一个服务器和一个客户端(TCP),它将作为一个简单的聊天系统。我对这些事情知之甚少,并且引用了this server example和this 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
看来这是因为没有足够的信息来说明服务器 - > h_length应该提供的大小。是否有一些图书馆功能缺失,或其他什么?
答案 0 :(得分:4)
struct hostent
的{{1}}是server
中定义的netdb.h
。由于您没有包含此标头,因此在执行server->
时您将取消引用指向不完整类型的指针。