我一直試圖在這種情況下,在同一臺機器上運行,發送和接收結構使用UDP在同一臺機器和服務器和客戶端上,並有着共同的結構定義(使用頭文件)傳遞結構。使用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 *結構,我會遇到seg故障。例如:
printf("Name : %s\n", resolved_host.h_name);
產生一個seg故障。 (但在服務器工作)
哦,謝謝,它完全忽略我的腦海裏。我現在覺得很愚蠢:| – Arun