1:1 램 만들 를 .
----
----
¶
| 를 받 ' 번' | IP |
| 를 받 는 | 대(Listen) |
| (Connect) | |
| 를 받 | (Accept) |
~cpp
Socket -> Socket (bind)
-> 림(listen)
-> 를 받들 (Accept)
-> 명 받 를
~cpp
Socket -> (connect) -> 명
() ¶
Dialog based -> Windows Sockets를
CAsyncSocket CListenSock, CChildSock .
를 .
CListenSock OnAccept()를 .
CAsyncSocket CListenSock, CChildSock .
를 .
CListenSock OnAccept()를 .
~cpp ((CServerApp*)AfxGetApp())->Accept();
~cpp ((CServerApp*)AfxGetApp())->CloseChild();
~cpp ((CServerApp*)AfxGetApp())->ReceiveData();
리 멤변 .
~cpp #include "ChildSock.h" #include "ListenSock.h"
~cpp void InitServer(); void Accept(); void SendData(CString& strData); void ReceiveData(); void CloseChild(); void CleanUp(); CListenSock* m_pServer; CChildSock* m_pChild;
리 멤변를 .
~cpp m_pServer = NULL; m_pChild = NULL;
리 멤를 .
~cpp
void CServerApp::InitServer()
{
m_pServer = new CListenSock;
m_pServer->Create(7000);
m_pServer->Listen();
}
void CServerApp::Accept()
{
AfxMessageBox(" ");
m_pChild = new CChildSock;
m_pServer->Accept(*m_pChild);
m_pMainWnd->GetDlgItem(IDC_SEND)->EnableWindow(TRUE);
}
데 는 를 . , 데 마무리 .
~cpp
void CServerApp::SendData(CString& strData)
{
m_pChild->Send(LPCSTR(strData), strData.GetLength()+1);
CString strText;
UINT nPort;
m_pChild->GetSockName(strText, nPort);
strText = "[" + strText + "]" + strData;
((CListBox*)m_pMainWnd->GetDlgItem(IDC_LIST1))->InsertString(-1, strText);
}
void CServerApp::ReceiveData()
{
char temp[1000];
m_pChild->Receive(temp, sizeof(temp));
CString strText;
UINT nPort;
m_pChild->GetPeerName(strText, nPort);
strText = "[" + strText + "]" + temp;
((CListBox*)m_pMainWnd->GetDlgItem(IDC_LIST1))->InsertString(-1, strText);
}
void CServerApp::CleanUp()
{
if (m_pChild)
delete m_pChild;
if (m_pServer)
delete m_pServer;
}
void CServerApp::CloseChild()
{
AfxMessageBox("료");
delete m_pChild;
m_pMainWnd->GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
}
리 목 "IDD_SERVER_DIALOG" .
~cpp 리ID : IDC_LIST1 디 롤ID : IDC_DATA 롤ID : IDC_SEND
~cpp ((CServerApp*)AfxGetApp)->InitServer(); GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
~cpp CString strData; GetDlgItemText(IDC_DATA, strData); ((CServerApp*)AfxGetApp())->SendData(strData); SetDlgItemText(IDC_DATA,"");
() ¶
~cpp ((CClientApp*)AfxGetApp())->CloseChild();
~cpp ((CClientApp*)AfxGetApp())->ReceiveData();
IP 를 받 리 를 .
~cpp IP 롤ID : IDC_IPADDRESS1 ID : IDOK, IDCANCLE
~cpp CString m_strAddress;
~cpp GetDlgItemText(IDC_IPADDRESS1, m_strAddress);
리 멤변 .
~cpp #include "ClientSock.h"
~cpp void Connect(); void SendData(CString& strData); void ReceiveData(); void CloseChild(); void CleanUp(); CClientSock* m_pClient;리 멤변를 .
~cpp m_pClient = NULL;
~cpp
#include "ConnectDlg.h"
void CClientApp::Connect()
{
CConnectDlg dlg;
if (dlg.DoModal() == IDOK)
{
m_pClient = new CClientSock;
m_pClient->Create();
m_pClient->Connect(dlg.m_strAddress, 7000);
m_pMainWnd->GetDlgItem(IDC_SEND)->EnableWindow(TRUE);
m_pMainWnd->GetDlgItem(IDC_CONNECT)->EnableWindow(FALSE);
}
}
램 번(7000) 번 .
데 마무리 램 .
데 마무리 램 .
~cpp
void CClientApp::SendData(CString& strData)
{
m_pClient->Send(LPCSTR(strData), strData.GetLength()+1);
CString strText;
UINT nPort;
m_pClient->GetSockName(strText, nPort);
strText = "[" + strText + "]" + strData;
((CListBox*)m_pMainWnd->GetDlgItem(IDC_LIST1))->InsertString(-1, strText);
}
void CClientApp::ReceiveData()
{
char temp[100];
m_pClient->Receive(temp, sizeof(temp));
CString strText;
UINT nPort;
m_pClient->GetPeerName(strText, nPort);
strText = "[" + strText + "]" + temp;
((CListBox*)m_pMainWnd->GetDlgItem(IDC_LIST1))->InsertString(-1, strText);
}
void CClientApp::CleanUp()
{
if (m_pClient)
delete m_pClient;
}
void CClientApp::CloseChild()
{
AfxMessageBox("료");
m_pMainWnd->GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
}
리 목 "IDD_CLIENT_DIALOG" 더블릭 .
~cpp 리 ID : IDC_LIST1 디 ID : IDC_DATA ID : IDC_SEND, IDC_CONNECT
~cpp ((CClientApp*)AfxGetApp())->Connect();
~cpp CString strData; GetDlgItemText(IDC_DATA, strData); ((CClientApp*)AfxGetApp())->SendData(strData); SetDlgItemText(IDC_DATA,"");
¶
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=260&nnew=2
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=261&nnew=2
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=262&nnew=2
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=263&nnew=2
http://165.194.17.15/pub/upload/p2pChattingProgram
----
5C++디
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=261&nnew=2
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=262&nnew=2
http://www.rein.pe.kr/technote/read.cgi?board=programing&y_number=263&nnew=2
http://165.194.17.15/pub/upload/p2pChattingProgram
----
5C++디










