네트워크 프로그래밍의 이해 School of Electronics and Information. Kyung Hee University. Dae Sun Kim <dskim@networking.khu.ac.kr>
실습서버 zterm 사용 ID 실습날짜 폴더를 만들어 사용 163.180.140.190 (임시) Port:22 np01 ~ np59( ID, Password 동일, Password 반드시 수정) 실습날짜 폴더를 만들어 사용 Ex) 20050909
네트워크의 이해 네트워크란 End-System 들을 연결하는 하나의 System을 의미한다. 개인용 PC, 워크스테이션, PDA
Internet의 이해 멀리 떨어진 둘 이상의 네트워크가 연결되어 이뤄지는 거대한 네트워크를 의미한다. 인터넷의 구축을 위해서는 서로 다른 네트워크를 연결하는 장비가 필요하다. 이를 두고 라우터(Router)라 한다. Network A Router Network B
Client / Server 모델 Server Client Server와 Client는 프로그램이다. Machine이 아니다! Request Response Server Client
Server의 종류 Server는 일반적으로 Client에 비해 복잡하다. 두 가지 종류의 서버. Iterative Server : 한 순간에 하나의 클라이언트에게 응답한다. Concurrent Server : 동시에 여러 클라이언트에게 응답한다. Client Server Server Client Client Client
네트워크 프로그래밍의 이해 네트워크로 연결되어 있는 두 호스트간의 데이터 송수신. 파일 입출력과의 차이점은 데이터를 주고 받는 대상에 있다. 소켓(socket)이라는 장치를 사용하여 프로그래밍 한다. 소켓이란 원격에 존재하는 두 호스트를 연결시켜 주는 매개체 역할을 한다.
서버 소켓 구현의 이해 Telephone Server Socket 전화기 구입 전화번호 할당 케이블에 연결 수화기 든다! 소켓 생성 IP 주소 할당. 연결 요청 대기 상태 연결 수락!
서버 소켓 구현의 이해 순서 1. 전화를 걸고 싶은데 무엇이 필요합니까 #include <sys/types.h> 순서 1. 전화를 걸고 싶은데 무엇이 필요합니까 소켓의 생성을 요구한다. #include <sys/types.h> #include <sys/socket.h> int socket (int domain, int type, int protocol)
서버 소켓 구현의 이해 순서 2. 당신의 전화번호는 어떻게 되나요? #include <sys/socket.h> 순서 2. 당신의 전화번호는 어떻게 되나요? 주소의 할당을 요구한다(IP 주소, Port 정보). #include <sys/socket.h> int bind(int sockfd, struct sockaddr *myaddr, int addrlen)
서버 소켓 구현의 이해 순서 3. 전화기를 연결 하시겠습니까? #include <sys/socket.h> 순서 3. 전화기를 연결 하시겠습니까? 연결 요청 대기 상태로의 진입. #include <sys/socket.h> int listen(int sockfd, int backlog)
#include <sys/socket.h> 순서 4. 전화벨이 울립니다. 어서 전화 받으세요!!! 연결 요청 수락. #include <sys/socket.h> int accept(int sockfd, struct sockaddr *addr, int *addrlen)
클라이언트 소켓 구현의 이해 순서 1. 전화를 걸고 싶은데 무엇이 필요합니까? 순서 2. 전화를 걸어요 순서 1. 전화를 걸고 싶은데 무엇이 필요합니까? 소켓의 생성 순서 2. 전화를 걸어요 연결 요청 #include <sys/socket.h> int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)
“Hello World!” 서버 / 클라이언트 프로그램 예제 helloworld_server.c, helloworld_client.c 실행하기
파일의 조작
저 수준 파일 입출력(Low-Level File Access) 리눅스 혹은 윈도우즈 자체에서 제공해 주는 파일 입출력 함수를 사용하여 파일을 관리( 파일의 생성 및 삭제, 데이터 입력 및 출력)하는 것을 의미함. 리눅스에서는 모든 것을 파일로 관리한다. -파일, 소켓, 표준 입력, 표준 출력. 파일에 파일 디스크립터를 할당해서 관리(파일 디스크립터는 정수)
파일 디스크립터(File Descriptor) 파일을 관리하기 위해서 모든 파일(파일, 소켓 표준 입력, 표준 출력)에 파일 디스크립터를 할당 해 준다. 파일 디스크립터 대 상 표준 입력 1 표준 출력 2 표준 에러 출력 Operating System Program 파일 A 5 소켓 B 소켓 C 7 파일 D
File open 및 close MODE 의 미 O_CREAT 필요한 경우 파일을 생성 O_TRUNC #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int open(const char *path, int flag); #include <unistd.h> int close(int fildes); MODE 의 미 O_CREAT 필요한 경우 파일을 생성 O_TRUNC 존재하던 데이터를 모두 삭제 O_RDONLY 읽기 전용 모드로 파일을 오픈
Data read & write #include <unistd.h> ssize_t write(int fildes, const void * buf, size_t nbytes); #include <unistd.h> ssize_t read(int fildes, void *buf, size_t nbytes);
예제 확인 프로그램 예제 low_open.c, low_read.c, fd_seri.c 실행하기