Я пытался отправлять и получать структуры на одной и той же машине, используя UDP, а сервер и клиент в этом случае работают на одной и той же машине и совместно используют общие определения структуры (используя заголовочный файл).
Hostentструктура defn (встроенный тип UNIX):
struct hostent{
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
}
Ниже приведен фрагмент кода сервера:
struct hostent* resolved_host = DNS_translate(DNSname);
if((numbytes = sendto(sockfd, (void*)&resolved_host, sizeof(struct hostent), 0, (struct sockaddr *)&client_addr, sizeof(struct sockaddr))) == -1)
{
perror("sendto failed");
exit(EXIT_FAILURE);
}
Ниже приведен фрагмент кода клиента:
struct hostent resolved_host;
int addr_len = sizeof(struct sockaddr);
if((numbytes = recvfrom(sockfd, (void*)&resolved_host, sizeof(struct hostent), 0, (struct sockaddr *)&server_addr, &addr_len)) == -1)
{
perror("recvfrom failed");
exit(EXIT_FAILURE);
}
Сервер отправляети клиент получает как обычно (без ошибок).Структура * resolved_host * заполняется на сервере, и все его данные могут быть доступны без проблем.Однако, если я сейчас пытаюсь использовать структуру * resolved_host * в клиенте, я получаю ошибку сегмента.Например:
printf("Name : %s\n", resolved_host.h_name);
вызывает ошибку сегмента.(но работает на сервере)