1 / 14

Chapter 7 Graphical User Interface

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

maitland
Download Presentation

Chapter 7 Graphical User Interface

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 7Graphical User Interface 소켓 프로그래밍

  2. Graphical User Interface • Introduction • 비동기 소켓 • 윈도우 폼 • Echo 서버 GUI • Echo 클라이언트 GUI • SMTP 클라이언트 GUI

  3. Introduction • 그래픽 인터페이스를 통한 상호작용 • Event-driven 프로그래밍 • 컴포넌트를 클릭/선택하여 이벤트 발생 • 이벤트에 대해 수행할 작업과 관련된 코드 입력 • 사용자가 일으킨 이벤트에 의해 프로그램 흐름이 결정 • GUI는 Visual Studio 2008 또는 Visual C# 2008 Express Edition을 이용하여 설계 가능

  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. 비동기 소켓 • 핵심 코드 publicstaticvoidOnClientConnect(IAsyncResultaResult) {  TcpListener listener = (TcpListener)aResult.AsyncState; TcpClient client = listener.EndAcceptTcpClient(aResult); ...  } publicstaticvoid Main() { ... // Accept the client asynchronously IAsyncResultaResult = lst.BeginAcceptTcpClient( newAsyncCallback(OnClientConnect), lst); // Wait for a connection before continue aResult.AsyncWaitHandle.WaitOne(); ... } • 예제 프로그램 : AsyncEchoServer, StateHolder.cs

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

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

  10. 윈도우 폼 • 컴포넌트 속성과 이벤트

  11. 이벤트 발생 ... 대기 시스템 메시지 큐 애플리케이션 메시지 큐 #3 처리 애플리케이션 메시지 큐 #2 처리 애플리케이션 메시지 큐 #1 윈도우 GUI 애플리케이션 • 메시지 구동 구조

  12. Echo 서버 GUI • 폼 디자인 • 예제 코드 : ServerForm.cs

  13. Echo 클라이언트 GUI • 폼 디자인 • 코드 예제 : ClientForm.cs

  14. SMTP 클라이언트 GUI • 폼 디자인 • 코드 예제 : SMTPClientFform.cs

More Related