mfc_NetWork_1 - 8BitsCoding/RobotMentor GitHub Wiki

Server ๋งŒ๋“ค๊ธฐ

์ƒˆ ํ”„๋กœ์ ํŠธ -> MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ -> ๋Œ€ํ™”์ƒ์ž -> Windows ์†Œ์ผ“ ์ถ”๊ฐ€

ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ -> MFC ํด๋ž˜์Šค -> CSocket์„ ์ƒ์† ๋ฐ›์•„์„œ MyServer Class ์ƒ์„ฑ

// Dlg.h
#include "MyServer.h"

// ...

private:
    MyServer m_server;
// OnInitDlg
m_server.Create(26001);

Create์—์„œ IP๋Š” ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ PC์˜ IP๋กœ ์ง€์ •, ํ•˜์ง€๋งŒ Port๋ฒˆํ˜ธ๋Š” ์ง์ ‘ ์ง€์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.


Client ๋งŒ๋“ค๊ธฐ

์ƒˆ ํ”„๋กœ์ ํŠธ -> MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ -> ๋Œ€ํ™”์ƒ์ž -> Windows ์†Œ์ผ“ ์ถ”๊ฐ€

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด EditBox์˜ ํ…์ŠคํŠธ๋ฅผ ์ฝ์–ด์™€์„œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์˜ˆ์ •

// ๋ฒ„ํŠผ ํด๋ฆญ
int value = GetDlgItemInt(IDC_VALUE_EDIT);

CSocket temp;
temp.Create();      // Client ๋Š” Createํ•  ๋•Œ IP/Port๋ฅผ ์ ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
temp.Connect(L"192.168.0.118", 26001);

temp.Send(&value, sizeof(int);)

Server Listen ๋งŒ๋“ค๊ธฐ

// OnInitDlg
m_server.Create(26001);
m_server.Listen();

ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ -> ๊ฐ€์ƒ ํ•จ์ˆ˜ -> OnAccept ์ƒ์„ฑ

MyServer ํด๋ž˜์Šค์—์„œ -> ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ -> MFC ํด๋ž˜์Šค ์ถ”๊ฐ€ -> CSocket์„ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค ์ƒ์„ฑ(MyUser)

// MyServer.h
#include "MyUser.h"

// ...

private:
    MyUser m_user;
// MyServer::OnAccept
Accept(m_user);

CSocket::OnAccept(nErrorCode);

MyUser ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ -> ๊ฐ€์ƒ ํ•จ์ˆ˜ -> OnReceive ์ƒ์„ฑ

// MyUser::OnReceive
int value;
Receive(&value, sizeof(int));

AfxGetMainWnd()->SetDlgItemInt(IDC_VALUE_EDIT, value);

CSocket::OnReceive(nErrorCode);

MyUser ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ -> ๊ฐ€์ƒ ํ•จ์ˆ˜ -> OnClose ์ƒ์„ฑ

// MyUser::OnClose
ShutDown(2); // ๋ฐ์ดํ„ฐ๊ฐ€ ์†ก์ˆ˜์‹  ์ค‘์ด๋ผ๋„ ๋ฌด์‹œํ•˜๊ฒ ๋‹ค.
Close();
// Client๊ฐ€ ์ ‘์†์„ ํ•ด์ œ ํ–ˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

์„œ๋ฒ„์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ์ˆ˜์‹ ํ•œ ๊ฒฝ์šฐ 1์„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก

// MyUser::OnReceive
int value;
Receive(&value, sizeof(int));
AfxGetMainWnd()->SetDlgItemInt(IDC_VALUE_EDIT, value);

value = 1;
Send(&value, sizeof(int));

CSocket::OnReceive(nErrorCode);

ํด๋ผ์ด์–ธํŠธ์ชฝ๋„ CSocket์„ ์ƒ์†ํ•ด์„œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•จ.

// MyClient : public CSocket
// OnReceive
int value;
Receive(&value, sizeof(int));

AfxGetMainWnd()->SetDlgItemInt(IDC_VALUE_EDIT, value);