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);