'기초 > socket programming' 카테고리의 다른 글
Iterative server (0) | 2011.07.14 |
---|---|
서버 분류 (0) | 2011.07.14 |
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
Iterative server (0) | 2011.07.14 |
---|---|
서버 분류 (0) | 2011.07.14 |
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
Iterative 서버 예제
UDP 통신 (0) | 2011.07.15 |
---|---|
서버 분류 (0) | 2011.07.14 |
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
서버의 연결에 따른 분류
서버의 서비스에 따른 분류
1. Iterative 서버
- 클라이언트의 서비스 요구를 순서대로 처리해 주는 서버
- request 처리시간이 짧거나 별로 문제가 되지 않는 경우에 사용
- Iterative 서버는 프로그램 구현이 비교적 간단
2. Concurrent 서버
- 여러 요구를 동시에(concurrently) 서비스할 수 있는 서버
- 새로운 클라이언트가 접속될 때마다 서비스를 담당할 프로세스를 새로 만드는 방법이 있으나 이 방법은 클라이언트 수가 늘어남에 따라 프로세스 수도 계속 늘어남
※ 하나의 프로세스가 여러 서비스를 동시에 처리 방법 apparent concurrent 서버
UDP 통신 (0) | 2011.07.15 |
---|---|
Iterative server (0) | 2011.07.14 |
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
서버에서 접속하는 클라이언트 주소 출력하기
struct sockaddr_in client_addr; //선언
클라이언트주소는 client_addr.sin_addr.s_addr 저장되어있는것을
ntohl를 사용하여 Little Endian 방식으로 바꿔서 출력
Iterative server (0) | 2011.07.14 |
---|---|
서버 분류 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
주소 구조체 (0) | 2011.07.14 |
inet_addr()
inet_addr() 예제
inet_aton 예제
1. inet_addr()함수
이 함수는 Dotte-Decimal Notation 형식을 빅엔디안 32비트 값으로 변환시켜줍니다.
unsigned long inet_addr(const char *string);
위가 함수의 원형인데 함수 파라미터 값에 IP주소 문자열의 시작주소를 넣어주면 이 함수가 알아서 빅엔디안 32비트 unsigned long 형의 값으로 만들어줍니다.
성공하면 빅엔디안 형식의 32비트 값을, 실패하면 INADDR_NONE을 리턴합니다.
INADDR_NONE은 실제로 -1로 선언되어 있습니다.
2. inet_aton()함수
이 함수는 기본적으로 주소 문자열을 빅엔디안 32비트 값으로 변환 시켜주는건 inet_addr()함수와 같지만 다른 점이 있습니다.
inet_addr()함수는 변환된 값을 sockaddr_in 구조체의 맴버변수 안에 또 선언된 in_addr 구조체에 값을 대입해주어야 합니다. 하지만 inet_aton()함수는 자동으로 값을 대입시켜줍니다.
따라서 따로 대입해야 할 필요가 없어집니다. 먼저 이것이 함수의 원형입니다.
int inet_aton(const char *string, struct in_addr *addr);
첫번째 파라미터 값은 주소 문자열이 있는 포인터변수가 들어가고 두번째 파라미터 값은 구조체 맴버변수중 주소값이 들어가는 맴버변수의 주소값을 넣어주시면 됩니다.
함수를 성공시키면 0이 아닌값, 실패하면 0이 리턴됩니다.
이 함수는 inet_addr()함수보다 편리하게 사용할 수 있습니다.
서버 분류 (0) | 2011.07.14 |
---|---|
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
주소 구조체 (0) | 2011.07.14 |
소켓통신 (0) | 2011.07.14 |
Intel 계열 CPU는 Little Endian 방식 채택
네트워크에서는 BIG Endian 방식 채택
예제
서버 분류 (0) | 2011.07.14 |
---|---|
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
주소 구조체 (0) | 2011.07.14 |
소켓통신 (0) | 2011.07.14 |
struct sockaddr
{
unsigned short sa_family; /*인터넷 주소 패밀리 2byte*/
char sa_data[14]; /* port 번호(short형 : 2byte) + ip 주소 (long형 4byte)*/
};
struct socketaddr_in
{
unsigned short sin_family; /* Internet protocol */
unsigned short sin_port; /* Address port (16bits) */
struct in_addr sin_addr; /* Internet address (32bits) */
char sin_zero[8]; /* Not used */
};
socketaddr_in으로 사용자에게 값을 입력받아 sockaddr 자료형으로 변환하여 사용
sa_family | sa_data | |||
sockaddr | Family | Blob(14byte) | ||
2byte | 2byte | 4byte | 8byte | |
sockaddr_in | Family | Port | Internet address | Unused |
sin_family | sinport | sin_addr | sin_zero |
서버 분류 (0) | 2011.07.14 |
---|---|
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
소켓통신 (0) | 2011.07.14 |
서버 분류 (0) | 2011.07.14 |
---|---|
클라이언트 주소 출력 (0) | 2011.07.14 |
네트워크 ip주소 변환 (0) | 2011.07.14 |
네트워크 저장방식 (0) | 2011.07.14 |
주소 구조체 (0) | 2011.07.14 |