~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(); //클라이언트의 접속을 기다린다.
}
~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;
}
너무 길다.
~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;