Ошибка разыменования в коде клиентского сокета - PullRequest
0 голосов
/ 27 июля 2011

До того дня мой код работал нормально, но сегодня я получаю client.c: 61: 25: ошибка: разыменование указателя на неполный тип client.c: 63: 16: ошибка: разыменование указателя на неполный тип

Строки были написаны ниже снова.Любая помощь будет оценена.

               #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);*

1 Ответ

6 голосов
/ 27 июля 2011

Вы не включили объявление gethostbyname:

#include <netdb.h>

скомпилируйте с -Wall

warning: implicit declaration of function ‘gethostbyname’

О сообщении об ошибке: компилятор в основном говорит, что этоне знаю, как получить доступ к полю структуры, потому что он никогда не видел его определения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...