[질문] 소켓프로그래밍에서 서버 IP 화면출력하는법..
글쓴이: cyjus / 작성시간: 화, 2003/05/06 - 11:23오후
소켓프로그래밍을 처음 접하는데요..
여기서 많은 정보를 얻을 수 있어서 모든 분에게 감사드립니다.
어찌보면 단순한 문제인것 같은데....
TCP 소켓프로그래밍 중에 클라이언트(웹브라우저)가
http://서버의 IP주소:port/test.html와 같은 형식으로
접속요청을 해오면, 프롬프트에 서버의 IP만 출력되게 하려고
하는데, 잘 안되네요...
제가 시도해본 방식은...
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
위의 코드에서 2번째 줄이 서버의 주소에 관한거자나요...
그래서..
printf("%u\n", servaddr.sin_addr.s_addr);
printf("%d\n", servaddr.sin_addr.s_addr);
printf("%s\n", servaddr.sin_addr.s_addr);
printf("%s\n", INADDR_ANY);
이렇게 해봤는데, 처음 두경우는 0이 나오고, 다음 두경우는
(null)로 출력되네요...
알고봤더니... INADDR_ANY 자체가 서버의 IP를 자동으로 잡아주지만
실제 들어있는 값은 0이라 하더군요...
그렇다면 어떻해야 서버의 IP를 화면출력할 수 있을까요??
답변 부탁드립니다...
Forums:
원래 INADDR_ANY는 0입니다. 따라서 0 넣어도 같은 값 나오죠.
원래 INADDR_ANY는 0입니다. 따라서 0 넣어도 같은 값 나오죠.
원하시는게 서버의 IP라면 아마도 gethostname() 으로 서버이름을 구하고나서 gethostbyname() 으로 서버주소를 찍어주는게 가장 편할 겁니다.
이 방법이 아니고, 소켓에서 주소를 얻어오면 INADDR_ANY로 되어있으니까 inet_ntoa()에서는 그냥 0.0.0.0 으로 나옵니다.
========================================
* The truth will set you free.
댓글 달기