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.0227 sec