Download presentation
Presentation is loading. Please wait.
Published byBeryl Henry Modified 6년 전
1
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
코드 설명 실행 compute node file dump 각 데이터 별, I/O node 별 file dump PPT 파일 제출
2
프로젝트 점수(1) 미 구현 프로그램 오류 5 data size 줄임 10 1번(20점)
프로그램 오류 5 data size 줄임 10 1번(20점) compute node file 내용오류(크기는 맞음) 256KB I/O node file 내용오류(크기는 맞음) 각 -2점 128KB I/O node file 내용오류(크기는 맞음) 64KB I/O node file 내용오류(크기는 맞음)
3
프로젝트 점수(2) 미 구현 프로그램 오류 10 data size 줄임 20 2번(40점)
프로그램 오류 10 data size 줄임 20 2번(40점) compute node file 내용오류(크기는 맞음) 256KB I/O node file 내용오류(크기는 맞음) 각 -5점 128KB I/O node file 내용오류(크기는 맞음) 64KB I/O node file 내용오류(크기는 맞음)
4
프로젝트 점수(3) 미 구현 프로그램 오류 10 data size 줄임 20 3번(40점)
프로그램 오류 10 data size 줄임 20 3번(40점) compute node file 내용오류(크기는 맞음) 256KB I/O node file 내용오류(크기는 맞음) 각 -5점 128KB I/O node file 내용오류(크기는 맞음) 64KB I/O node file 내용오류(크기는 맞음)
5
[예제 11-7] (1) 인터넷 소켓(서버)-server1.c
... 09 #define PORTNUM 9000 10 11 int main(void) { char buf[256]; struct sockaddr_in sin, cli; int sd, ns, clientlen = sizeof(cli); 15 if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } 20 memset((char *)&sin, '\0', sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORTNUM); sin.sin_addr.s_addr = inet_addr(" "); 25 if (bind(sd, (struct sockaddr *)&sin, sizeof(sin))) { perror("bind"); exit(1); } 포트번호 소켓 생성 소켓 주소 구조체 생성 소켓기술자와 소켓 주소 구조체 연결
6
[예제 11-7] (1) 인터넷 소켓(서버) 31 if (listen(sd, 5)) { 32 perror("listen");
exit(1); } 35 if ((ns = accept(sd, (struct sockaddr *)&cli, &clientlen))==-1){ perror("accept"); exit(1); } 40 sprintf(buf, "Your IP address is %s", inet_ntoa(cli.sin_addr)); if (send(ns, buf, strlen(buf) + 1, 0) == -1) { perror("send"); exit(1); } close(ns); close(sd); 48 return 0; 50 } 클라이언트 접속요청 대기 클라이언트와 연결 클라이언트로 데이터 보내기
7
[예제 11-7] (2) 인터넷 소켓(클라이언트)-client1.c
... 09 #define PORTNUM 9000 10 11 int main(void) { int sd; char buf[256]; struct sockaddr_in sin; 15 if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } 20 memset((char *)&sin, '\0', sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORTNUM); sin.sin_addr.s_addr = inet_addr(" "); 25 포트번호 소켓 생성 소켓 주소 구조체 생성
8
[예제 11-7] (2) 인터넷 소켓(클라이언트) if (connect(sd, (struct sockaddr *)&sin, sizeof(sin))) { perror("connect"); exit(1); } 30 if (recv(sd, buf, sizeof(buf), 0) == -1) { perror("recv"); exit(1); } close(sd); printf("From Server : %s\n", buf); 37 return 0; 39 } 서버에 접속 요청 서버가 보낸 데이터 읽기 # gcc -o ex11_7s ex11_7-inet-s.c -lsocket -lnsl # gcc -o ex11_7c ex11_7-inet-c.c -lsocket -lnsl # ex11_7s.out 서버 # ex11_7c.out From Server : Your IP address is 클라이언트
9
TCP 기반 프로그래밍 반복서버 동시동작서버 데몬 프로세스가 직접 모든 클라이언트의 요청을 차례로 처리
데몬 프로세스가 직접 서비스를 제공하지 않고, 서비스와 관련있는 다른 프로세스를 fork 함수로 생성해 클라이언트와 연결시켜준다.
10
[예제 12-1] (1) 반복서버(서버)-server2.c
... 10 #define PORTNUM 9001 11 12 int main(void) { char buf[256]; struct sockaddr_in sin, cli; int sd, ns, clientlen = sizeof(cli); 16 memset((char *)&sin, '\0', sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORTNUM); sin.sin_addr.s_addr = inet_addr(" "); 21 if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } 26 if (bind(sd, (struct sockaddr *)&sin, sizeof(sin))) { perror("bind"); exit(1); } 31 if (listen(sd, 5)) { perror("listen"); exit(1); } 소켓 주소구조체 생성 소켓 생성 클라이언트 접속 대기
11
[예제 12-1] (1) 반복서버(서버) 37 while (1) {
if ((ns = accept(sd, (struct sockaddr *)&cli, &clientlen)) == -1) { perror("accept"); exit(1); } sprintf(buf, "%s", inet_ntoa(cli.sin_addr)); printf("*** Send a Message to Client(%s)\n", buf); 44 strcpy(buf, "Welcome to Network Server!!!"); if (send(ns, buf, strlen(buf) + 1, 0) == -1) { perror("send"); exit(1); } 50 if (recv(ns, buf, strlen(buf), 0) == -1) { perror("recv"); exit(1); } printf("** From Client : %s\n", buf); close(ns); } close(sd); 59 return 0; 61 } 클라이언트 접속 클라이언트에 정보전송 클라이언트의 데이터 수신
12
[예제 12-1] (2) 반복서버(클라이언트)-client2.c
... 11 #define PORTNUM 9001 12 13 int main(void) { int sd; char buf[256]; struct sockaddr_in sin; 17 memset((char *)&sin, '\0', sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORTNUM); sin.sin_addr.s_addr = inet_addr(" "); 22 if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } 27 if (connect(sd, (struct sockaddr *)&sin, sizeof(sin))) { perror("connect"); exit(1); } 소켓 주소구조체 생성 소켓 생성 서버에 연결 요청
13
[예제 12-1] (2) 반복서버(클라이언트) if (recv(sd, buf, sizeof(buf), 0) == -1) { perror("recv"); exit(1); } 37 printf("** From Server : %s\n", buf); 39 strcpy(buf, "I want a HTTP Service."); if (send(sd, buf, sizeof(buf) + 1, 0) == -1) { perror("send"); exit(1); } 45 close(sd); 47 return 0; 49 } 서버의 데이터 수신 서버에 데이터 송신 # ex12_1s.out 서버 # ex12_1c.out ** From Server : Welcome to Network Server!!! 클라이언트 # ex12_1s.out *** Send a Message to Client( ) ** From Client : I want a HTTP Service. 서버 # ex12_1s.out *** Send a Message to Client( ) ** From Client : I want a FTP Service. 클라이언트
14
[예제 12-2] (1) 동시 동작 서버(서버)-server3.c
... 10 #define PORTNUM 9002 11 12 int main(void) { char buf[256]; struct sockaddr_in sin, cli; int sd, ns, clientlen = sizeof(cli); 16 if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } 21 memset((char *)&sin, '\0', sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORTNUM); sin.sin_addr.s_addr = inet_addr(" "); 26 if (bind(sd, (struct sockaddr *)&sin, sizeof(sin))) { perror("bind"); exit(1); } 31 if (listen(sd, 5)) { perror("listen"); exit(1); }
15
[예제 12-2] (1) 동시 동작 서버(서버) 37 while (1) {
if ((ns = accept(sd, (struct sockaddr *)&cli, &clientlen)) == -1) { perror("accept"); exit(1); } switch (fork()) { case 0: close(sd); strcpy(buf, "Welcome to Server"); if (send(ns, buf, strlen(buf) + 1, 0) == -1) { perror("send"); exit(1); } 50 if (recv(ns, buf, strlen(buf), 0) == -1) { perror("recv"); exit(1); } printf("** From Client: %s\n", buf); sleep(5); exit(0); } close(ns); } 61 return 0; 63 } fork로 자식 프로세스 생성 자식 프로세스가 클라이언트로 메시지 보내고 데이터 수신
16
실습 클라이언트에서 보낸 메시지를 그대로 되돌려주는 에코서버와 클라이언 트를 작성하라. 클라이언트 메시지가 quit를 보내면 프로그램은 종료한다 . 반복서버 동시동작서버 유닉스 도메인 소켓
Similar presentations