Этот вопрос относится к другому вопросу, который я только что опубликовал . Я готовлюсь к простому рабочему проекту и пытаюсь ознакомиться с основами программирования сокетов в среде разработки Unix. На данный момент у меня есть некоторый базовый серверный код и настройка клиентского кода для связи. В настоящее время мой клиентский код успешно подключается к коду сервера и серверный код отправляет ему тестовое сообщение, после чего оба завершаются. Отлично! Это именно то, чего я хотел достичь. Сейчас я играю с функциями, используемыми для получения информации о двух средах (сервер и клиент). Я хотел бы получить IP-адрес моей серверной программы. Вот код, который я сейчас должен сделать, но он не работает ...
int sockfd;
unsigned int len;
socklen_t sin_size;
char msg[]="test message";
char buf[MAXLEN];
int st, rv;
struct addrinfo hints, *serverinfo, *p;
struct sockaddr_storage client;
char s[INET6_ADDRSTRLEN];
char ip[INET6_ADDRSTRLEN];
//zero struct
memset(&hints,0,sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
//get the server info
if((rv = getaddrinfo(NULL, SERVERPORT, &hints, &serverinfo ) != 0)){
perror("getaddrinfo");
exit(-1);
}
// loop through all the results and bind to the first we can
for( p = serverinfo; p != NULL; p = p->ai_next)
{
//Setup the socket
if( (sockfd = socket( p->ai_family, p->ai_socktype, p->ai_protocol )) == -1 )
{
perror("socket");
continue;
}
//Associate a socket id with an address to which other processes can connect
if(bind(sockfd, p->ai_addr, p->ai_addrlen) == -1){
close(sockfd);
perror("bind");
continue;
}
break;
}
if( p == NULL ){
perror("Fail to bind");
}
inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof(s));
printf("Server has TCP Port %s and IP Address %s\n", SERVERPORT, s);
и вывод для IP всегда пуст ...
server has TCP Port 22513 and IP Address ::
есть идеи для чего я скучаю?
Заранее спасибо за помощь! сначала это действительно сложно.