인터넷 주소는 인터넷상에서 컴퓨터를 구분하는 목적으로 사용되는 주소이다.
ex) IPv4 : 4byte 주소 체계, IPv6 : 16byte 주소 체계
즉, IP는 컴퓨터를 구분하는 용도이지만, Port 번호는 소켓을 구분하는 용도이다.
특징 1) 하나의 프로그램 내에서는 둘 이상의 소켓이 존재할 수 있고, 하나의 포트는 하나의 프로그램에 할당한다.
특징 2) Port 번호 : 16bits로 표현한다. (0~65535)
특징 3) Port 번호 중 0~1023 번호는 이미 잘 알려진 Port 번호(well-known port)로 이미 용도가 결정되어 있다.
struct sockaddr_in
{
sa_family_t sin_family; //주소 체계
uint16_t sin_port; //port 번호
struct in_addr sin_addr; //32비트 IP주소
char sin_zero[8]; //사용되지 않음
};
struct in_addr
{
in_addr_t s_addr; //32비트 IPv4 인터넷 주소
};
1) sin_family : 주소 체계 정보를 저장한다.
2) sin_port : 16bits의 Port번호를 저장한다.
3) sin_addr : 32bits의 IP주소를 저장한다.
4) sin_zero : 현재는 특별한 의미를 지니지 않아서 사용되지 않는다.
1) 서버(Server) : 자신의 IP주소와 Port 번호를 구조체에 저장한다.
2) 클라이언트(Client) : 접속할 서버의 IP주소와 Port 번호를 구조체에 저장한다.
struct sockaddr_in serv_addr;
....
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
error_handling("bind() error");