무언가 보내기에 관한 문제가 발생했습니다.C에서 부호없는 int에서 IP 주소 정보 설정
예를 들어 2 개의 서버가 있습니다.
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);
그때 내가
if(sendto(sockfd, &buffer, sizeof(buffer),0, (struct sockaddr *)&dest_addr ,sizeof(struct sockaddr_storage)) == -1){
printf("error sending data\n");
return -1;
}
을 dest_addr 내 버퍼를 보내려하지만 난 여전히 (..) == -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과 같은)를 검색하려면 문자열에 점을 포함해야합니다 (즉, '부호없는 int'표현을 변환하는 함수를 구현해야 함을 의미합니다. 'ip = (192 << 24) | 168 168 | (2 << 8) | 1 sprintf ("% d. % d. % d. % d", (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff)'). – SleuthEye
@SleuthEye OH NICE. 이제 대신 str 대신 gethostname에 "localhost"를 넣으면 작동합니다. 이 sprintf없이 정수로 int를 변환 할 수있는 방법이 있습니까? 나는 그것에 관해 무엇인가 발견 할 수 없었다. 그리고 str [0]은 어떻게 든 나를 괴롭 히고 있습니다. 내가 [0] 대신에 그것을 어떻게 동적으로 만들 수 있는지 알고 있습니까? 아니면 [0] 충분히 큰가요? – user3717963
'unsigned int ip = 19216821;은 충분히 의미가있는 경우'192.168.2.1'을 저장하는 좋은 방법이 아닙니다. –