gpt4 book ai didi

c - 从 C 中的 unsigned int 设置 IP 地址信息

转载 作者:行者123 更新时间:2023-11-30 15:26:59 26 4
gpt4 key购买 nike

我的代码中出现了有关发送内容的问题。

例如,我有 2 个服务器。

这是服务器 1:

unsigned int ip = 19216821;
unsigned int port = 4000;

char str[0];
sprintf(str, "%d", ip);
if ((dest_he=gethostbyname(str)) == NULL) { // get the host info
herror("gethostbyname");
exit(1);
}

dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(port);
dest_addr.sin_addr = *((struct in_addr *)dest_he->h_addr);
memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);

然后我想将缓冲区发送到 dest_addr

if(sendto(sockfd, &buffer, sizeof(buffer),0, (struct sockaddr *)&dest_addr ,sizeof(struct sockaddr_storage)) == -1){
printf("error sending data\n");
return -1;
}

但我仍然得到 sendto(..) == -1。

我的其他服务器仍在等待答复。服务器2:

if(recvfrom(sockfd, &buffer, sizeof(buffer),0, (struct sockaddr *)&rand_addr ,&addr_size) == -1){
printf("error receiving data");
return -1;
}

我认为我的问题是我设置的 dest_addr 错误还是?

最佳答案

首先,您的标题与您的描述不太相符。不过我会尽力回答你的问题。

基本上,您没有正确使用函数gethostbyname。顾名思义,它通过名称而不是地址获取主机。因此,正确的用法是:

struct hostent *host = gethostbyname("localhost");

要将结果复制到您的结构,您可以使用:

memcpy(&dest_addr.sin_addr, host->h_addr_list[0], host->h_length);

另一方面,如果您想向已知的 IP 地址发送消息,您可以使用:

char *ip = "127.0.0.1"
inet_aton(ip , &dest_addr.sin_addr)

除此之外,一切看起来都很好。网上有很多关于如何使用 TCP、UDP 甚至 RAW 套接字的示例。我希望这是您所期待的答案。

关于c - 从 C 中的 unsigned int 设置 IP 地址信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27235499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com