소개글
네트워크 프로그래밍 연습문제1. socket descriptor 와 file descriptor의 차이점은 무엇인가?
2. 2-1절에 나와 있는 open_socket.c 프로그램을 작성하여 실행하여 보아라.
- 파일 번호 및 소켓번호는 어떻게 나오는가?
3. 소켓주소를 저장하는 구조체로 sockaddr와 sockaddr_in 두 가지가 정의되어 있는 이유를 설명하고 인터넷 프로그램에서는 어느 것을 사용하는 것이 편리한지 이유를 설명하라.
4. 2-2절의 byte_order.c 프로그램을 작성하고 출력에 대해 논하라.
5. 4번을 활용하여 4 바이트로 표현된 숫자의 바이트 순서를 바꾸는 프로그램을 작성하시오. 예를 들어 16진수 0x12345678을 입력하면 0x78563412가 출력되도록 하시오. 순서를 바꾸는 함수의 프로토타입을 아래와 같이 작성하고, 아래의 before 인자는 바이트 순서를 바꾸기 전의 값이며 함수의 리턴 값은 바이트 순서가 바뀐 후의 값이다.
unsigned int convert_order32 (unsigned int before);
6. 자신이 사용하는 시스템의 호스트 바이트 순서가 big endian인지 little endian인지를 확인하는 프로그램을 작성하시오. (반드시 5번에서 만든 convert_order32 함수를 이용)
7. ascii_ip.c 프로그램을 작성하여 보고, inet_addr()함수를 inet_pton()함수로 변환하여 프로그램을 수정하여 보라.
8. gethostbyname() 함수를 이용하여 도메인 네임 (www.google.com)에 대해 리턴 받는 hostent 구조체에 저장되어 있는 모든 내용을 출력하는 프로그램을 작성하고 그 결과를 서 술 하시오.
목차
1. socket descriptor 와 file descriptor의 차이점은 무엇인가?2. 2-1절에 나와 있는 open_socket.c 프로그램을 작성하여 실행하여 보아라.
- 파일 번호 및 소켓번호는 어떻게 나오는가?
3. 소켓주소를 저장하는 구조체로 sockaddr와 sockaddr_in 두 가지가 정의되어 있는 이유를 설명하고 인터넷 프로그램에서는 어느 것을 사용하는 것이 편리한지 이유를 설명하라.
4. 2-2절의 byte_order.c 프로그램을 작성하고 출력에 대해 논하라.
5. 4번을 활용하여 4 바이트로 표현된 숫자의 바이트 순서를 바꾸는 프로그램을 작성하시오. 예를 들어 16진수 0x12345678을 입력하면 0x78563412가 출력되도록 하시오. 순서를 바꾸는 함수의 프로토타입을 아래와 같이 작성하고, 아래의 before 인자는 바이트 순서를 바꾸기 전의 값이며 함수의 리턴 값은 바이트 순서가 바뀐 후의 값이다.
unsigned int convert_order32 (unsigned int before);
6. 자신이 사용하는 시스템의 호스트 바이트 순서가 big endian인지 little endian인지를 확인하는 프로그램을 작성하시오. (반드시 5번에서 만든 convert_order32 함수를 이용)
7. ascii_ip.c 프로그램을 작성하여 보고, inet_addr()함수를 inet_pton()함수로 변환하여 프로그램을 수정하여 보라.
8. gethostbyname() 함수를 이용하여 도메인 네임 (www.google.com)에 대해 리턴 받는 hostent 구조체에 저장되어 있는 모든 내용을 출력하는 프로그램을 작성하고 그 결과를 서 술 하시오.
본문내용
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>
int main(int argc, char* argv[]){
char buf[20];
int i;
struct in_addr in;
struct hostent *hp;
if(argc<2) {
printf("사용법: %s hostnamen", argv[0]);
exit(0); }
hp = gethostbyname(argv[1]);
if(hp==null) {
printf("gethostbyname failn");
exit(0); }
printf("호스트 이름 : %sn", hp->h_name);
printf("호스트 주소타입 번호 : %dn", hp->addrtype);
printf("호스트 주소의 길이 : %d바이트n", hp->h_length);
for(i=0; hp->h_addr_list[i] ; i++) {
memcpy(&in.s_addr, hp->h_addr_list[i], sizeof(in.s_addr));
inet_ntop(AF_INET, &in, buf, sizeof(buf));
printf("IP주소(%d번째) : %sn", i+1, buf);
}
for(i=0; hp->h_aliases[i]; i++)
printf("호스트 별명(%d번째) : %sn", i+1, hp->h_aliases[i]);
puts("");
return 0;
}