16,471
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI CChatDlg::ListenThread(LPVOID p)
{
CChatDlg* pDlg = (CChatDlg*)p;
CSocket ListenSocket, AcceptSocket;
if (ListenSocket.Create(pDlg->m_ListenPort) == FALSE)
{
ListenSocket.Close();
::PostMessage(pDlg->m_hWnd, WM_ERROR, 1, 1);
return 0;
}
if (ListenSocket.Listen() == FALSE)
{
ListenSocket.Close();
::PostMessage(pDlg->m_hWnd, WM_ERROR, 1, 2);
return 0;
}
CString ip;
ListenSocket.GetSockName(ip, pDlg->m_ListenPort);
pDlg->m_ServerOnline = TRUE;
::PostMessage(pDlg->m_hWnd, WM_SERVER_CREATED, 0, 0);
while (pDlg->m_ServerOnline)
{
if (ListenSocket.Accept(AcceptSocket, NULL, NULL) == FALSE)
{
pDlg->m_ServerOnline = FALSE;
::PostMessage(pDlg->m_hWnd, WM_ERROR, 1, 3);
}
if (pDlg->m_ServerOnline == FALSE)
{
break;
}
CString strIP;
UINT nPort;
AcceptSocket.GetSockName(strIP, nPort);
::PostMessage(pDlg->m_hWnd, WM_CONNECT, (WPARAM)AcceptSocket.Detach(), 0);
AcceptSocket.Close();
}
ListenSocket.Close();
::PostMessage(pDlg->m_hWnd, WM_SERVER_CLOSED, 0, 0);
return 0;
}
void CChatDlg::OnClientConnect(SOCKET AcceptSocket, LPARAM lParam)//这一段两句代码不懂什么意思,以及什么情况下会执行这段语句,和上面的::PostMessage(pDlg->m_hWnd, WM_CONNECT, (WPARAM)AcceptSocket.Detach(), 0);有什么关系吗
{
m_ServerSocket.push_back(new CServerSocket(this));
m_ServerSocket.back()->Attach(AcceptSocket);
}
m_ServerSocket.push_back(new CServerSocket(this));
m_ServerSocket.back()->Attach(AcceptSocket);
这两句代码是什么意思