관리 메뉴

Gyejoong's Information

Socket Programming 정리 본문

Study/Socket programming

Socket Programming 정리

연계중 2016. 9. 28. 19:52
반응형

1. 리눅스에서 소켓프로그래밍 개발도구 설치 및 설정하는 방법 (개발환경구성_GCC.txt 참고)

1) VirtualBox 설치.

2) VirtualBox에 가상머신 생성

3) VirtualBoxFedora24 설치

4) Fedora24C,C++ 개발환경 구성

5) Fedora24에 개발용 폰트 설정

6) Fedora24에 한글입력 설정

 

2. vi, gcc, make, man 사용법 및 의미

1) vi 사용법

- vi <파일명> 으로 vi 편집기를 사용할 수 있다.

2) gcc 사용법

- gccc,c++등의 프로그래밍 언어들을 컴파일 할 수 있는 컴파일러이다.

3) make 사용법

- make라고 입력하면 makefile이 실행되어 makefile안에 PROGS에 소스파일을 등록하면 등록된 소스파일이 컴파일되어 파일을 실행 할수있게 만들어준다.

4) man 사용법

- man <매뉴얼페이지> <명령어>를 입력하면 <매뉴얼페이지>에 명령어의

대한 설명을 알려준다.

 

3. List of TCP and UDP port numbers

1) Well known port

- Echo : 7

- Discard : 9

- Daytime : 13

- Quote of the Day : 17

- FTP : 20/21

- Telnet : 23

- Finger : 79

- HTTP : 80

- ssh : 22

- smtp : 25

- dns : 53

- https : 443

 

4. Simple TCP-IP Services, telnet, netstat

1) Start Windows 7 Simple TCP-IP Services

2) Telnet Client Install

3) Daytime Service Test

4) Simple TCP-IP 서비스 접속을 위해 윈도우 방화벽 설정

 

5. Daytime service/protocol (rfc867) 어떠한 기능을 제공하는 서비스인지 설명

- daytime은 클라이언트의 질의에 응답하여 아스키 형태로 현재시간과 날짜를 출력하는 기능을 제공한다.

6. argc, argv

- ex) ./daytimetcpcli

argc = 1

argv[0] = "./daytimetcpcli"

argv[1] = 0

- ex) ./daytimetcpcli 49.1.218.120

argc = 2

argv[0] = "./daytimetcpcli"

argv[1] = "49.1.218.120"

 

7. daytime client (daytimetcpcli.c 암기)

 

8. daytime server (daytimetcpsrv.c 암기)

 

9. err_sys()err_quit()는 각각 언제 사용해야 하는가?

- err_sys()의 소스코드

void err_sys (const char *message)

{ perror(message);

exit(1);

}

err_sys()perror()라는 함수를 사용한다. perror()함수는 표준 에러메시지를

화면에 출력하는 함수이다. 출력되는 에러 메시지는 시스템콜 혹은 라이브러리

함수를 호출하면서 발생한 마지막 에러에 대한 설명을 나타낸다.

, err_sys()는 표준 에러메시지를 출력해야 될 때, 사용하게 된다.

- err_quit()의 소스코드

void err_quit(const char *message)

{ fputs(message,stderr);

fputc('\n',stderr);

exit(1);

}

err_quit()는 프로그래머가 확실하게 에러에 대한 설명을 알고 있을 때,

err_quit(message)를 이용하여 message에 출력하고 싶은 메시지를 출력한다.

 

 

 

 

 

 

 

 

 

10. daytime 서비스의 전체적인 흐름도

11. QOTD service/protocol (rfc865) 어떠한 기능을 제공하는 서비스인가?

- qotd는 클라이언트의 질의에 응답하여 문자열 형태로 랜덤의 명언을 제공하는 서비스이다.

 

12. quote of the day client (qotdtcpcli.c 소스코드 참고)

 

 

 

 

 

 

 

 

 

 

 

13. quote of the day 서비스의 전체적인 흐름도

14. syslog(), setlogmask(), log level

syslog(int priority, const char *message, ...);

syslog()는 시스템에 로그를 남기기 위하여 사용하는 함수이다.

사용예제

- syslog(LOG_INFO|LOG_LOCAL0,"hello world\n");

syslog()openlog()로 옵션을 셋팅하고 나서 그 셋팅된 옵션에 남기고 싶은 로그

메시지를 입력하면 그 남긴 메시지가 시스템에 로그로 남게된다.

setlogmask()의 사용예제

- setlogmask(LOG_UPTO(LOG_NOTICE);

// 위 코드의 의미는 NOTICE 레벨까지의 메시지만을 기록한다는 의미이다.

log level -> LOG의 레벨을 설정할수 있다. log level

NOTICE,INFO,LOCAL0,UPTO 등이 있다.

15. syslog() 함수를 이용하여 남긴 로그를 확인하기 위한 명령어.

journalctl

journalctl -f

journalctl | grep foobar

 

예전 OS

cat /var/log/messages

 

16. 엔디언이란 무엇인지 간략히 설명하고, 리틀 엔디언과 빅 엔디언의 차이점을

그림을 그려 설명하라.

- 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는

방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서라 한다.

- 빅엔디언 : 바이트의 순서가 큰 단위가 앞에 나온다.

- 리틀엔디언 : 바이트의 순서가 작은 단위가 나온다.

17. 네트워크 바이트 순서와 호스트바이트순서 간 변화 함수들

- htonl() - long형 호스트 - 네트워크

- htons() - short형 호스트 - 네트워크

- ntohl() - long형 네트워크 - 호스트

- ntohs() - short형 네트워크 - 호스트

18. Echo service/protocol (rfc862) 어떠한 기능을 제공하는 서비스인지 설명

- echo는 클라이언트의 질의에 응답하여 서버와 클라언트가 메시지를 주고 받을 수 있는

기능을 제공한다.

19. Echo client (echotcpcli.c 소스코드 참고)

20. Echo server (echotcpsrv.c), common.h, writen.c, readline.c 모두 볼 것

 

21. fork() 함수의 역할 (fork.c)

- 부모 프로세스로 자식프로세스를 만든다. 서버프로세스 하나만 있는 걸

fork()함수로 자식프로세스를 만들어서 다중접속을 가능하게 한다.

22. fork() 사용하여 다중접속 가능하도록 업그레이드

- pid_t <변수명>;

if(<변수명> = fork()) < 0); // fork error 처리

err_sys("fork error");

else if(<변수명> == 0) -> child process가 생성되었다는 것.

close(listenfd); // child process가 생성되면 리슨소켓을 닫아준다.(그래야 새로운클라언트가 접속되게 하여 다중접속이가능)

readwrite를함.

23. echo 서비스의 전체적인 흐름도

 

 

24. echo 서버에서 accept() 호출 전부터 fork() 이후의 과정을 그림으로 그리기(위 그림 참고)

 

25. finger service/protocol (rfc742) 어떠한 기능을 제공하는 서비스인지 설명

- 시스템 사용자 정보를 확인하는 기능을 제공하는 서비스이다.

 

26. finger client (fingertcpcli.c 소스코드 참고)

반응형
Comments