글
■ 모든 프로토콜은 자신만의 고유한 주소 포맷이 있다.
(1) 주소체계를 나타내는 구조체
○ sockaddr 구조체
: 소켓 주소를 표현하는 구제체.
TCP/IP만을 목적으로 만들어진 것이 아니기 때문에, 다양한 주소체계에 맞게 범용 목적으로 사용하기 위해 이런 단순한
구조를 가지고 있다.
sa_data[4] -> sa_data[14] 수정 (2014.10.06)
: IPv4 주소체계에서 사용하는 구조체.
소켓 프로그램은 범용 주소 구조체로 sockaddr을 사용하지만, 주소체계의 종류에 따라 별도의 전용 구조체를 만들어
사용하는게 편리하다. (Local Unix 주소 체계는 sockaddr_in을 사용한다.)
- 소켓 라이브러리는 sockaddr을 사용하므로 라이브러리에 주소 정보를 넘길 때는 sockaddr로 형변환을 하여 넘긴다.
- 그러므로 구조체의 크기는 동일하다.
- sin_family : 주소체계 (AF_INET/AF_INET6/AF_LOCAL)
- sin_port : 16비트 포트정보 (네트워크 바이트 오더 적용)
- sin_addr : 32비트 IP 정보 (네트워크 바이트 오더 적용)
- sin_zero : 사용되지 않는 필드
※ 주소체계에 관한 포스팅 자료
2012/02/27 - [[ Socket ]/Theory] - 프로토콜 체계와 주소체계 - PF_INET, AF_INET
※ 네트워크 바이트 오더에 관한 포스팅 자료
2011/04/13 - [[ C laguage ]/Theory] - Network Byte Ordering
(2) Server / Client 표준 예제
○ Server
struct sockaddr_in server_address; memset(&server_address,0,sizeof(server_address)); server_address.sin_family=AF_INET; server_address.sin_addr.s_addr=htonl(INADDR_ANY); server_address.sin_port=htons(PORT); |
- htonl, htons : 서버의 주소와 포트 번호는 IP헤더에 저장되어 전송되는데 이를 중계하는 라우터들은 항상 네트워크 바이트 방식.
즉, 빅 엔디언으로 처리한다.
○ Client
struct sockaddr_in client_address; |
'P rogramming > Socket' 카테고리의 다른 글
5. 소켓옵션 - setsockopt() (3) | 2012.03.02 |
---|---|
4. 주소정보 할당 - bind() (1) | 2012.02.29 |
2. 프로토콜 정의 및 소켓 생성 - socket() (0) | 2012.02.27 |
1. 소켓 프로그래밍의 이해 (3) | 2012.02.27 |
프로토콜 체계와 주소체계 - PF_INET, AF_INET (1) | 2012.02.27 |
RECENT COMMENT