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

时间:2014-12-01 19:13:26

标签: c sockets tcp connection server

我在代码中遇到了发送内容的问题。

我得到了例如2 Server。

这是服务器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错误或?

1 个答案:

答案 0 :(得分:1)

首先,您的标题与您的描述并不匹配。不过,我会尽力回答你的问题。

基本上,您没有正确使用函数gethostbyname。正如名称所说,它的名称不是地址的主机。因此,正确的用法是:

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

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

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套接字的在线示例。我希望这是你期待的答案。