16,472
社区成员
发帖
与我相关
我的任务
分享
void CNetworkComDlg::OnStart()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(!AfxSocketInit(NULL))//初始化套接字
{
AfxMessageBox("CSocket初始化失败!");
return;
}
if(serverSocket!=NULL)
{
serverSocket->Close();//关闭套接字
delete serverSocket;
}
serverSocket=new CSocket;
if(!serverSocket->Create(m_Port))//创建套接字,会自动绑定
{
AfxMessageBox("套接字创建失败!");
return;
}
if(!serverSocket->Listen(5))//开始侦听
{
AfxMessageBox("套接字侦听失败!");
return;
}
CButton *pButton=(CButton *)GetDlgItem(IDC_START);
pButton->EnableWindow(false);
SOCKET hSOCKET=serverSocket->Detach();//从CSocket中分离出SOCKET
RECVPARAM *pRecvData=new RECVPARAM;
pRecvData->serverSocket=serverSocket;
pRecvData->currentSocket=NULL;
pRecvData->hwnd=m_hWnd;//当前窗口的句柄
pRecvData->pSOCKET=hSOCKET;
AfxBeginThread(ThreadProc,pRecvData);//启动新的线程来负责侦听
}
UINT CNetworkComDlg::ThreadProc(LPVOID lparam)//开始服务器的监听
{
try
{
RECVPARAM *pRecvData=(RECVPARAM *)lparam;
CSocket *server=pRecvData->serverSocket;
SOCKET sock=pRecvData->pSOCKET;
server->Attach(sock);//将CSocket与SOCKET绑定
while(true)
{
CSocket *clientSocket=new CSocket;
server->Accept(*clientSocket);//获得客户端的连接
//接收客户端的连接之后启动新的线程来处理与客户端的交互
pRecvData->currentSocket=clientSocket;
SOCKET hSOCKET=clientSocket->Detach();//从CSocket中分离出SOCKET
pRecvData->pSOCKET=hSOCKET;
AfxBeginThread(SendRecvProc,pRecvData);//启动新的线程来处理与客户端的交互
delete clientSocket;
}
}
catch(int ex)
{
return 0;
}
return 0;
}