Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)

Slides:



Advertisements
Similar presentations
메시지 처리의 기본 개념 메시지 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값 윈도우 프로그래밍 가장 중요한 것은 메시지를 처리하는 것 윈도우 시스템 Application 이벤트 발생 메시지 전송 메시지 처리 화면에 출력.
Advertisements

프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
컴퓨터 공학 설계 및 실험 I MFC programming
어서와 Java는 처음이지! 제3장선택과 반복.
Vision System Lab, Sang-Hun Han
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
Lab 6 Guide: 교재 14장 DLL 예제. Regular DLL 만들기 - 암시적 연결 ( 쪽) 명시적 연결 ( 쪽)
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
C++ Espresso 제1장 기초 사항.
Lecture 2 MFC and Application Frameworks
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Visual C++ Programming Document/View Architecture 3
Network Socket Programming
7장 배열 ②.
D. 지뢰찾기 분석 설계 예제.
다이얼로그 박스와 컨트롤 컴퓨터 계측 및 실습.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
윤 홍 란 MFC 기초 윤 홍 란
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Internet Computing KUT Youn-Hee Han
Internet Computing KUT Youn-Hee Han
태양계 시뮬레이션 팀 명: 복학생 강유진 박지혜.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
범용 소켓 클래스 만들기.
Traceroute 기능 분석 및 프로그래밍
Microsoft Visual C++ 제 1편 입문편 5장. 샘플 프로그램의 사용자화
MFC Application Frameworks (AFX)
MFC 프로그래밍에 관한 팁 / Keyboard / Timer
MFC 프로그래밍에 관한 팁 / Keyboard
Visual C++ Programming Output and File
Visual C++ Programming Common Controls
Visual C++ Programming Output and File
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
DataScience Lab. 박사과정 김희찬 (월)
ASP.NET Mobile Controls
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
프로그래밍2 및 실습 C언어 기반의 C++ 2.
스택(Stack) 김진수
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
DataScience Lab. 박사과정 김희찬 (월)
OpenCV 설치 및 구성 OpenCV
Lab 4 보고서 교재 5장 사용자 인터페이스 예제 - 사용자 인터페이스 갱신
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
[CPA340] Algorithms and Practice Youn-Hee Han
Chap. 14 성능향상시키기 PS Lab. 이지연.
ODBC &DAO 안명상.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
DataScience Lab. 박사과정 김희찬 (화)
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
작성일 참고서적 – Programing Game AI by Example
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
제 7장 이벤트.
C# 10장. 참조형.
2015년 2학년 1반.
04장 ㅎㅎ 화소점 처리 화소 점 처리의 개념 디지털 영상의 산술연산과 논리연산 디지털 영상의 다양한 화소 점 처리 기법
컨트롤, 프로퍼티, 이벤트.
실시간 음성 채팅 서비스 (Voice Chatting Programe)
박 현 미 울산여자상업고등학교 창업포스터 만들며 포토샵과 친해지기 박 현 미 울산여자상업고등학교.
DataScience Lab. 박사과정 김희찬 (화)
1 2 4 &
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
제 4장 Visual C++ COM 컴파일러.
Presentation transcript:

Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 1371-1380쪽)

실습 목적 및 장비 실습 목적 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0) 소켓의 사용 방법 클라이언트-서버 구조의 표현 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)

