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,"");
(라) ¶
동 방법로 라 로그램 래 CClientSock (기 래: CAsyncSocket)다. 그리고 나 래드 CClientSock 가 OnReceive() OnClose()를 가 , 다 드를 다.
~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++디