【发布时间】:2015-01-29 21:04:13
【问题描述】:
我在代码中遇到了关于发送内容的问题。
例如,我有 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 错误还是?
【问题讨论】:
-
也许您想为主机名字符串分配一些内存(而不是
char str[0])?此外,如果您想查找 IPv4 地址(例如 192.168.2.1),那么您需要在字符串中包含点(这意味着您必须实现一个函数来转换您的unsigned int表示,一些比如ip = (192<<24)|(168<<16)|(2<<8)|1; sprintf("%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff))。 -
@SleuthEye 哦,不错。现在,如果我将“localhost”放在我的 gethostname 而不是 str 中,它现在可以工作。有没有办法可以在没有这个 sprintf 的情况下将 int 转换为字符串?我找不到关于它的东西。而且 str[0] 不知何故困扰着我。你知道我怎样才能让它动态而不是[0]吗?还是 [0] 足够大?
-
unsigned int ip = 19216821;不是存储192.168.2.1的好方法,如果这就是你的意思 -
[0] 足够大吗? 从不 [0] 足够大。
标签: c sockets tcp connection server