12장. 소켓시스템
(3) 네트워크 프로그래밍
강의 목표
- 소켓을 이용한 연결형 클라이언트-서버 구조 이해
- 소켓을 이용한 비연결형 클라이언트-서버 구조 이해
연결형 서비스
- 소켓: 네트워크 통신을 위한 소프트웨어 교신점
- 두 개의 독립 프로세스가 네트워크를 통해 통신하려면 논리적인 연관관계를 맺어주는 소켓 필요
-
서버의 동작
- Well-known 포트에서 대기
-
동작과정
- 서비스 교신점(호스트의 IP 주소, 포트번호) 공개
- 클라이언트로부터 발생하는 서비스 요구 대기
- 요청이 오면 클라이언트에 서비스 제공
- 해당 클라이언트에 서비스 제공 완료
- 단계 2로 이동, 반복
-
클라이언트의 동작
- 서버의 Well-known 포트로 접속 시도
-
동작 과정
- 원하는 서비스를 제공하는 서버 확인
- 해당 서버와 연결 시도
- 서버에 서비스 요청
- 서버에 서비스 요구 완료
- TCP를 이용한 통신 절차
-
소켓 함수의 컴파일
-
소켓 관련 라이브러리리 추가 (solaris)
cc -o time_client time_client.c -lsocket -lnsl
cc -o time_server time_server.c -lsocket -lnsl
- 서버 먼저 실행하고, 이어서 클라이언트 실행
-
- 클라이언트 예제
# define TIME_SERVER "211.233.201.30"
# define TIME_PORT 5010
main ()
{
int sock;
struct sockaddr_in server;
char buf [256];
sock = socket (AP_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl (inet_addr (TIME_SERVER));
server.sin_port = htons (TIME_PORT);
connect (sock, (struct sockaddr *)&server, sizeof(server));
if (recv (sock, buf, sizeof (buf), 0) == -1)
exit (1);
printf("Time information from server is %s", buf);
close (sock);
}
- 서버 예제
비연결형 서비스
- UDP를 이용한 통신 절차
- 클라이언트 예제
- 서버 예제