3.1. μλ² ¶
- μλ²λ₯Ό ꡬννκΈ° μν΄μ CSocketμ μμλ°μμ ν΄λμ€λ₯Ό νλ μμ±νλ€. CSocketμ MFCμμ μ 곡ν΄μ£Όλ ν΄λμ€
~cpp
class CServerSocket : public CSocket
{
///////////////////////
// member variables
///////////////////////
protected:
CWnd *m_pWnd;
int id;
public:
///////////////////////
// member functions
///////////////////////
CServerSocket();
virtual ~CServerSocket();
void Init(CWnd *pWnd, int nPortNum);
// Overrides
public:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CServerSocket)
public:
virtual void OnAccept(int nErrorCode);
//}}AFX_VIRTUAL
// Generated message map functions
//{{AFX_MSG(CServerSocket)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
};
- μλλ μλ²μμΌ κ΅¬νλΆλΆμ€ μ€μλΆλΆ
~cpp
void CServerSocket::Init(CWnd *pWnd, int nPortNum)
{
m_pWnd = pWnd;
id = nPortNum;
Create(nPortNum); //νΉμ ν¬νΈ λ²νΈλ‘ μλ²λ₯Ό μμ±νλ€.
Listen(); //ν΄λΌμ΄μΈνΈμ μ μμ κΈ°λ€λ¦°λ€.
}
3.1.1. λ§λ ν΄λμ€λ₯Ό μ¬μ©νλ λΆλΆ ¶
~cpp
void COmokView::OnServercreate()
{
m_serverSocket.Init(this,SERVERPORT); //μλ²λ₯Ό μμ±νλ€.
}
///ν΄λΌμ΄μΈνΈκ° μ μνλ κ²½μ° μ΄λ²€νΈκ° λ°μνμ¬ μλ ν¨μκ° νΈμΆλλ€.
LRESULT COmokView::OnAcceptClient(WPARAM wParam, LPARAM lParam)
{
m_dataSocket = new CDataSocket;
// accept to connect
if(!m_serverSocket.Accept(*m_dataSocket)) // μ μμ λ°λλ€. m_dataSocketμ ν΅ν΄ ν΅μ νλ€.
{
AfxMessageBox(_T("Accept failed"));
return 0;
}
// init socket
m_dataSocket->Init(this); //μ΄κΈ°ν
m_dataSocket->SetPort(SERVERPORT); //ν¬νΈ μ€μ
CData temp;
*m_dataSocket >> temp; //ν΄λΌμ΄μΈνΈλ‘λΆν° λ©μμ§λ₯Ό λ°μλ€.
AfxMessageBox(temp.m_strData); //ν
μ€νΈ νμΈμ©μΌλ‘ λ°μ λ©μμ§λ₯Ό λμμ€λ€.
temp.m_strData = "TEST2";
*m_dataSocket << temp; // ν΄λΌμ΄μΈνΈμκ² λ©μμ§λ₯Ό 보λΈλ€.
return 0L;
}
3.2. ν΄λΌμ΄μΈνΈ ¶
- μμ€ μ°Έκ³ ..
λ무 κΈΈλ€.
- ν¬κ² μλμ κ°μ μ μ°¨
- m_dataSocket.Create() //
- m_dataSocket.Connect(dlg1.m_strIpAddress, createBlkFile)
- m_dataSocket.Init(this);
- m_dataSocket.Create() //
~cpp
CIpAddressDlg dlg1;
m_dataSocket = new CDataSocket;
if(dlg1.DoModal() == IDOK)
{
if(!m_dataSocket->Create())
{
AfxMessageBox(_T("ν΄λΌμ΄μΈνΈ μμΌ μμ± μ€ν¨"));
return FALSE;
}
// request to connect
if(!m_dataSocket->Connect(dlg1.m_strIpAddress, 2000))
{
int err = GetLastError();
AfxMessageBox(_T("μλ² μ μ μ€ν¨"));
return FALSE;
}
}
else
return false;
m_dataSocket->Init(this);
CData data;
data.m_strData = "TEST";
data.m_index = 0;
*m_dataSocket << data; //λ°μ΄ν° μ£Όκ³ λ°κΈ° ν
μ€νΈ
*m_dataSocket >> data;
AfxMessageBox(data.m_strData);
return true;
3.3. μ°Έκ³ μμ€ ¶
- μλ μμ€λ μμΌ ν
μ€νΈ μ©μΌλ‘ κ°λ¨νκ² μλ²μ ν΄λΌμ΄μΈνΈκ° λ©μμ§λ₯Ό μ£Όκ³ λ°λ νλ‘κ·Έλ¨
- μ΄ νλ‘κ·Έλ¨μ 2κ° μ€ν μν¨λ€.
- νμͺ½μμλ μλ² μμ±μ μ ν (XPμ κ²½μ° μ΄ νλ‘κ·Έλ¨μ μλ²λ₯Ό νμ©ν μ§ λ¬Όμ΄λ³Όλ μ μ ν)
- λ€λ₯Έ νμͺ½μμλ μλ² μ μμ μ ν IPμ, IDλ₯Ό λμ μλ κ·Έλλ‘ λλκ³ (νμ¬ μ»΄ν¨ν°λΌλ μλ―Έ) OK μ ν
- κ·Έλ¬λ©΄ μλ²μͺ½μμ TEST λ©μμ§λ₯Ό λ°μλ€λκ²μ΄ λμ€κ³ , κ·Έκ²μ OK λλ₯΄λ©΄ ν΄λΌμ΄μΈνΈμͺ½μμ TEST2λ©μμ§λ₯Ό λ°μλ€κ³ λμ¨λ€.
- μ΄ νλ‘κ·Έλ¨μ 2κ° μ€ν μν¨λ€.
- μ΄λ°κ²μ μ΄μ©ν΄μ ν΄ λκ° μμ
3.4. Thread ¶
μλ²μ MFCμ CSocketμ μ°λ κ²μ 그리 λ°λμ§ν΄λ³΄μ΄μ§ μλ€μ. μλμ μΌλ‘ μ¬μ©νκΈ° μ’ μ΄λ ΅κ² μ§λ§ CAsyncSocketμ μ¨λ³΄λλ‘ νμΈμ. (κ°μΈμ μΌλ‘λ μ΄κ²λ λ³λ‘ μΆμ²νμ§ μμ΅λλ€. νμ§λ§ MSNμ΄λ λ€μ΄νΈμ¨μ²λΌ λν λ©μ μ λ₯Ό λ§λλκ² μλλκΉ CAsyncSocketμΌλ‘λ μΆ©λΆν΄ 보μ΄λ€μ.) κΈ°νκ° λλ€λ©΄ MFC Socketλ§κ³ WinsockμΌλ‘ μ½λ©ν΄λ³΄μΈμ. --μΈμ










