Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 안드로이드 파이어베이스 facebook
- MFC 채팅 예제
- OpenCV 검은색 픽셀
- Android 알람 앱
- 안드로이드 Firebase
- 안드로이드 스튜디오 알람
- OpenCV 이미지
- c#
- 안드로이드 firebase 회원가입
- C++ 채팅
- OpenCV 픽셀
- 안드로이드
- MFC 소켓 프로그래밍
- Python
- 안드로이드 데이터베이스
- MFC TCP/IP
- MFC
- OpenCV 이미지 처리
- MFC 채팅 프로그램
- OpenCV pixel
- OpenCV IMAGE
- OpenCV 흰색 픽셀
- c++ ifstream
- MFC 채팅
- 코틀린
- c++ 쓰레드
- 안드로이드 스튜디오
- 파이썬
- c++ ofstream
- Kotlin
Archives
- Today
- Total
개발자 승학
MFC 소켓 프로그래밍 - 채팅 프로그램(서버, 클라이언트) 본문
서버관련 예제는 이전 글을 확인하시면 됩니다.
[클라이언트 예제]
1.
프로젝트 이름 ChatClient
대화상자 기반으로 생성합니다. 생성방법은 서버예제 글에 사진첨부 하였습니다.
상단에 List Box를 배치하고 m_List로 변수추가합니다.
밑에 Edit Control과 전송 버튼을 배치합니다.
2.
CSocket 클래스를 상속받는 CConnectSocket 클래스를 추가합니다.
솔루션 탐색기 우클릭 -> 추가 -> 클래스 -> MFC클래스
3.
[CChatClientDlg.h]
// ChatClientDlg.h : 헤더 파일
//
#pragma once
#include "afxwin.h"
#include "ConnectSocket.h"
// CChatClientDlg 대화 상자
class CChatClientDlg : public CDialogEx
{
// 생성입니다.
public:
CChatClientDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
CConnectSocket m_Socket;
ConnectSocket.h를 포함하고 CConnectSocket 클래스 객체를 멤버로 등록합니다.
4.
[CConnectSocket.cpp]
클래스뷰 -> CConnectSocket우클릭 -> 속성 -> 재정의(초록색 아이콘) -> OnClose 재정의
void CConnectSocket::OnClose(int nErrorCode)
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
ShutDown();
Close();
CSocket::OnClose(nErrorCode);
AfxMessageBox(L"ERROR: Disconnected from server!");
::PostQuitMessage(0);
}
5.
[CConnectSocket.cpp]
클래스뷰 -> CConnectSocket우클릭 -> 속성 -> 재정의(초록색 아이콘) -> OnReceive 재정의
void CConnectSocket::OnReceive(int nErrorCode)
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
TCHAR szBuffer[1024];
::ZeroMemory(szBuffer, sizeof(szBuffer));
if (Receive(szBuffer, sizeof(szBuffer)) > 0)
{
CChatClientDlg* pMain = (CChatClientDlg*)AfxGetMainWnd();
pMain->m_List.AddString(szBuffer);
pMain->m_List.SetCurSel(pMain->m_List.GetCount() - 1);
}
CSocket::OnReceive(nErrorCode);
}
CChatClientDlg 클래스를 참조하기 위해 #include "ChatClientDlg.h"를 상단에 추가합니다.
6.
[CChatClientDlg.cpp]
// CChatClientDlg 메시지 처리기
BOOL CChatClientDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
m_Socket.Create();
if (m_Socket.Connect(L"127.0.0.1", 21000) == FALSE)
{
AfxMessageBox(L"ERROR: Failed to connect server");
PostQuitMessage(0);
return FALSE;
}
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
서버에 접속하는 코드를 추가합니다.
7.
[CChatClientDlg.cpp]
void CChatClientDlg::OnBnClickedButton1()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
m_Socket.Send((LPVOID)(LPCTSTR)m_strMessage, m_strMessage.GetLength() * 2);
m_strMessage = L"";
UpdateData(FALSE);
}
전송버튼 클릭 이벤트입니다.
서버 프로젝트와 클라이언트 프로젝트를 실행하여 채팅을 전송하면 결과를 확인하실 수 있습니다.
'it > MFC' 카테고리의 다른 글
MFC 소켓 프로그래밍 - 채팅 프로그램(서버, 클라이언트) (2) | 2019.10.11 |
---|
Comments