25
IT CookBook, 윈도우 API 프로그래밍 IT CookBook, 윈도우 API 프로그래밍 1 윈도우 소켓 프로그래밍 2015_B ※ 한빛미디어의 윈도우 API 프로그래밍과 윈도우 네트워크 프로그래밍을 참조함 Updated 2015. 11.25

9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

IT CookBook, 윈도우 API 프로그래밍 IT CookBook, 윈도우 API 프로그래밍

1

윈도우 소켓 프로그래밍 2015_B

※ 한빛미디어의 윈도우 API 프로그래밍과 윈도우 네트워크 프로그래밍을 참조함 Updated 2015. 11.25

Page 2: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

소켓프로그래밍 환경 설정

• 프로젝트 생성 직후: 1) [프로젝트]Properties [속성],

• 팝업창에서: 1) Linker Command Line (명령줄), 2)) Additional Options에 ws2_32.lib 추가

2

Page 3: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

실습 5) 논블록킹 양방향 통신 프로그램.

※ 서버에서도 클라이언트에 메시지를 보낼 수 있도록 변경한다!!!

이 때, 서버용 프로그램과 클라이언트용 프로그램은 각각 작성함!

3

Page 4: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

1. VS 2015 수행 후, Win32 Project 생성 (서버용)

프로젝트 네임: socket_Server_5

An Empty project 선택

ws2_32.lib 옵션 설정 (강의 자료 p.2 참조)

2. socket_Server_5.cpp 파일을 생성한다.

3. 기존 작성한 socket_Server_4.cpp 의 내용을 socket_Server_5.cpp 로 복사

4. 강의 자료 6페이지 내용을 socket_Server_5.cpp에 추가로 작성한다.

5. 빌드까지만 수행 한다.

4

실습 5: 서버) 논블럭킹 양방향 통신 서버

※ 논블록킹 양방향 통신(서버 프로그램 작성)

Page 5: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

5

// WM_KEYDOWN 부분 코드만 추가!

// 서버 윈도우 창에서 키보드가 눌려지면

// 클라이언트에 “Hi Client!”가 전달됨

실습 5: socket_Server_5) 논블록킹 송수신용 서버.

// WM_KEYDOWN: 부분을 추가한다!

Page 6: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

1. VS 2015 수행 후, Win32 Project 생성 (클라이언트용)

프로젝트 네임: socket_Client_5

An Empty project 선택

ws2_32.lib 옵션 설정 (강의 자료 p.2 참조)

2. socket_Client_5.cpp 파일을 생성한다.

3. 실습 4의 socket_Client_4.cpp 내용을 socket_Client_5.cpp 로 복사한다.

4. 강의 자료 7~9페이지 내용을 socket_Client_5.cpp 에 추가로 작성한다.

5. 빌드까지만 수행 한다.

※ 논블록킹 양방향 통신(클라이언트 프로그램 작성)

6

실습 5: socket_Client_5) 논블록킹 양방향 통신

Page 7: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

실습 5: socket_Client_5) 논블록킹 송수신 클라이언트(1/3)

7

// 코드 상단의 전역 변수 선언 구간에 다음을 추가

// WndProc( ) 변수 선언 부분에 코드 추가

Page 8: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

8

// WM_CREATE: 코드 추가 and WM_PAINT: 코드 추가

// 서버에서 보낸 데이터를 받기 위하여

// FD_READ 이벤트에 대해

// WM_ASYNC 윈도우 메시지를 등록

// 서버에서 보낸 메시지를 msg에 저장하여

// 그 내용을 화면에 출력

실습 5: socket_Client_5) 논블록킹 송수신 클라이언트(2/3)

Page 9: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

9

실습 5: socket_Client_5) 논블록킹 송수신 클라이언트(3/3)

// 클라이언트 프로그램이 다른 메시지를 처리하는 중

// 서버에서 데이터를 보내면

// 윈도우 메시지 WM_ASYNC가 FD_READ와 같이 도착한다.

// 소켓 s를 서버와의 통신에 사용하므로

// 소켓 s를 통해 버퍼에 데이터를 읽음.

// 해당 내용을 화면에 출력하기 위하여

// 강제로 InvalidateRect( )을 이용해서,

// WM_PAINT 발생시킴

Page 10: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

1) socket_Server_5.exe 실행

• 서버 윈도우 화면 출력

2) socket_Client_5.exe 실행

• 클라이언트 윈도우 화면 출력

3) 클라이언트 윈도우에서 키보드 메시지 발생 시킴

• 서버 윈도우에 “안녕 Server!” 출력됨

4) 서버 윈도우에서 키보드 메시지 발생 시킴

• 클라이언트 윈도우에 “Hi Client!” 출력됨

10

실습 5 실행) Server_5 과 Client_5 실행

Page 11: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

실습 6) 간단한 채팅 프로그램.

※간단한 채팅 프로그램을 작성해본다!!!

기존에는 미리 만든 텍스트를 전송, 지금은 타이핑 한 내용을 전송

이 때, 서버용 프로그램과 클라이언트용 프로그램은 각각 작성함!

11

Page 12: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

1. VS 2015 수행 후, Win32 Project 생성(서버용)

프로젝트 네임: socket_Server_6