일대일 채팅 프로그램 프로그램 개요 다이얼로그 기반 애플리케이션 범용 소켓 클래스 응용 한 프로그램 안에 서버와 클라이언트 기능이 모두 포함되어 있음 실행 파일 (http://cs.sookmyung.ac.kr/class/06395/lec/exe/Chat.exe) CChatDlg CConnectDlg Edit (m_strAddress) List (m_ctrlListBox) [Sort] 속성 = False Edit (m_strEdit) [Multiline] = True

일대일 채팅 프로그램 – 준비 부분 Stdafx.h 끝에 다음 내용 추가 #include <afxsock.h> 소켓 관련 기능을 사용하기 위함 BOOL CChatApp::InitInstance() { if (!AfxSocketInit()) { AfxMessageBox(_T("소켓 초기화 실패")); return FALSE; } … 소켓 사용 준비 void CChatDlg::OnOK() {} [Enter] 키를 누를 때 발생하는 IDOK로 인한 대화상자 종료를 방지

일대일 채팅 프로그램 – 범용 소켓 클래스 포함시키기 범용 소켓 클래스 파일 가져오기 범용 소켓 클래스 파일들을 현재 프로젝트 디렉터리에 복사 [Project | Add To Project | Files] 메뉴를 선택한 후 복사한 파일들을 프로젝트에 추가 Stdafx.h 끝에 다음 내용 추가 소켓 클래스 인스턴스들을 선언 #include "ServerSocket.h" #include "DataSocket.h" CServerSocket 및 CDataSocket 클래스를 사용하기 위함 class CChatDlg : public CDialog { … CServerSocket m_ServerSocket; CDataSocket m_DataSocket; };

일대일 채팅 프로그램 – 서버 기능 구현 (1/2) 서버 소켓 초기화 접속 요청 받아들이기 준비 (UM_ACCEPT 메시지 처리기 선언) BOOL CChatDlg::OnInitDialog() { … m_ServerSocket.Init(this, 2000); return TRUE; } class CChatDlg : public CDialog { afx_msg LRESULT OnAccept(WPARAM wParam, LPARAM lParam); }; BEGIN_MESSAGE_MAP(CChatDlg, CDialog) … ON_MESSAGE(UM_ACCEPT, OnAccept) END_MESSAGE_MAP()

일대일 채팅 프로그램 – 서버 기능 구현 (2/2) 접속 요청 받아들이기 LRESULT CChatDlg::OnAccept(WPARAM wParam, LPARAM lParam) { // 연결을 받아들이고, 클라이언트와 m_DataSocket을 연결시켜 줌 if (!m_ServerSocket.Accept(m_DataSocket)) AfxMessageBox(_T("Accept 실패")); return 0L; } // 데이터 소켓 초기화 m_DataSocket.Init(this); m_ctrlListBox.AddString(_T("*** 연결되었습니다. ***")); 수신용 및 송신용 CArchive 객체 생성 CSocket, CSocketFile, CArchive 객체들을 연결

일대일 채팅 프로그램 – 접속 요청 void CChatDlg::OnConnect() { CConnectDlg dlg; // IP 주소를 입력 받는 대화상자 출력 if(dlg.DoModal() != IDOK) return; if (!m_DataSocket.Create()) { // 클라이언트 소켓 생성 AfxMessageBox(_T("클라이언트 소켓 생성 실패")); return; } if (!m_DataSocket.Connect(dlg.m_strAddress, 2000)) { // 접속 요청 AfxMessageBox(_T("서버 접속 실패")); m_DataSocket.Init(this); // 클라이언트 소켓 초기화 m_ctrlListBox.AddString("*** 연결되었습니다. ***");

일대일 채팅 프로그램 – 데이터 송수신 (1/6) CData 클래스에 주고 받을 데이터 형식 설정 class CData : public CObject { public: virtual void Serialize(CArchive &ar); CString m_strData; }; void CData::Serialize(CArchive &ar) { if (ar.IsStoring()) { ar << m_strData; // 네트워크로 송신 } else { ar >> m_strData; // 네트워크에서 수신

일대일 채팅 프로그램 – 데이터 송수신 (2/6) 데이터 송신을 위한 Edit 컨트롤 서브 클래싱 Edit 컨트롤에서 [Enter] 키 누를 때 전송을 위해 이벤트 발생 필요 [Insert | New Class] 메뉴를 이용하여 CEdit에서 상속 받는 CEnterNotifyEdit라는 클래스를 만든다 WM_CHAR 메시지 처리기를 다음과 같이 재정의 리소스 심볼 ID_ENTERKEY 등록: ResourceView에서 최상위 항목 <Chat resources>에 대해 오른쪽 마우스 버튼을 클릭하여 나타나는 [Resource Symbols] 메뉴를 사용함 Edit 컨트롤에 Control형 멤버 변수를 연결(CEnterNotifyEdit 타입) void CEnterNotifyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { if (nChar == VK_RETURN) GetParent()->SendMessage(WM_COMMAND, ID_ENTERKEY, 0); CEdit::OnChar(nChar, nRepCnt, nFlags); }

일대일 채팅 프로그램 – 데이터 송수신 (3/6) 데이터 송신 ([Enter] 키 누를 때마다 데이터 전송) #include "EnterNotifyEdit.h" class CChatDlg : public CDialog { … CEnterNotifyEdit m_ctrlEdit; afx_msg void OnEnterkey(); }; BEGIN_MESSAGE_MAP(CChatDlg, CDialog) … ON_COMMAND(ID_ENTERKEY, OnEnterkey) END_MESSAGE_MAP()

일대일 채팅 프로그램 – 데이터 송수신 (4/6) 데이터 송신 (계속) void CChatDlg::OnEnterkey() { UpdateData(TRUE); CData data; data.m_strData = m_strEdit; m_DataSocket << data; // 데이터 전송 // 전송된 문자열을 상단 윈도우에도 표시 m_ctrlListBox.AddString(m_strEdit); m_ctrlListBox.SetCurSel(m_ctrlListBox.GetCount()-1); m_ctrlListBox.SetCurSel(-1); m_strEdit.Empty(); // Edit 컨트롤 초기화 UpdateData(FALSE); } SetCurSel() 함수는 List Box 컨트롤에 텍스트가 가득 찼을 경우 스크롤하기 위함

일대일 채팅 프로그램 – 데이터 송수신 (5/6) 데이터 수신 ([Enter] 키 누를 때마다 데이터 전송) class CChatDlg : public CDialog { … afx_msg LRESULT OnReceive(WPARAM wParam, LPARAM lParam); }; BEGIN_MESSAGE_MAP(CChatDlg, CDialog) … ON_MESSAGE(UM_DATARECEIVE, OnReceive) END_MESSAGE_MAP()

일대일 채팅 프로그램 – 데이터 송수신 (6/6) 데이터 수신 (계속) LRESULT CChatDlg::OnReceive(WPARAM wParam, LPARAM lParam) { // 통신 버퍼에 있는 데이터를 전부 수신할 때까지... do { // 데이터 수신 CData data; m_DataSocket >> data; // 수신된 데이터 표시 m_ctrlListBox.AddString(data.m_strData); m_ctrlListBox.SetCurSel(m_ctrlListBox.GetCount()-1); m_ctrlListBox.SetCurSel(-1); } while (!m_DataSocket.m_pArchiveIn->IsBufferEmpty()); return 0L; }

추가 실습 사항 프르그램의 기능 확장 파일 전송 다중 사용자 간 채팅