강의자료(1203)

Download Report

Transcript 강의자료(1203)

프로젝트 배점 & 시연
•
전체 prog. 설명
•
test prog 실행 (seek와 read의 결과는 화면 출력)
•
od –i 로 데이터 파일 점검
•
보고서(ppt) 제출
•
점수(중간고사-20%, 퀴즈-20%, 기말고사-30%, 프로젝트-20%, 출석-10%)
- 실행(100점)
- write/seek/read error시 한 함수당 30점 감점
소켓
• 모델
– 연결 지향 모델 (TCP)
– 무연결 지향 모델 (UDP)
• 주소 지정
in_addr_t inet_addr(const char *ip_address)
소켓 인터페이스
• AF_UNIX
– 프로세스들이 동일한 machine에 있을때 사용
struct sockaddr {
sa_family_t
char
}
sa_family;
sa_data[];
• AF_INET
- 네트워킹을 위한 인터넷 영역을 지정
struct sockaddr_in {
}
sa_family_t
sin_family;
in_port_t
struct in_addr
unsigned char
sin_port;
sin_addr;
sin_zero[8];
소켓 인터페이스
• int socket(int domain, int type, int protocol)
-
Domain : AF_UNIX/AF_INET
Type
: SOCK_STREAM (연결지향), SOCK_DGRAM (무연결지향)
Protocol: 0 (SOCK_STREAM : TCP, SOCK_DGRAM : UDP)
p348 예제
• bind는 네트워크 주소와 소켓 식별자를 연관
int bind(int sockfd, const struct sockaddr *address size_t addr_len)
bind호출이 성공하면 0, 그 주소에 대한 소켓이 이미 존재하면 -1
#define SIZE sizeof(struct sockaddr_in)
struct sockaddr_in server = {AF_INET, 5000, INADDR_ANY}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bind(sockfd, (struct sockaddr *)&server, SIZE);
소켓 인터페이스
• listen
int listen (int sockfd, int queue_size)
- queue_size는 최대 연결 요구 수 (5)
소켓 인터페이스
• accept
-
서버가 클라이언트로부터 connect요구를 받으면, 요청을 처리하기 위한 소켓 생성
첫 소켓은 통신 구축에 사용, 두 번째 소켓은 accept를 사용하여 생성
int accept(int sockfd, struct sockaddr *address, size_t *add_len);
-
return 값은 새로운 소켓 id
address 인수는 연결 지향이므로 서술할 필요가 없음
add_len은 처음에는 address에 의해 기술된 주소 구조의 길이, 복귀시는 실제 복사
된 바이트수
-
예제) p351
소켓 인터페이스
• connect
- 서버와의 연결 요청
int connect(int csockfd, const struct sockaddr *address, size_t *add_len)
csockfd : 클라이언트 소켓의 파일 디스크립터
address : 서버의 주소
add_len : 주소 구조의 길이
예제) p354
TCP를 사용한 연결형 통신 모델에서의 함수 호출
소켓 인터페이스
• recv/send
ssize_t recv(int sockfd, void *buffer, size_t length, int flags);
ssize_t send(int sockfd, const void *buffer, size_t length, int flags);
• close
- 프로세스가 단절된 소켓에 write/send를 시도하면 SIGPIPE 신호
이러한 경우, 적절한 신호 핸들러를 통해 처리해야 함
- SOCK_STREAM이 사용되면 소켓으로 보내지는 데이터들은
반드시 수신 프로세스로 보내질 것을 보장함
(예제) p359
test1_client.c, test1_server.c
(실습)
test_client.c
- server에게 “I want the information you have” 전송
- server로부터 받은 내용 출력
- server에게 “Received the information well!” 전송
test_server.c
- client로부터 받은 내용 출력
- client로 “This is the information you requested.” 전송
- client로부터 받은 내용 출력
무연결 지향 모델의 프로그래밍
• 클라이언트와 서버 사이에 전송되는 패킷은 그 목적지에 불확실한
순서로 도착
• 목적지의 주소를 명시
• recvfrom & sendto
(예제) p364
무연결 지향 모델의 프로그래밍
• 차이점
– 두 모듈 모두 서버에서 소켓을 생성하고 자신의 주소를 socket에 바인드
– 연결 모델에서는 서버는 들어오는 연결에 대해 반드시 듣기를 시작. 무 연결 모
델은 필요가 없음
– 클라이언트는 연결 모듈에서는 서버에 연결만 함. 무연결 모델에서는 반드시 소
켓을 생성하고 자신의 주소를 바인드 해야 함.
– Send/recv는 두 모델에서 사용 가능. Sendto와 recvfrom은 통상 무연결에서 사
용
TCP를 사용한 비연결형 통신 모델에서의 함수 호
출
실습
• Client는 100개의 random number를 server에서 보냄
• Server는 각 숫자를 받아서 평균을 계산한 후, client에게 보냄
• Client는 평균 값을 화면에 출력 함
• TCP & UDP로 작성