*sockaddr_in 구조체
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
*포트번호
2바이트이므로 65535까지 사용가능하지만 1024까지는 시스템이 사용하고 그 이후의 포트번호가 할당된다
예를 들면 80번은 web서비스를 위해 사용된다
*IP주소 설정
서버에서 serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1")로 설정을 해주거나
다음과 같이 설정할 수도 있다
inet_pton(AF_INET,"127.0.0.1",&stAddr.sin_addr.s_addr );
*bind()
int bind(
int
sockfd,
struct
sockaddr *my_addr, socklen_t addrlen);
bind()함수는 소켓을 우리가 설정한 구조체내용(iP주소,PORT번호)로 setting하는 것이다
bind함수의 두번째 인자는 (struct sockaddr*)로 캐스팅한다 (우리가 인터넷 기반으로 사용하는 sockaddr_in
구조체를 bind함수는 인자로 받지 않는다)
sockaddr과 sockaddr_in구조체를 비교해 보면 크기가 동일하고 멤버들의 갯수와 이름이 다름을 볼 수 있다
반환값-- 성공시 0을 실패시 -1을 반환
이제 서버에서 sockaddr_in구조체의 내용을 소켓에 bind하였으므로 우리는 그 IP주소와 port번호로 통신이 가능하다
클라이언트에서는 bind()대신 connect()함수를 사용해서 위와 같이 소켓 디스크립터와 sockaddr_in구조체를 연결시키는 것을 볼 수 있다
위의 소켓 setting까지는 서버와 클라이언트모두 대동소이하다
*listen()
int listen(int s,int backlog);
listen함수는 소켓에서 연결을 기다리는 역할을 한다 연결요청이 들어오면 accept()를 호출하여 다른소켓(communication socket)을 생성한다
listen함수의 두번째 인자는 연결을 기다리는 클라이언트를 저장하는 대기큐의 최대수이다
반환값-- 성공시 0을 실패시 -1을 반환
*accept()
int accept(int s, struct sockaddr *addr ,socklen_t * addrlen);
accept()함수는 클라이언트가 들어올때 까지 블로킹되어 있다
랑데뷰소켓(bind소켓)은 클라이언트에서 보내져서 큐상에서 대기하고 있는 정보(서버와 통신을 원하는 클라이언트의 정보)를 두번째 인자에 연결한 다음 클라이언트소켓과 연결된 새로운 소켓을 반환한다
앞으로 그 클라이언트와의 통신은 반환된 소켓 디스크립터를 사용한다
반환값-- 성공시 communication 소켓 디스크립터, 실패시 -1을 반환
이 communicatoin 소켓을 이용하여 통신을 한다
*예제코드
|
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
[내장형]최남식-2011년10월26일일일보고서 (9) | 2011.10.26 |
---|---|
[내장형]이성재_10월25일 일일보고서 (12) | 2011.10.25 |
[내장형]김수만_10월 24일 (6) | 2011.10.25 |
[내장형]이상만_10월 20일(bitmap project / socket 2Way handshake) (10) | 2011.10.21 |
[내장형]백길남_10월18일_일일보고서 (11) | 2011.10.18 |
[내장형]박춘우_2011년 10월 17일 월요일 DailyReport (9) | 2011.10.17 |
[내장형]한원우_10월14일 실습보고서 (10) | 2011.10.16 |
수업자료 RFID / Linux Serial 리눅스 시리얼 통신 (2) | 2011.10.14 |