- OnAccept() 를 재정의 함 (필수)
void CListenSocket::OnAccept(int nErrorCode)
{
CClientSocket* pClient = new CClientSocket;
if (Accept(*pClient))
{
// pClient의 AsyncSocket에 this 등록 // Collection에 pClient 등록 }
else
{
delete pClient;
// Error 처리 }
CAsyncSocket::OnAccept(nErrorCode);
}
{
CClientSocket* pClient = new CClientSocket;
if (Accept(*pClient))
{
// pClient의 AsyncSocket에 this 등록 // Collection에 pClient 등록 }
else
{
delete pClient;
// Error 처리 }
CAsyncSocket::OnAccept(nErrorCode);
}
- CSocket 을 저장 할 Collection 추가 ( List, Hashmap 등... 필요에 따라 구현)
- CloseClient() 구현 : Collection에서 Client 삭제, Client->Shutdown(), Close()
- Client에게 Send()하는 Function 구현 : Collection에서 필요한 Client 찾아서 Send() 호출
2. CSocket을 상속받아 CClientSocket 을 생성
- OnReceive()를 재정의 함 (필수)
void CClientSocket::OnReceive(int nErrorCode)
{
CString strIPAddress = _T("");
UINT uPortNumber = 0;
GetPeerName(strIPAddress, uPortNumber);
TCHAR szBuffer[1024];
::ZeroMemory(szBuffer, sizeof(szBuffer));
if(Receive(szBuffer, sizeof(szBuffer)) > 0)
{
// szBuffer의 내용을 처리 : CAsyncSocket의 Client List의 특정 Client에게 전달 // 바로 Send 할 경우 메세지 가공 후 여기서 바로 Send() 호출 가능 }
CSocket::OnReceive(nErrorCode);
}
{
CString strIPAddress = _T("");
UINT uPortNumber = 0;
GetPeerName(strIPAddress, uPortNumber);
TCHAR szBuffer[1024];
::ZeroMemory(szBuffer, sizeof(szBuffer));
if(Receive(szBuffer, sizeof(szBuffer)) > 0)
{
// szBuffer의 내용을 처리 : CAsyncSocket의 Client List의 특정 Client에게 전달 // 바로 Send 할 경우 메세지 가공 후 여기서 바로 Send() 호출 가능 }
CSocket::OnReceive(nErrorCode);
}
- CAsyncSocket* : ListenSocket을 등록
- OnClose()를 재정의 : 스스로 Shutdown(), Close()하거나, ListenSocket에 자신을 Close 하라고 호출
3. CListenSocket을 생성 후 Server 시작 시점에 Create 하고 Listen
if(m_ListenSocket.Create(Port번호, SOCK_STREAM))
{
if (!m_ListenSocket.Listen())
{
// ERROR: Listen() }
}
else
{
// ERRER : Failed to create server socket!}
{
if (!m_ListenSocket.Listen())
{
// ERROR: Listen() }
}
else
{
// ERRER : Failed to create server socket!}
댓글 없음:
댓글 쓰기