chapter 7 graphical user interface
Post on 05-Jan-2016
48 Views
Preview:
DESCRIPTION
TRANSCRIPT
Chapter 7Graphical User
Interface소켓 프로그래밍
Introduction 비동기 소켓 윈도우 폼 Echo 서버 GUI Echo 클라이언트 GUI SMTP 클라이언트 GUI
Graphical User Interface
그래픽 인터페이스를 통한 상호작용 Event-driven 프로그래밍
◦ 컴포넌트를 클릭 / 선택하여 이벤트 발생◦ 이벤트에 대해 수행할 작업과 관련된 코드 입력◦ 사용자가 일으킨 이벤트에 의해 프로그램 흐름이 결정
GUI 는 Visual Studio 2008 또는 Visual C# 2008 Express Edition 을 이용하여 설계 가능
Introduction
지금까지 사용된 Accept(), Read(), Write() 등의 메서드는 blocking 메서드◦ Blocking – 실행을 완료할 때까지 다른 모든 작업을 수행하지 못하게 막는 것을 의미◦ Accept()
접속이 성립되어 클라이언트의 객체가 반환될 때까지 busy waiting 을 하며 다른 모든 태스크가 수행되지 못하도록 막아놓고 대기
◦ Read(), Write() 상대방이 데이터를 보낼 때까지 또는 상대방이 읽을 준비가 될 때까지 대기
이러한 blocking 은 콘솔 응용 프로그램에서는 큰 문제가 되지 않을 수도 있겠지만 , GUI 기반 프로그램에서는 freezing 현상이 발생
전체 프로그램이 멈추지 않고 수행을 계속할 수 있도록 하는 방법이 필요◦ 프로그램은 접속요청에 대한 busy waiting 을 할 필요가 없으며 , 실제 접속요청이
들어올 때 수행을 재개하도록 함으로써 해결
비동기 소켓
비동기 메서드를 가지는 클래스◦ Socket◦ TcpListener◦ TcpClient◦ NetworkStream◦ UdpClient
비동기 메서드의 이름 앞에는 Begin 또는 End 가 붙음◦ Begin<Method Name> : 비동기 초기화 메서드◦ End<Method Name> : 비동기 종료 메서드◦ Example : BeginAcceptTcpClient(), EndAcceptTcpClient()
비동기 소켓
비동기 메서드 호출◦ 비동기 메서드를 호출한 뒤에 비동기 작업이 준비가 되었을 때 , 이를 처리할
메서드를 미리 정의해야 함 . 이때 정의할 메서드는 IAsyncResult라는 인자를 가짐
◦ 정의된 메서드는 비동기 작업이 준비되었을 때 callback 대리자를 통해서 호출됨◦ 즉 , 비동기 메서드의 호출은 이 callback 대리자를 인자로 하여 호출을 하고 ,
다른 작업을 진행하다가 호출한 비동기 작업이 준비가 되면 callback 대리자에 의해 해당 작업을 처리할 메서드를 호출하는 방식을 가짐
IAsyncResult◦ 비동기 작업의 상태를 나타내며 비동기 초기화 메서드 Begin<Method
Name> 의 반환 형식◦ 또한 , callback 대리자를 통해 호출되는 메서드로 전달되어 이후 , 비동기 종료
메서드 End<Method Name> 로 전달됨
비동기 소켓
핵심 코드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
비동기 소켓
GUI 기반 프로그램을 만들기 위해서 새 프로젝트를 생성◦ 콘솔 응용 프로그램이 아닌 Windows Form 응용 프로그램을 선택◦ 프로젝트 생성 후 폼 디자인 화면
윈도우 폼
윈도우 컴포넌트의 추가
◦ 도구상자로부터 drag-and-drop 방식으로 폼에 컴포넌트 추가◦ 도구상자에서 컴포넌트를 선택하여 폼에 그리는 방식으로 추가
윈도우 폼
컴포넌트 속성과 이벤트
윈도우 폼
윈도우 GUI 애플리케이션 메시지 구동 구조
시스템메시지 큐
이벤트 발생
애플리케이션메시지 큐 #1
애플리케이션 메시지 큐 #2
애플리케이션메시지 큐 #3
...
처리
대기
처리
폼 디자인
예제 코드 : ServerForm.cs
Echo 서버 GUI
폼 디자인
코드 예제 : ClientForm.cs
Echo 클라이언트 GUI
폼 디자인
코드 예제 : SMTPClientFform.cs
SMTP 클라이언트 GUI
top related