Поскольку вы не опубликовали подпрограмму GetIP
, я не уверен, что ваш поиск имени хоста правильный, так как, судя по всему, я не уверен, что вы используете функцию inet_addr
правильно.
Николай указал на очень хорошие моменты (и я полностью согласен).На самом деле ваш GET
запрос фактически не работает, и пока я тестировал его на своем локальном веб-сервере Apache в моей системе, он не работал.
sprintf(buffer,"GET /index.html HTTP/1.1\r\n\r\n");
if (write(socket_google, (void*)buffer, LONGITUD_MSJ+1) < 0 )
return 1;
else printf("GET frame sent\n");
...
strcpy(buffer,"\n");
read(socket_google, buffer, sizeof(buffer));
следует заменить на
snprintf(buffer, sizeof(buffer),
"GET / HTTP/1.1\r\nHost: %s\r\nUser-Agent: TEST 0.1\r\n\r\n",
google);
if (write(socket_google, buffer, strlen(buffer)+1) < 0 ) {
close(socket_google);
return 1;
} else
printf("GET frame sent\n");
...
buffer[0] = '\0';
/* Read message from socket */
bytes_recv = read(socket_google, buffer, sizeof(buffer));
if (bytes_recv < 0) {
fprintf(stderr, "socket read error: %s\n", strerror(errno));
close(socket_google);
exit(10);
}
buffer[bytes_recv] = '\0'; /* NUL character */
/* strcpy(message,buffer); */
printf("%s\n", buffer);
...
Вы также должны close
сокет перед выходом из программы.Включите стандартный режим C89 / 90 или C99 вашего компилятора (например, -std=c99
для gcc), включите предупреждения (например, -Wall
для gcc) и прочитайте их.И #include
необходимые заголовочные файлы (с учетом Linux в моем случае) для прототипов функций:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> /* for gethostbyname() */
Существует некоторое приведение указателей и struct
s в отношении имени хоста/ Разрешение IP-адреса, которое может сбить с толку и легко допустить ошибку, поэтому убедитесь, что оно работает так, как вы ожидаете.
in_addr_t ip;
...
GetIP(google, &ip); /* I changed the parameters */
printf("IP address = %x (%s)\n",
ip,
inet_ntoa(*((struct in_addr*)&ip)));