TCPIP Socket Programming 4 TCP 1 Network Lab

TCP/IP Socket Programming… 제 4장 TCP 기반 서버/클라이언트 1 Network Lab. Young-Chul Hwang ychwang@netwk. hannam. ac. kr HANNAM Univ.



TCP/IP Socket Programming… Network Lab. TCP/UDP에 대한 이해 q LINK 계층 ■ 물리적인 영역 표준화 [그림 4 -2] 인터넷의 연결 구조 HANNAM Univ. 4

TCP/IP Socket Programming… Network Lab. TCP/UDP에 대한 이해 q IP 계층 ■ 데이터의 전송(경로선택) [그림 4 -3] IP 라우팅 HANNAM Univ. 5




TCP/IP Socket Programming… Network Lab. TCP 기반 서버의 구현 q ‘연결 요청 대기 상태’로의 진입 listen 함수는 전달되는 인자의 소켓을 ‘서버소켓’이 되게 한다. ■ listen 함수는 ‘연결 요청 대기 큐’를 생성한다. ■ #include <sys/type. h> int listen(int s, int backlog) [ 리눅스의 listen 함수 ] #include <winsock 2. h> int listen(SOCKET s, int backlog) [ 윈도우의 listen 함수 ] HANNAM Univ. 9


TCP/IP Socket Programming… Network Lab. TCP 기반 서버의 구현 q 연결 요청 수락 하기 ■ 연결요청 대기 큐(queue)에 존재하는 클라이언트의 연결 요청 수락. #include <sys/type. h> #include <sys/socket. h> int accpet(int s, struct sockaddr * addr, int * addrlen); [ 리눅스의 accept 함수 ] #include <winsock 2. h> SOCKET accept( SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen ); [ 윈도우의 accept 함수 ] HANNAM Univ. 11

TCP/IP Socket Programming… Network Lab. TCP 기반 서버의 구현 q 연결 요청 수락 하기 [그림 4 -7] 연결 요청 수락 상태 HANNAM Univ. 12

TCP/IP Socket Programming… Network Lab. TCP 기반 서버의 구현 q Hello World 서버 프로그램 다시 보기 serv_sock=socket(PF_INET, SOCK_STREAM, 0); If (bind(serve_sock, (struct sockaddr*) &serv_addr, sizeof (serv_addr))==-1); If ( listen(serv_sock, 5) == -1) 서버 소켓 생성 소켓에 주소 할당 연결 요청 대기 상태로 진입 연결 요청 수락 clnt_sock = accept(serv_sock, (struct sockaddr*) &clnt_addr, *clnt_addr_size); 데이터 전송 write(clnt_sock, message, sizeof(message)); 연결 종료 close (clnt_sock); HANNAM Univ. 13


TCP/IP Socket Programming… Network Lab. TCP 기반 클라이언트의 구현 q 클라이언트의 기본적인 함수 호출 순서 #include <sys/type. h> int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); [ 리눅스의 연결 요청 함수 ] #include <winsock 2. h> int connect( SOCKET s, const struct sockaddr FAR *name, int namelen ); [ 윈도우의 연결 요청 함수 ] HANNAM Univ. 15

TCP/IP Socket Programming… Network Lab. TCP 기반 클라이언트의 구현 q Hello World 클라이언트 프로그램 다시 보기 sock=socket(PF_INET, SOCK_STREAM, 0); If(connect (sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr) == -1 ) 클라이언트 소켓 생성 서버로 연결 요청 데이터 수신 strl_len=read(sock, message, sizeof(message) – 1); close (sock) 연결 종료 HANNAM Univ. 16


TCP/IP Socket Programming… Network Lab. Iterative 서버의 구현 q 반복해서 클라이언트의 요청을 처리 [그림 4 -10] 반복적인(iterative) 서버의 함수 호출 순서 HANNAM Univ. 18

TCP/IP Socket Programming… Network Lab. Iterative 서버의 구현 q Iterative 서버의 코드 Template for( ; ; ){ clnt_addr_size=sizeof(clnt_addr); clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); if(clnt_sock==-1) { error_handling("accept() error"); break; } /* 데이터 전송 후 종결 */ write(clnt_sock, message, sizeof(message)); close(clnt_sock); } HANNAM Univ. 19

TCP/IP Socket Programming… Network Lab. Iterative 서버의 구현 q 실행하기 HANNAM Univ. 20


TCP/IP Socket Programming… Network Lab. 에코(echo) 서버/클라이언트의 구현 q 에코 서버의 구현 HANNAM Univ. 22

TCP/IP Socket Programming… Network Lab. 에코(echo) 서버/클라이언트의 구현 q 에코 클라이언트의 구현 HANNAM Univ. 23

TCP/IP Socket Programming… Network Lab. 윈도우즈 기반으로 구현하기 q 윈도우 기반 에코 서버 HANNAM Univ. 24

TCP/IP Socket Programming… Network Lab. 윈도우즈 기반으로 구현하기 q 윈도우 기반 에코 클라이언트 HANNAM Univ. 25

TCP/IP Socket Programming… Network Lab. 참고문헌 q “데이터 통신과 네트워킹”, 이재광 외 2명, 교보 문고 q “TCP/IP 프로토콜”, 이재광외 5명, 미래컴 q “Linux Socket Programming by Example”, Warren W. Gay, QUE '00 HANNAM Univ. 26

TCP/IP Socket Programming… Network Lab. Q&A HANNAM Univ. 27
- Slides: 27