2011-07-27 32 views
0

直到星期一,我的代碼運行良好,但今天我得到client.c:61:25:錯誤:解除引用指向不完整類型的指針 client.c:63:16:error:dereferencing pointer到不完整的類型在客戶端套接字代碼中解除引用錯誤

這行代碼再次寫在下面。任何形式的幫助,將不勝感激。

   #include <stdio.h> 
       #include <stdlib.h> 
       #include <string.h> 
       #include <math.h> 
       #include <sys/types.h> 
       #include <sys/socket.h> 
       #include <netinet/in.h> 
       #define MAXPROFILES 2 

       int main(int argc, char *argv[]) 
      { 
       int sockfd, portno, n; 
       struct sockaddr_in serv_addr; 
       struct hostent *server; 
       unsigned char buf[1024]; 

       struct profile_t 
      { 
       unsigned char length; 
       unsigned char type; 
       unsigned char *data; 
      }; 

       typedef struct profile_datagram_t 
      { 
      unsigned char src[4]; 
      unsigned char dst[4]; 
      unsigned char ver; 
      unsigned char n; 
      struct profile_t profiles[MAXPROFILES];  
      } header; 

      header outObj; 

      if (argc < 3) { 
      fprintf(stderr,"usage: %s hostname port\n", argv[0]); 
      exit(0); 
      } 
      portno = atoi(argv[2]); //Convert ASCII to integer 
      sockfd = socket(AF_INET, SOCK_STREAM, 0); // socket file descriptor 


      if (sockfd < 0) 
      error("ERROR DETECTED !!! Problem in opening socket\n"); 

      server = gethostbyname(argv[1]); 
      if (server == NULL) { 
      fprintf(stderr,"ERROR DETECTED !!!, no such server found \n"); 
      exit(0); 
      } 

      bzero((char *) &serv_addr, sizeof(serv_addr)); //clear the memory for server address 

      serv_addr.sin_family = AF_INET;  
      bcopy((char *)server->h_addr, 
        (char *)&serv_addr.sin_addr.s_addr, 
            server->h_length); 

      serv_addr.sin_port = htons(portno); 

      printf("Client 1 trying to connect with server host %s on port %d\n", argv[1], portno); 


      if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) 
      error("ERROR in connection"); 

      printf("SUCCESS !!! Connection established \n"); 

的錯誤是在線路:

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

'&serv_addr.sin_addr.s_addr'不是'serv_addr.sin_addr.s_addr'嗎? – leppie

回答

6

您還沒有包括的gethostbyname聲明:

#include <netdb.h> 

編譯-Wall

warning: implicit declaration of function ‘gethostbyname’ 

關於錯誤消息:t他編譯器基本上告訴你,它不知道如何訪問結構體的字段,因爲它從來沒有看到它的定義。