An Empty project 선택

ws2_32.lib 옵션 설정 (강의 자료 p.2 참조)

2. socket_Server_6.cpp 파일을 생성한다.

3. 6_server_txt.txt 의 내용을 socket_Server_6.cpp 로 복사한다.

4. 강의 자료 18~22페이지 내용을 socket_Server_6.cpp 에 추가로 작성한다.

5. 빌드까지만 수행 한다.

※ 채팅 프로그램(서버 프로그램 작성)

12

실습 6: 서버) 간단한 채팅 프로그램 서버

Page 13: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

13

실습 6: socket_Server_6) 채팅 서버 프로그램 (1/5)

Page 14: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

14

실습 6: socket_Server_6) 채팅 서버 프로그램 (2/5)

// 윈도우가 생성되면 서버용 소켓을 만들고, 서버 주소 ‘127.0.0.1’, 포트번호 ‘20’에서 클라이언트 접속을 기다린다.

// 이 때 ‘비동기화’방식을 이용하게 되므로, 클라이언트가 접속하지 않아도 일단 서버 윈도우는 실행된다.

Page 15: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

15

실습 6: socket_Server_6)

채팅 서버 프로그램 (3/5)

Page 16: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

16

// 서버에서 입력한 내용과 클라이언트에서 받은 문자열을 다른 위치에 출력

// msg 여부 판단하는 if문 확인

// 0, 0 위치에 출력되는 것은 무엇일까?

// 0. 30 위치에 출력되는 것은 무엇일까?

실습 6: socket_Server_6) 채팅 서버 프로그램 (4/5)

Page 17: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

17

실습 6: socket_Server_6) 채팅 서버 프로그램 (5/5)

// WM_CHAR 윈도우 메시지가 발생하면

// ‘enter’키 입력이 들어왔는지 확인 후,

// ‘enter’키가 아니면 str에 저장

// ‘enter’이면 소켓을 통해 클라이언트에 전송

Page 18: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

1. VS 2015 수행 후, Win32 Project 생성 (클라이언트용)

프로젝트 네임: socket_Client_6

An Empty project 선택

ws2_32.lib 옵션 설정 (강의 자료 p.2 참조)

2. socket_Client_6.cpp 파일을 생성한다.

3. 6_Client_txt.txt 의 내용을 socket_Client_6.cpp 로 복사한다.

4. 강의 자료 19~22페이지 내용을 socket_Client_6.cpp 에 추가로 작성한다.

5. 빌드까지만 수행 한다.

※ 채팅 프로그램(클라이언트 프로그램 작성)

18

실습 6: Client) 간단한 채팅 프로그램

Page 19: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

실습 6: socket_Client_6) 채팅 클라이언트 (1/4)

19

Page 20: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

20

실습 6: socket_Client_6) 채팅 클라이언트 (2/4)

// 클라이언트를 위한 윈도우가

// 생성되면 먼저 소켓을 생성.

// 이 소켓을 이용해 서버에

// 접속 시도(connect)

// 서버에 보낸 데이터를 받아야 함!

// FD_READ 이벤트에 대해 WM_ASYNC 윈도우 메시지를 등록

Page 21: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

21

실습 6: socket_Client_6) 채팅 클라이언트 (3/4)

// 클라이언트 프로그램이 다른 메시지를 처리하는 중

// 서버에서 데이터를 보내면

// 윈도우 메시지 WM_ASYNC와 FD_READ가 같이 도착

// 소켓 s를 서버와의 통신에 사용하므로

// 소켓 s를 통해 버퍼에 데이터를 읽어 들임.

Page 22: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

22

실습 6: socket_Client_6) 채팅 클라이언트 (4/4)

// 클라이언트 윈도우에

// 입력하는 문자정보를 저장하여

// 화면 출력 및

// 서버에 전송.

Page 23: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

1) 서버 실행 socket_Server_6.exe

2) 클라이언트 실행 socket_Client_6.exe

- [클라이언트]에서 먼저 타이핑 후 엔터

서버 화면 확인!

- [서버]에서 타이핑 후 엔터

클라이언트 화면 확인

• 송신할 메시지는 위에 등장

• 수신한 메시지는 아래에 출력

23

실습 6 실행) Server_6 과 Client_6 실행

작성 후 엔터 작성 후 엔터

Page 24: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

연습문제 1

• 제목

서버에서 클라이언트로 그림 보내기

• 내용

- 서버에서 직선, 원, 사각형을 선택하여 그릴 수 있다

- “전송”버튼을 누르면 클라이언트 윈도우에 같은 그림이 나타난다.

24

Page 25: 9장 윈도우 소켓 프로그래밍contents.kocw.net/KOCW/document/2015/korea_sejong/... · 2016-09-09 · IT CookBook, 윈도우 APIAPI 프로그래밍 1 윈도우 소켓 프로그래밍

연습문제 2

• 제목

서버와 클라이언트가 그림 교환하기

클라이언트에서도 서버로 정보가 전송될 수 있도록, 연습문제 1을 수정한다!

• 내용

- 서버, 클라이언트에서 직선, 원, 사각형을 선택하여 그릴 수 있다

- “전송”버튼을 누르면 상대방 윈도우에 같은 그림이 나타난다.

25