Я искал со своей проблемой, но безуспешно
Я не знаю, как реализовать правильную функцию iphost()
.
Ну, у меня есть файл library.h, в котором я храню переменные и функцию iphost()
.
Есть еще один файл с именем main.c
, где я запускаю функцию iphost(...)
.
Я действительно не знаю, как решить мою проблему.
Я получил ошибку adr_srvr
не имеет элемента sin_addr
.
/home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something not a structure or union|
Вероятно, я объявил неверные аргументы с указателями звездочек и амперсандами . Кто-нибудь может мне помочь?
library.h
void iphost(char* arg,struct sockaddr_in *adr_srvr)
{
if(*arg>=(char)'0' && *arg<=(char)'9')
{
printf("Prawdopodobnie wprowadzono IP: %s\n", arg);
inet_aton(arg, &adr_srvr.sin_addr);//here ERROR
srvr_addr = inet_ntoa(adr_srvr.sin_addr);
}
}
main.c
iphost(argv[2], &adr_srvr); // OK ?
Небольшая помощь, чтобы понять код:
Я не могу добраться до adr_srvr.sin_addr.
char * arg - аргументы, вводимые мной, 4 примера: "127.0.0.1".
adr_srvr.sin_addr сохранить этот 127.0.0.1
srvr_addr - это символ *
Обычный код, который работает нормально, (без функции) в main.c:
int main (int argc, char *argv[] )
{
int z;
int x;
char *srvr_addr;
struct sockaddr_in adr_srvr;
struct sockaddr_in adr;
struct hostent *he;
int len_inet;
int s;
char dgram[512];
struct in_addr **addr_list;
char buf[512];
//USTAWIENIE POLACZENIA
//CZY WPISANO IP
if(argv[1][0]>=(char)'0' && argv[1][0]<=(char)'9')
{
printf("Prawdopodobnie wprowadzono IP: %s\n", argv[1]);
inet_aton(argv[1], &adr_srvr.sin_addr);
srvr_addr = inet_ntoa(adr_srvr.sin_addr);
} else {}
...
}
---------
У меня похожий вопрос, поэтому я редактирую здесь. Как я могу реализовать это в функции?:
else
{
if ((he = gethostbyname(arg)) == NULL) { // get the host info
herror("gethostbyname");
return 2;
}
// print information about this host:
printf("Wykryty HOST: '%s' ", arg);
printf("zamieniam na IP: ");
addr_list = (struct in_addr **)he->h_addr_list;
printf("%s", srvr_addr = inet_ntoa(*addr_list[0]));
printf("\n");
}