• 검색 결과가 없습니다.

Chapter 7 Graphical User Interface

N/A
N/A
Protected

Academic year: 2021

Share "Chapter 7 Graphical User Interface"

Copied!
14
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Chapter 7 Graphical User

Interface

소켓 프로그래밍

(2)

 Introduction

 비동기 소켓

 윈도우 폼

 Echo 서버 GUI

 Echo 클라이언트 GUI

 SMTP 클라이언트 GUI

Graphical User Interface

(3)

 그래픽 인터페이스를 통한 상호작용

 Event-driven 프로그래밍

◦ 컴포넌트를 클릭 / 선택하여 이벤트 발생

◦ 이벤트에 대해 수행할 작업과 관련된 코드 입력

◦ 사용자가 일으킨 이벤트에 의해 프로그램 흐름이 결정

 GUI 는 Visual Studio 2008 또는 Visual C#

2008 Express Edition 을 이용하여 설계 가능

Introduction

(4)

 지금까지 사용된 Accept(), Read(), Write() 등의 메서드는 blocking 메 서드

◦ Blocking – 실행을 완료할 때까지 다른 모든 작업을 수행하지 못하게 막는 것을 의미

◦ Accept()

접속이 성립되어 클라이언트의 객체가 반환될 때까지 busy waiting 을 하며 다른 모든 태 스크가 수행되지 못하도록 막아놓고 대기

◦ Read(), Write()

상대방이 데이터를 보낼 때까지 또는 상대방이 읽을 준비가 될 때까지 대기

 이러한 blocking 은 콘솔 응용 프로그램에서는 큰 문제가 되지 않을 수도 있겠지만 , GUI 기반 프로그램에서는 freezing 현상이 발생

 전체 프로그램이 멈추지 않고 수행을 계속할 수 있도록 하는 방법이 필요

◦ 프로그램은 접속요청에 대한 busy waiting 을 할 필요가 없으며 , 실제 접속요청이 들어올 때 수행을 재개하도록 함으로써 해결

비동기 소켓

(5)

 비동기 메서드를 가지는 클래스

◦ Socket

◦ TcpListener

◦ TcpClient

◦ NetworkStream

◦ UdpClient

 비동기 메서드의 이름 앞에는 Begin 또는 End 가 붙음

◦ Begin<Method Name> : 비동기 초기화 메서드

◦ End<Method Name> : 비동기 종료 메서드

◦ Example : BeginAcceptTcpClient(), EndAcceptTcpClient()

비동기 소켓

(6)

 비동기 메서드 호출

비동기 메서드를 호출한 뒤에 비동기 작업이 준비가 되었을 때 , 이를 처리할 메서 드를 미리 정의해야 함 . 이때 정의할 메서드는 IAsyncResult라는 인자를 가짐

정의된 메서드는 비동기 작업이 준비되었을 때 callback 대리자를 통해서 호출 됨

즉 , 비동기 메서드의 호출은 이 callback 대리자를 인자로 하여 호출을 하고 , 다른 작업을 진행하다가 호출한 비동기 작업이 준비가 되면 callback 대리자에 의해 해당 작업을 처리할 메서드를 호출하는 방식을 가짐

 IAsyncResult

비동기 작업의 상태를 나타내며 비동기 초기화 메서드 Begin<Method Name>

의 반환 형식

또한 , callback 대리자를 통해 호출되는 메서드로 전달되어 이후 , 비동기 종료 메서드 End<Method Name> 로 전달됨

비동기 소켓

(7)

핵심 코드

public static void OnClientConnect(IAsyncResult aResult) {

TcpListener listener = (TcpListener)aResult.AsyncState;

TcpClient client = listener.EndAcceptTcpClient(aResult);

...

}

public static void Main() { ...

// Accept the client asynchronously

IAsyncResult aResult = lst.BeginAcceptTcpClient(

new AsyncCallback(OnClientConnect), lst);

// Wait for a connection before continue aResult.AsyncWaitHandle.WaitOne();

...

}

예제 프로그램 : AsyncEchoServer, StateHolder.cs

비동기 소켓

(8)

 GUI 기반 프로그램을 만들기 위해서 새 프로젝트를 생성

◦ 콘솔 응용 프로그램이 아닌 Windows Form 응용 프로그램을 선택

◦ 프로젝트 생성 후 폼 디자인 화면

윈도우 폼

(9)

 윈도우 컴포넌트의 추가

◦ 도구상자로부터 drag-and-drop 방식으로 폼에 컴포넌트 추가

◦ 도구상자에서 컴포넌트를 선택하여 폼에 그리는 방식으로 추가

윈도우 폼

(10)

 컴포넌트 속성과 이벤트

윈도우 폼

(11)

윈도우 GUI 애플리케이션

 메시지 구동 구조

시스템 메시지 큐

이벤트 발생

애플리케이션 메시지 큐 #1

애플리케이션 메시지 큐 #2

애플리케이션 메시지 큐 #3

...

처리 대기

처리

(12)

 폼 디자인

 예제 코드 : ServerForm.cs

Echo 서버 GUI

(13)

 폼 디자인

 코드 예제 : ClientForm.cs

Echo 클라이언트 GUI

(14)

 폼 디자인

 코드 예제 : SMTPClientFform.cs

SMTP 클라이언트 GUI

참조

관련 문서