U E D R , A S I H C RSS

5인용C++스터디/소켓프로그래밍

1:1 .
----

해하


트(트) .

!!!

한 '호' IP
태(Listen)
(Connect)
(Accept)

-클트 환 .
~cpp 
    Socket  -> Socket   (bind)
    -> 클  (listen)
    -> 클  (Accept)
    -> 클    

(connect) 하 .
~cpp 
     Socket  ->   (connect) ->    


()

Dialog based -> Windows Sockets
CAsyncSocket CListenSock, CChildSock .
.
CListenSock OnAccept() .

~cpp 
	((CServerApp*)AfxGetApp())->Accept();

CChildSock OnReceive() OnClose() .

~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
CServerDlg OnInit Dialog()함 .

~cpp 
	((CServerApp*)AfxGetApp)->InitServer();
	GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
CServerDlg IDC_SEND 핑한 .

~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
행하 CConnectDlg CConnectDlg .

~cpp 
	CString m_strAddress;
CConnectDlg IDOK 핑하 한 IP 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
CClientDlg IDC_CONNECT 핑한 .

~cpp 
	((CClientApp*)AfxGetApp())->Connect();
CClientDlg IDC_SEND 핑한 .

~cpp 
	CString strData;
	GetDlgItemText(IDC_DATA, strData);
	((CClientApp*)AfxGetApp())->SendData(strData);
	SetDlgItemText(IDC_DATA,"");

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:18
Processing time 0.0229 sec