14
Chapter 7 Graphical User Interface 소소 소소소소소

Chapter 7 Graphical User Interface

Embed Size (px)

DESCRIPTION

Chapter 7 Graphical User Interface. 소켓 프로그래밍. Graphical User Interface. Introduction 비동기 소켓 윈도우 폼 Echo 서버 GUI Echo 클라이언트 GUI SMTP 클라이언트 GUI. Introduction. 그래픽 인터페이스를 통한 상호작용 Event-driven 프로그래밍 컴포넌트를 클릭 / 선택하여 이벤트 발생 이벤트에 대해 수행할 작업과 관련된 코드 입력 사용자가 일으킨 이벤트에 의해 프로그램 흐름이 결정 - PowerPoint PPT Presentation

Citation preview

Page 1: Chapter 7 Graphical User Interface

Chapter 7Graphical User

Interface소켓 프로그래밍

Page 2: Chapter 7 Graphical User Interface

Introduction 비동기 소켓 윈도우 폼 Echo 서버 GUI Echo 클라이언트 GUI SMTP 클라이언트 GUI

Graphical User Interface

Page 3: Chapter 7 Graphical User Interface

그래픽 인터페이스를 통한 상호작용 Event-driven 프로그래밍

◦ 컴포넌트를 클릭 / 선택하여 이벤트 발생◦ 이벤트에 대해 수행할 작업과 관련된 코드 입력◦ 사용자가 일으킨 이벤트에 의해 프로그램 흐름이 결정

GUI 는 Visual Studio 2008 또는 Visual C# 2008 Express Edition 을 이용하여 설계 가능

Introduction

Page 4: Chapter 7 Graphical User Interface

지금까지 사용된 Accept(), Read(), Write() 등의 메서드는 blocking 메서드◦ Blocking – 실행을 완료할 때까지 다른 모든 작업을 수행하지 못하게 막는 것을 의미◦ Accept()

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

◦ Read(), Write() 상대방이 데이터를 보낼 때까지 또는 상대방이 읽을 준비가 될 때까지 대기

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

전체 프로그램이 멈추지 않고 수행을 계속할 수 있도록 하는 방법이 필요◦ 프로그램은 접속요청에 대한 busy waiting 을 할 필요가 없으며 , 실제 접속요청이

들어올 때 수행을 재개하도록 함으로써 해결

비동기 소켓

Page 5: Chapter 7 Graphical User Interface

비동기 메서드를 가지는 클래스◦ Socket◦ TcpListener◦ TcpClient◦ NetworkStream◦ UdpClient

비동기 메서드의 이름 앞에는 Begin 또는 End 가 붙음◦ Begin<Method Name> : 비동기 초기화 메서드◦ End<Method Name> : 비동기 종료 메서드◦ Example : BeginAcceptTcpClient(), EndAcceptTcpClient()

비동기 소켓

Page 6: Chapter 7 Graphical User Interface

비동기 메서드 호출◦ 비동기 메서드를 호출한 뒤에 비동기 작업이 준비가 되었을 때 , 이를 처리할

메서드를 미리 정의해야 함 . 이때 정의할 메서드는 IAsyncResult라는 인자를 가짐

◦ 정의된 메서드는 비동기 작업이 준비되었을 때 callback 대리자를 통해서 호출됨◦ 즉 , 비동기 메서드의 호출은 이 callback 대리자를 인자로 하여 호출을 하고 ,

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

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

Name> 의 반환 형식◦ 또한 , callback 대리자를 통해 호출되는 메서드로 전달되어 이후 , 비동기 종료

메서드 End<Method Name> 로 전달됨

비동기 소켓

Page 7: Chapter 7 Graphical User Interface

핵심 코드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

비동기 소켓

Page 8: Chapter 7 Graphical User Interface

GUI 기반 프로그램을 만들기 위해서 새 프로젝트를 생성◦ 콘솔 응용 프로그램이 아닌 Windows Form 응용 프로그램을 선택◦ 프로젝트 생성 후 폼 디자인 화면

윈도우 폼

Page 9: Chapter 7 Graphical User Interface

윈도우 컴포넌트의 추가

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

윈도우 폼

Page 10: Chapter 7 Graphical User Interface

컴포넌트 속성과 이벤트

윈도우 폼

Page 11: Chapter 7 Graphical User Interface

윈도우 GUI 애플리케이션 메시지 구동 구조

시스템메시지 큐

이벤트 발생

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

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

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

...

처리

대기

처리

Page 12: Chapter 7 Graphical User Interface

폼 디자인

예제 코드 : ServerForm.cs

Echo 서버 GUI

Page 13: Chapter 7 Graphical User Interface

폼 디자인

코드 예제 : ClientForm.cs

Echo 클라이언트 GUI

Page 14: Chapter 7 Graphical User Interface

폼 디자인

코드 예제 : SMTPClientFform.cs

SMTP 클라이언트 GUI